非关系型数据库服务器-Redis
非关系型数据库服务器-Redis
统信服务器操作系统中集成的非关系型数据库有Redis、mongodb。
概述
Redis是一个高性能Key-Value存储系统,使用ANSI C编写,它通常被称为数据结构服务器。因为值(value)可以是字符串(String)、哈希(hashes)、列表(list)、集合(sets)和有序集合(sorted sets)等类型,Redis是最流行的键值对存储数据库。
Redis安装
133执行如下命令,安装redis包。
yum install redis
134执行如下命令,查看版本号。
redis-cli -v
Redis启动
135执行如下命令,启动redis服务。
systemctl start redis.service
136执行如下命令,查看redis服务状态。
systemctl status redis.service
Active:active (running)since Fri 2021-01-2215:06:13 CST;4sago Main PID:5648 (redis-server) Tasks:4 Memory: 4.1M CGroup:/system.slice/redis.service -5648 /usr/bin/redis-server 127.0.0.1:6379 1月22 15:06:13 localhost.1ocaldomain systemd[1]:Starting Redis persistent key-value database... 1月22 15:06:13 1ocalhost. localdomain systemd [1]:Started Redis persistent key-value database.)
137执行如下命令,检查端口监听状态。
lsof -i:6379
Redis配置
您可以通过修改“redis.conf”文件或使用CONFIG set命令来修改配置。
- 语法:Redis CONFIG命令格式如下。
redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME
- 实例
138执行如下命令。
redis 127.0.0.1:6379> CONFIG GET loglevel
-
"loglevel"
-
"notice"
2)"notice" 127.0.0.1:6379>)
139使用*号获取所有配置项:
2)"dump.rdb" 3)"requirepass 4) 1111 "masterauth" 5) 6) 1111 c-nounc- 7) 11 11 8) 9)"unixsocket" 1111 10) 11)"logfile" 12)"/var/log/redis/redis.log" 13) "pidfile" 14)"/var/run/redis_6379.pid" 15)"slave-announce-ip" 16)"" 17)"maxmemory")
140设置redis密码。
127.0.0.1:6379> CONFIG SET requirepass “密码”
OK
127.0.0.1:6379> AUTH “密码”
OK
:::note
重启服务后,这样的设置会丢失,永久配置还需要写进“/etc/redis.conf”文件中。
:::
Redis连接
Redis-cli连接命令主要是用于连接redis服务。
- 语法1:Redis客户端的基本语法如下。
$ redis-cli
- 实例1:此实例讲解了如何启动redis客户端。启动redis客户端,并执行redis-cli命令,连接本地的redis服务。
$redis-cli
redis 127.0.0.1:6379> PING
PONG
在以上实例中我们连接到本地的redis服务并执行PING命令,该命令用于检测redis服务是否启动。如果需要在远程redis服务上执行命令,我们同样使用的也是redis-cli命令。
- 语法2
$ redis-cli -h host -p port -a password
- 实例2:此实例演示了如何连接到主机为127.0.0.1、端口为6379、无密码的redis服务上。
$ redis-cli -h 127.0.0.1 -p 6379 -a ""
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG
- 实例3:此实例演示了在客户端如何通过验证密码连接到redis服务,并检测服务是否在运行。
redis-cli -h 127.0.0.1 -p 6379 -a "password"
redis 127.0.0.1:6379> AUTH "password"
OK
redis 127.0.0.1:6379> PING
PONG
Redis连接命令
下表列出了redis连接的基本命令。
表4.1redis基本命令
| 序号 | 命令及描述 |
|---|---|
1 |
AUTH password:验证密码是否正确。 |
2 |
ECHO message:打印字符串。 |
3 |
PING:查看服务是否运行。 |
4 |
QUIT:关闭当前连接。 |
5 |
SELECT index:切换到指定的数据库。 |
Redis键(key)
Redis键命令用于管理redis的键。
- 语法:Redis键命令的基本语法如下。
redis 127.0.0.1:6379> COMMAND KEY_NAME
- 实例
redis 127.0.0.1:6379> SET w3ckey redis
OK
redis 127.0.0.1:6379> DEL w3ckey
(integer) 1
127.0.0.1:6379> DEL w3ckey (integer) 0)
在以上实例中,DEL是一个命令,w3ckey是一个键。如果键被删除成功,执行命令后,会输出(integer) 1;否则,将输出(integer) 0。
Redis keys命令
表4.2给出了与Redis键相关的基本命令。
表4.1redis键操作命令
| 序号 | 命令及描述 |
|---|---|
1 |
DEL key:该命令用于在key存在时删除key。 |
2 |
DUMP key:序列化给定key,并返回被序列化的值。 |
3 |
EXISTS key:检查给定key是否存在。 |
4 |
EXPIRE key seconds:为给定key设置过期时间。 |
5 |
EXPIREAT key timestamp EXPIREAT:作用和EXPIRE类似,都用于为key设置过期时间。不同点在于EXPIREAT命令接受的时间参数是UNIX时间戳(unix timestamp)。 |
6 |
PEXPIRE key milliseconds:设置key的过期时间以毫秒计。 |
7 |
PEXPIREAT key milliseconds-timestamp:设置key过期时间的时间戳(unix timestamp)以毫秒计。 |
8 |
KEYS pattern:查找所有符合给定模式(pattern)的key。 |
9 |
MOVE key db:将当前数据库的key移动到给定的数据库db当中。 |
10 |
PERSIST key:移除key的过期时间,key将持久保持。 |
11 |
PTTL key:以毫秒为单位返回key的剩余的过期时间。 |
12 |
TTL key;以秒为单位,返回给定key的剩余生存时间(TTL,time to live)。 |
13 |
RANDOMKEY:从当前数据库中随机返回一个key。 |
14 |
RENAME key newkey:修改key的名称。 |
15 |
RENAMENX key newkey:仅当newkey不存在时,将key改名为newkey。 |
16 |
TYPE key:返回key所储存的值的类型。 |
Redis字符串(String)
string是redis最基本的类型,您可以理解成和Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
- 语法
redis 127.0.0.1:6379> COMMAND KEY_NAME
- 实例1
redis 127.0.0.1:6379> SET w3ckey redis
OK
redis 127.0.0.1:6379> GET w3ckey
"redis"
在以上实例中,我们使用了SET和GET命令,键为w3ckey。
- 实例2
redis 127.0.0.1:6379> SET name "redis.net.cn"
OK
redis 127.0.0.1:6379> GET name
"redis.net.cn"
在以上实例中我们使用了Redis的SET和GET命令,键为name,对应的值为redis.net.cn。
- Redis字符串命令:下表列出了常用的redis字符串命令。
表4.1redis字符串命令
| 序号 | 命令和描述 |
|---|---|
1 |
SET key value:设置指定key的值 |
2 |
GET key:获取指定key的值。 |
3 |
GETRANGE key start end:返回key中字符串值的子字符。 |
4 |
GETSET key value:将给定key的值设为value,并返回key的旧值(old value)。 |
5 |
GETBIT key offset:对key所储存的字符串值,获取指定偏移量上的位(bit)。 |
6 |
MGET key1 [key2..]:获取所有(一个或多个)给定key的值。 |
7 |
SETBIT key offset value:对key所储存的字符串值,设置或清除指定偏移量上的位(bit)。 |
8 |
SETEX key seconds value:将值value关联到key,并将key的过期时间设为seconds(以秒为单位)。 |
9 |
SETNX key value:只有在key不存在时设置key的值。 |
10 |
SETRANGE key offset value:用value参数覆写给定key所储存的字符串值,从偏移量offset开始。 |
11 |
STRLEN key:返回key所储存的字符串值的长度。 |
12 |
MSET key value [key value ...]:同时设置一个或多个key-value对。 |
13 |
MSETNX key value [key value ...]:同时设置一个或多个key-value对,当且仅当所有给定key都不存在时。 |
14 |
PSETEX key milliseconds value:这个命令和SETEX命令相似,但它以毫秒为单位设置key的生存时间,而不是像SETEX命令那样以秒为单位。 |
15 |
INCR key:将key中储存的数字值增一。 |
16 |
INCRBY key increment:将key所储存的值加上给定的增量值(increment)。 |
17 |
INCRBYFLOAT key increment:将key所储存的值加上给定的浮点增量值(increment)。 |
18 |
DECR key:将key中储存的数字值减一。 |
19 |
DECRBY key decrement key:所储存的值减去给定的减量值(decrement)。 |
20 |
APPEND key value:如果key已经存在并且是一个字符串,APPEND命令将value追加到key原来的值的末尾。 |
Redis哈希(Hash)
Redis hash是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis中每个hash可以存储232 - 1个键值对(40多亿)。
- 实例
redis 127.0.0.1:6379> HMSET user:1 username redis.net.cn password redis.net.cn points 200
OK
redis 127.0.0.1:6379> HGETALL user:1
-
"username"
-
"redis.net.cn"
-
"password"
-
"redis.net.cn"
-
"points"
-
"200"
redis 127.0.0.1:6379>
2)"redis.net.cn" 3)"password" 4)"redis.net.cn" 5) "points" 6)"200" 127.0.0.1:6379>)
在以上实例中,hash数据类型存储了包含用户脚本信息的用户对象,使用了Redis的HMSET和HGETALL命令,user:1为键值。
- Redis hash命令:下表列出了redis hash基本的相关命令。
表4.1redis hash命令描述
| 序号 | 命令及描述 |
|---|---|
1 |
HDEL key field2 [field2]:删除一个或多个哈希表字段。 |
2 |
HEXISTS key field:查看哈希表key中,指定的字段是否存在。 |
3 |
HGET key field:获取存储在哈希表中指定字段的值。 |
4 |
HGETALL key:获取在哈希表中指定key的所有字段和值。 |
5 |
HINCRBY key field increment:为哈希表key中的指定字段的整数值加上增量increment。 |
6 |
HINCRBYFLOAT key field increment:为哈希表key中的指定字段的浮点数值加上增量increment。 |
7 |
HKEYS key:获取所有哈希表中的字段。 |
8 |
HLEN key:获取哈希表中字段的数量。 |
9 |
HMGET key field1 [field2]:获取所有给定字段的值。 |
10 |
HMSET key field1 value1 [field2 value2 ]:同时将多个field-value(域-值)对设置到哈希表key中。 |
11 |
HSET key field value:将哈希表key中的字段field的值设为value。 |
12 |
HSETNX key field value:只有在字段field不存在时,设置哈希表字段的值。 |
13 |
HVALS key:获取哈希表中所有值。 |
14 |
HSCAN key cursor [MATCH pattern] [COUNT count]:迭代哈希表中的键值对。 |
Redis列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。您可以添加一个元素导列表的头部(左边)或者尾部(右边)。
一个列表最多可以包含232-1个元素(4294967295,每个列表超过40亿个元素)。如下示例:
redis 127.0.0.1:6379> lpush redis.net.cn redis
(integer) 1
redis 127.0.0.1:6379> lpush redis.net.cn mongodb
(integer) 2
redis 127.0.0.1:6379> lpush redis.net.cn rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange redis.net.cn 0 10
-
"rabitmq"
-
"mongodb"
) "redis"
redis 127.0.0.1:6379>
127.0.0.1:6379> 1push redis.net. cn mongodb (integer)2 127.0.0.1:6379> push redis.net.cn rabitmq (integer)3 127.0.0.1:6379> lrange redis.net.cn 0 10
- "rabitmq" 2)"mongodb" 3)"redis" 127.0.0.1:6379>)
下表列出了Redis列表相关的基本命令。
表4.1redis列表命令描述
| 序号 | 命令及描述 |
|---|---|
1 |
BLPOP key1 [key2 ] timeout:移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
2 |
BRPOP key1 [key2 ] timeout:移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
3 |
BRPOPLPUSH source destination timeout:从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
4 |
LINDEX key index:通过索引获取列表中的元素。 |
5 |
LINSERT key BEFORE|AFTER pivot value:在列表的元素前或者后插入元素。 |
6 |
LLEN key:获取列表长度。 |
7 |
LPOP key:移出并获取列表的第一个元素。 |
8 |
LPUSH key value1 [value2]:将一个或多个值插入到列表头部。 |
9 |
LPUSHX key value:将一个或多个值插入到已存在的列表头部。 |
10 |
LRANGE key start stop:获取列表指定范围内的元素。 |
11 |
LREM key count value:移除列表元素。 |
12 |
LSET key index value:通过索引设置列表元素的值。 |
13 |
LTRIM key start stop:对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 |
14 |
RPOP key:移除并获取列表最后一个元素。 |
15 |
RPOPLPUSH source destination:移除列表的最后一个元素,并将该元素添加到另一个列表并返回。 |
16 |
RPUSH key value1 [value2]:在列表中添加一个或多个值。 |
17 |
RPUSHX key value:为已存在的列表添加值。 |
Redis集合(Set)
Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis中集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。集合中最大的成员数为232-1(4294967295,每个集合可存储40多亿个成员)。
- 实例
redis 127.0.0.1:6379> SADD w3ckey redis
(integer) 1
redis 127.0.0.1:6379> SADD w3ckey mongodb
(integer) 1
redis 127.0.0.1:6379> SADD w3ckey mysql
(integer) 1
redis 127.0.0.1:6379> SADD w3ckey mysql
(integer) 0
redis 127.0.0.1:6379> SMEMBERS w3ckey
-
"mysql"
-
"mongodb"
-
"redis"
127.0.0.1:6379> SADD w3ckey redis (integer)0 127.0.0.1:6379> SADD w3ckey mongodb (integer)0 127.0.0.1:6379> SADD w3ckey mysq1 (integer)0 127.0.0.1:6379> SMEMBERS w3ckey 1)"redis" 2)"mysql" 3)"mongodb" 127.0.0.1:6379>)
在以上实例中,我们通过SADD命令向名为w3ckey的集合插入三个元素。
- Redis集合命令:下表列出了Redis集合的基本命令。
表4.1redis集合命令描述
| 序号 | 命令及描述 |
|---|---|
1 |
SADD key member1 [member2]:向集合添加一个或多个成员。 |
2 |
SCARD key:获取集合的成员数。 |
3 |
SDIFF key1 [key2]:返回给定所有集合的差集。 |
4 |
SDIFFSTORE destination key1 [key2]:返回给定所有集合的差集并存储在destination中。 |
5 |
SINTER key1 [key2]:返回给定所有集合的交集。 |
6 |
SINTERSTORE destination key1 [key2]:返回给定所有集合的交集并存储在destination中。 |
7 |
SISMEMBER key member:判断member是否是集合key的成员。 |
8 |
SMEMBERS key:返回集合中的所有成员。 |
9 |
SMOVE source destination member:将member元素从source集合移动到destination集合。 |
10 |
SPOP key:移除并返回集合中的一个随机元素。 |
11 |
SRANDMEMBER key [count]:返回集合中一个或多个随机数。 |
12 |
SREM key member1 [member2]:移除集合中一个或多个成员。 |
13 |
SUNION key1 [key2]:返回所有给定集合的并集。 |
14 |
SUNIONSTORE destination key1 [key2]:所有给定集合的并集存储在destination集合中。 |
15 |
SSCAN key cursor [MATCH pattern] [COUNT count]:迭代集合中的元素。 |
Redis事务
Redis事务可以一次执行多个命令,并且带有以下两个重要的保证:
-
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
-
事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
一个事务从开始到执行会经历三个阶段,即开始事务、命令入队、执行事务。
以下是一个事务的例子,它先以MULTI开始一个事务,然后将多个命令入队到事务中,最后由EXEC命令触发事务,一并执行事务中的所有命令。
redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED
redis 127.0.0.1:6379> GET book-name
QUEUED
redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED
redis 127.0.0.1:6379> SMEMBERS tag
QUEUED
redis 127.0.0.1:6379> EXEC
-
OK
-
"Mastering C++ in 21 days"
-
(integer) 3
-
-
"Mastering Series"
-
"C++"
-
"Programming"
-
2)"Mastering C++ in 21 days" 3)(integer)3 42) ein Serie 2)"Programming 3)"C++" 127.0.0.1:6379>)
表4.7列出了redis事务的相关命令。
表4.1redis事务命令描述
| 序号 | 命令及描述 |
|---|---|
1 |
DISCARD:取消事务,放弃执行事务块内的所有命令。 |
2 |
EXEC:执行所有事务块内的命令。 |
3 |
MULTI:标记一个事务块的开始。 |
4 |
UNWATCH:取消WATCH命令对所有key的监视。 |
5 |
WATCH key [key ...]:监视一个或多个key,如果在事务执行之前这个或这些key被其他命令所改动,那么事务将被打断。 |
Redis脚本
使用Lua解释器来执行Redis脚本。Reids 2.6版本通过内嵌支持Lua环境。执行脚本的常用命令为EVAL。
- 语法:Eval命令的基本语法如下。
redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]
- 实例:以下实例演示了redis脚本的工作过程。
redis 127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
-
"key1"
-
"key2"
-
"first"
-
"second"
-
"key2" 3)"first" 4)"second")
- Redis脚本命令:下表列出了redis脚本常用命令。
表4.1redis脚本命令描述
| 序号 | 命令及描述 |
|---|---|
1 |
EVAL script numkeys key [key ...] arg [arg ...]:执行Lua脚本。 |
2 |
EVALSHA sha1 numkeys key [key ...] arg [arg ...]:执行Lua脚本。 |
3 |
SCRIPT EXISTS script [script ...]:查看指定的脚本是否已经被保存在缓存当中。 |
4 |
SCRIPT FLUSH:从脚本缓存中移除所有脚本。 |
5 |
SCRIPT KILL:杀死当前正在运行的Lua脚本。 |
6 |
SCRIPT LOAD script:将脚本script添加到脚本缓存中,但并不立即执行这个脚本。 |
Redis服务器
Redis服务器命令主要是用于管理redis服务。
- 实例:以下实例演示了如何获取redis服务器的统计信息。
redis 127.0.0.1:6379> INFO
Server
redis_version:2.8.13
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:c2238b38b1edb0e2
redis_mode:standalone
os:Linux 3.5.0-48-generic x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.7.2
process_id:3856
run_id:0e61abd297771de3fe812a3c21027732ac9f41fe
tcp_port:6379
uptime_in_seconds:11554
uptime_in_days:0
hz:10
lru_clock:16651447

- Redis 服务器命令:下表列出了redis服务器的相关命令。
表4.1redis服务器命令描述
| 序号 | 命令及描述 |
|---|---|
1 |
BGREWRITEAOF:异步执行一个AOF(AppendOnly File)文件重写操作。 |
2 |
BGSAVE:在后台异步保存当前数据库的数据到磁盘。 |
3 |
CLIENT KILL [ip:port] [ID client-id]:关闭客户端连接。 |
4 |
CLIENT LIST:获取连接到服务器的客户端连接列表。 |
5 |
CLIENT GETNAME:获取连接的名称。 |
6 |
CLIENT PAUSE timeout:在指定时间内终止运行来自客户端的命令。 |
7 |
CLIENT SETNAME connection-name:设置当前连接的名称。 |
8 |
CLUSTER SLOTS:获取集群节点的映射数组。 |
9 |
COMMAND:获取Redis命令详情数组。 |
10 |
COMMAND COUNT:获取Redis命令总数。 |
11 |
COMMAND GETKEYS:获取给定命令的所有键。 |
12 |
TIME:返回当前服务器时间。 |
13 |
COMMAND INFO command-name [command-name ...]:获取指定Redis命令描述的数组。 |
14 |
CONFIG GET parameter:获取指定配置参数的值。 |
15 |
CONFIG REWRITE:对启动Redis服务器时所指定的redis.conf配置文件进行改写。 |
16 |
CONFIG SET parameter value:修改redis配置参数,无需重启。 |
17 |
CONFIG RESETSTAT:重置INFO命令中的某些统计数据。 |
18 |
DBSIZE:返回当前数据库的key的数量。 |
19 |
DEBUG OBJECT key:获取key的调试信息。 |
20 |
DEBUG SEGFAULT:让Redis服务崩溃。 |
21 |
FLUSHALL:删除所有数据库的所有key。 |
22 |
FLUSHDB:删除当前数据库的所有key。 |
23 |
INFO [section]:获取Redis服务器的各种信息和统计数值。 |
24 |
LASTSAVE:返回最近一次Redis成功将数据保存到磁盘上的时间,以UNIX时间戳格式表示。 |
25 |
MONITOR:实时打印出Redis服务器接收到的命令,调试用。 |
26 |
ROLE:返回主从实例所属的角色。 |
27 |
SAVE:异步保存数据到硬盘。 |
28 |
SHUTDOWN [NOSAVE] [SAVE]:异步保存数据到硬盘,并关闭服务器。 |
29 |
SLAVEOF host port:将当前服务器转变为指定服务器的从属服务器(slave server)。 |
30 |
SLOWLOG subcommand [argument]:管理redis的慢日志。 |
31 |
SYNC:用于复制功能(replication)的内部命令。 |
参考
Redis其他操作请参见redis的官网指导:
-
https://www.redis.net.cn/tutorial/3501.html
-
http://www.redis.cn/documentation.html
No comments to display
No comments to display