redis使用指南
一、Redis简介
redis展开来看就是remote directory server。redis是开源的,基于内存的数据结构存储,可以作为数据库,缓存系统或者消息队列。它支持数据结构有字符串、列表(数组)、hashes(关联数组)、集合、有序集合、bitmaps(位图)、hyperloglogs、空间索引,十分的强大。redis有内建的复制功能,支持lua脚本,LRU算法,事务,持久存储并且支持高可用(sentinel,redis cluster)。以下是redis的特点总结:
二、Redis安装
由于redis功能十分的强大,应用十分的广泛,目前已经被收录到了epel仓库,因此我们只需要将yum仓库指向epel仓库即可。因此这里安装十分的简单,直接yum install -y redis。注意我这里安装的是redis3.2版本,目前官方最新版本为redis4。下载安装方式十分简单。如有想法,请戳网址
https://redis.io/download
三、配置文件详解
通常rpm安装的软件包,我们可以通过如下命令查看程序相关的配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
[root@mysql ~]
# rpm -ql redis
/etc/logrotate
.d
/redis
/etc/redis-sentinel
.conf
#监控(哨兵)配置文件
/etc/redis
.conf
#主配置文件
/etc/systemd/system/redis-sentinel
.service.d
/etc/systemd/system/redis-sentinel
.service.d
/limit
.conf
/etc/systemd/system/redis
.service.d
/etc/systemd/system/redis
.service.d
/limit
.conf
/usr/bin/redis-benchmark
/usr/bin/redis-check-aof
/usr/bin/redis-check-rdb
/usr/bin/redis-cli
#redis客户端程序
/usr/bin/redis-sentinel
/usr/bin/redis-server
#redis服务端程序
/usr/bin/redis-shutdown
/usr/lib/systemd/system/redis-sentinel
.service
/usr/lib/systemd/system/redis
.service
/usr/lib/tmpfiles
.d
/redis
.conf
/usr/share/doc/redis-3
.2.3
/usr/share/doc/redis-3
.2.3
/00-RELEASENOTES
/usr/share/doc/redis-3
.2.3
/BUGS
/usr/share/doc/redis-3
.2.3
/CONTRIBUTING
/usr/share/doc/redis-3
.2.3
/MANIFESTO
/usr/share/doc/redis-3
.2.3
/README
.md
/usr/share/licenses/redis-3
.2.3
/usr/share/licenses/redis-3
.2.3
/COPYING
/var/lib/redis
/var/log/redis
#redis日志文件目录
/var/run/redis
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@mysql ~]
# grep '^##' /etc/redis.conf
################################## INCLUDES ###################################
################################## NETWORK #####################################
################################# GENERAL #####################################
################################ SNAPSHOTTING ################################
################################# REPLICATION #################################
################################## SECURITY ###################################
################################### LIMITS ####################################
############################## APPEND ONLY MODE ###############################
################################ LUA SCRIPTING ###############################
################################ REDIS CLUSTER ###############################
################################## SLOW LOG ###################################
################################ LATENCY MONITOR ##############################
############################# EVENT NOTIFICATION ##############################
############################### ADVANCED CONFIG ###############################
|
grep以下可以查看redis主配置文件有哪些配置段。
使用以下命令还可以查看主配置文件中已经开启了哪些服务。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
[root@mysql2 ~]
# cat /etc/redis.conf | grep -v '#' | sed '/^$/d'
bind 0.0.0.0
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile
/var/run/redis/redis
.pid
loglevel notice
logfile
/var/log/redis/redis
.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error
yes
rdbcompression
yes
rdbchecksum
yes
dbfilename dump.rdb
dir
/var/lib/redis
slave-serve-stale-data
yes
slave-
read
-only
yes
repl-diskless-
sync
no
repl-diskless-
sync
-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename
"appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated
yes
lua-
time
-limit 5000
cluster-enabled
yes
cluster-config-
file
nodes-6379.conf
cluster-node-timeout 15000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events
""
hash
-max-ziplist-entries 512
hash
-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set
-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing
yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync
yes
|
接下来分析主配置文件/etc/redis.conf各个配置段的内容
3.1、INCLUDES配置段
如果你有更好的配置模板,请放在这个配置段
1
2
|
# include /path/to/local.conf
# include /path/to/other.conf
|
3.2、网络配置段
网络配置项:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
bind 127.0.0.1
#允许连接redis的客户端IP
protected-mode no
#安全模式
port 6379
#端口
tcp-backlog 511
#后援队列
timeout 0
#客户端闲置时,关闭客户端连接的超时时长,0表示不关闭
tcp-keepalive 300
#长连接超时时长
|
3.3、通用配置段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
############################### GENERAL #####################################
daemonize no
#默认情况下redis不以守护进程的模式运行
supervised no
#是否开启超级监管
pidfile
/var/run/redis/redis
.pid
pid文件路径
loglevel notice
#日志级别
logfile
/var/log/redis/redis
.log
#指定日志文件路径
databases 16
#设定数据库的数量
|
3.4、快照配置段
RDB(将内存中的数据刷写到磁盘),RDB对内存做快照,不停地快照导出数据,缺点:容易丢失数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
save 900 1
#900秒有一个键值改变做一次快照
save 300 10
#300秒有10个键值改变做一次快照
save 60 10000
#60秒有10000键值改变就做一次快照
stop-writes-on-bgsave-error
yes
#默认情况下,如果在RDB snapshots持久化过程中出现问题,设置该参数后,Redis是不允许用户进行任何更新操作
rdbcompression
yes
#在导出.RDB数据库文件的时候采用LZF压缩字符串和对象。想节省一些CPU资源可以设置为no,但数据量可能会很大。
rdbchecksum
yes
#RDB快照制作过程中会在文件的末尾写入crc64的校验值。这样可能很好的保证数据的正确性。
代价是导致性能下降
dbfilename dump.rdb
#快照文件名
dir
./
#快照路径
|
3.5、主从配置相关段
主从配置相关的配置项,一个Master可以有多个slave主机,支持链式复制;Master以非阻塞方式同步数据至slave主机。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
slaveof <masterip> <masterport>
#用于创建从服务器
# masterauth <master-password>
#主服务器认证密码
slave-serve-stale-data
yes
#当slave丢失与master端的连接,或者复制仍在处理,那么slave会有下列两种表现:
yes
表示,slave继续响应客户端的请求,尽管数据已经不同了。
no表示slave会返回
"SYNC with master in progreee"
的错误信息;
slave-
read
-only
yes
#从服务器只读
repl-diskless-
sync
no
新的从节点或某较长时间未能与主节点进行同步的从节点重新与主节点通信,需要做“full synchronization",此时其同步方式有两种style:
Disk-backend:主节点新创建快照文件于磁盘中,而后将其发送给从节点;
Diskless:主节占新创建快照后直接通过网络套接字文件发送给从节点;为了实现并行复制,通常需要在复制启动前延迟一个时间段;
repl-diskless-
sync
-delay 5
#基于网络套接字同步延迟时长
repl-
ping
-slave-period 10
#ping从服务器的时间间隔
# repl-timeout 60
#主从复制超时时长
repl-disable-tcp-nodelay no
#默认为no,当选择yes的时候, master会向slave发送少量的tcp packets,这样的一个负面影响 delay slave接受数据时间,40 milliseconds 的延迟,在 高流量或者 master slave之间中间节点数很多的情况下,建议变为 yes
# repl-backlog-size 1mb
#后援队了的最大内存
# repl-backlog-ttl 3600
#后援队列的ttl时长
slave-priority 100
#当master服务挂了后,优先级越低的slave,越有可能成为master候选人
# min-slaves-to-write 3
#最少从节点在线时,主节点允许写数据
# min-slaves-max-lag 10
#从节点最多落后主节点多长时间
# slave-announce-ip 5.5.5.5
#对外宣称服务器的IP
# slave-announce-port 1234
#对外宣称服务器的端口
|
3.6、安全相关配置段
1
2
3
4
5
6
7
|
#安全相关的
# requirepass foobared
#是否设置密码,requirepass +密码
#rename-command CONFIG ""
#重命名或禁用某些命令
|
3.7、limit配置段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# maxclients 10000
#客户端并发数量
# maxmemory <bytes>
#内存限制,过期会删除key
# maxclients 10000
最大并发连接数
# maxmemory <bytes>
最大可提供内存
# maxmemory-policy noeviction
内存淘汰策略
# volatile-lru -> remove the key with an expire set using an LRU algorithm
基于LRU算法将过期时间的键做淘汰
# allkeys-lru -> remove any key according to the LRU algorithm
基于LRU算法将所有键淘汰
# volatile-random -> remove a random key with an expire set
随机淘汰
# allkeys-random -> remove a random key, any key
对所有键做随机淘汰
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
基于TTL时长淘汰
# noeviction -> don't expire at all, just return an error on write operations
从不淘汰,一旦内存耗尽,报错
默认是:
# maxmemory-policy noeviction
推荐volatile-lru,volatile-ttl
如何判断内存的淘汰?-->定量采样
# maxmemory-samples 5
|
3.8、AOF模式配置段
AOF,即 APPEND ONLY MODE,意思仅追加文件。rdis内存中的数据默认是异步同步到磁盘的,如果发生宕机,会造成一些数据的丢失。AOF也是数据持久化的一种方式,可以提高数据的可靠性。AOF模式会记录每次写操作至指定的文件尾部实现存储持久化;当redis重启时,可通过重新执行文件中的命令在内存中重建出数据库。默认使用fsync() 刷写磁盘数据,发生断电,或者Redis出现内部错误的时候最多丢失1秒数据。AOF和RDB这两种持久化方式可以同时开启不会发生冲突,开始AOF模式的话,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件。每次启动时Redis都会把这个文件的数据读入内存里。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
appendonly no
#是否记录持久化日志
appendfilename
"appendonly.aof"
#AOF 文件
appendfsync everysec
#每秒写一次
#fsync() 请求操作系统马上把数据写到磁盘上
redis支持以下三种模式
no:redis不执行主动同步操作,而是OS进行;
everysec:每秒一次;
always:每语句一次,慢,但是安全;
no-appendfsync-on-rewrite no
#是否在后台执行aof重写期间不调用fsync,默认为no,表示调用;
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
#上述两个条件同时满足时,方会触发重写AOF;与上次aof文件大小相比,其增长量超过100%,且大小不少于64MB就会重写AOF;
aof-load-truncated
yes
# redis在启动的时候可以加载被截断的AOF文件,默认启用;否则可能启动失败
注意:持久机制本身不能取代备份;应该制订备份策略,对redis库定期备份;
|
3.9、LUA脚本配置段
1
2
|
lua-
time
-limit 5000
#lua脚本执行时间限制
|
3.10、redis集群配置段
1
2
3
4
5
6
7
8
|
cluster-enabled
yes
#是否开启集群
cluster-config-
file
nodes-6379.conf
#集群配置文件
cluster-node-timeout 15000
#集群节点通信超时时长
|
3.11、慢启动日志配置段
慢启动日志用于记录超过指定时间的查询,但需要注意的是:运行时间不包括各种I/O时间。
例如:连接客户端,发送响应数据等。
1
2
3
|
slowlog-log-slower-than 10000
slowlog-max-len 128
#慢查询日志长度,这个长度没有限制,单位为微妙,只要有足够的内存就行可以通过 SLOWLOG RESET 来释放内存
|
3.12、延迟监控配置段
1
|
latency-monitor-threshold 0
|
3.13、事件通知配置段
1
|
notify-keyspace-events
""
|
3.14、redis高级配置段
配置redis的高级选项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
hash
-max-ziplist-entries 512
#每一个对应的hash能存储的最大entries
hash
-max-ziplist-value 64
#每一个对应的hash能存储的最大value
#当有大量数据时,适合用哈希编码但需要更多的内存,元素数量上限不能超过给定限制。
list-max-ziplist-entries 512
list-max-ziplist-value 64
#与哈希相类似,list数据元素较少的情况下,可以用另一种方式来编码从而节省大量空间。
set
-max-intset-entries 512
#set 编码形式为是64位无符号整型数字构成的字符串。该参数来限制这种情况下使用这种编码的最大上限的。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
#和 hashes,lists 相似,为了节约空间 sorted sets 也使用特殊的编码方式。这种编码只适合长度和元素都符合上面限制的有序序列。
hll-sparse-max-bytes 3000
activerehashing
yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync
yes
#当子进程重写AOF文件,以下选项开启时,AOF文件会每产生32M数据同步一次,这有利于避免写入磁盘延迟。
|
四、redis用法简介
4.1、redis命令选项
使用redis-cli -h命令可以查看redis客户端命令的用法。选项用法其实很简单,搞定英语应该不在话下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
[root@mysql ~]
# redis-cli -h
redis-cli 3.2.3
Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h <
hostname
> Server
hostname
(default: 127.0.0.1).
-p <port> Server port (default: 6379).
-s <socket> Server socket (overrides
hostname
and port).
-a <password> Password to use when connecting to the server.
-r <repeat> Execute specified
command
N
times
.
-i <interval> When -r is used, waits <interval> seconds per
command
.
It is possible to specify sub-second
times
like -i 0.1.
-n <db> Database number.
-x Read last argument from STDIN.
-d <delimiter> Multi-bulk delimiter
in
for
raw formatting (default: \n).
-c Enable cluster mode (follow -ASK and -MOVED redirections).
--raw Use raw formatting
for
replies (default when STDOUT is
not a
tty
).
--no-raw Force formatted output even when STDOUT is not a
tty
.
--csv Output
in
CSV
format
.
--stat Print rolling stats about server: mem, clients, ...
--latency Enter a special mode continuously sampling latency.
--latency-
history
Like --latency but tracking latency changes over
time
.
Default
time
interval is 15 sec. Change it using -i.
--latency-dist Shows latency as a spectrum, requires xterm 256 colors.
Default
time
interval is 1 sec. Change it using -i.
--lru-
test
<keys> Simulate a cache workload with an 80-20 distribution.
--slave Simulate a slave showing commands received from the master.
--rdb <filename> Transfer an RDB dump from remote server to
local
file
.
--pipe Transfer raw Redis protocol from stdin to server.
--pipe-timeout <n> In --pipe mode, abort with error
if
after sending all data.
no reply is received within <n> seconds.
Default timeout: 30. Use 0 to wait forever.
--bigkeys Sample Redis keys looking
for
big keys.
--scan List all keys using the SCAN
command
.
--pattern <pat> Useful with --scan to specify a SCAN pattern.
--intrinsic-latency <sec> Run a
test
to measure intrinsic system latency.
The
test
will run
for
the specified amount of seconds.
--
eval
<
file
> Send an EVAL
command
using the Lua script at <
file
>.
--ldb Used with --
eval
enable
the Redis Lua debugger.
--ldb-
sync
-mode Like --ldb but uses the synchronous Lua debugger,
in
this mode the server is blocked and script changes are
are not rolled back from the server memory.
--help Output this help and
exit
.
--version Output version and
exit
.
Examples:
cat
/etc/passwd
| redis-cli -x
set
mypasswd
redis-cli get mypasswd
redis-cli -r 100 lpush mylist x
redis-cli -r 100 -i 1 info |
grep
used_memory_human:
redis-cli --
eval
myscript.lua key1 key2 , arg1 arg2 arg3
redis-cli --scan --pattern
'*:12345*'
|
一些简单命令的操作
连接redis服务端
1
2
|
[root@mysql ~]
# redis-cli
127.0.0.1:6379>
|
选择第1数据库
1
2
|
127.0.0.1:6379>
select
1
OK
|
选择第15个数据库
1
2
3
|
127.0.0.1:6379[1]>
select
15
OK
127.0.0.1:6379[15]>
|
选择第17个库,报错,redis默认16个库
1
2
|
127.0.0.1:6379[15]>
select
17
(error) ERR invalid DB index
|
选择默认库
1
2
|
127.0.0.1:6379[15]>
select
0
OK
|
使用帮助,查看transaction的使用,当然你按下tab键就可以查看其他的命令的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
127.0.0.1:6379> help @transactions
DISCARD -
summary: Discard all commands issued after MULTI
since: 2.0.0
EXEC -
summary: Execute all commands issued after MULTI
since: 1.2.0
MULTI -
summary: Mark the start of a transaction block
since: 1.2.0
UNWATCH -
summary: Forget about all watched keys
since: 2.2.0
WATCH key [key ...]
summary: Watch the given keys to determine execution of the MULTI
/EXEC
block
since: 2.2.0
|
按下tab可切换查看不同的选项
1
|
127.0.0.1:6379> help @
|
输入命令时会自动提示输入后面的内容,相当的方便
1
|
127.0.0.1:6379>
set
key value [EX seconds] [PX milliseconds] [NX|XX]
|
4.2、redis数据类型
1.string 字符串
redis String是最常用的一种数据类型,普通的key/value存储都可以归为此类;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
foo->bar 键值关系
#查看string字符串相关操作命令
help @string
#设置键值
127.0.0.1:6379> SET testkey
'tom'
OK
#获取键值
127.0.0.1:6379> get testkey
"tom"
#追加键值,往后补值
127.0.0.1:6379> append testkey
' neo'
(integer) 9
#删除键
127.0.0.1:6379> del testkey
(integer) 1
#获取键
127.0.0.1:6379> get testkey
(nil)
#设定多个键值
127.0.0.1:6379> mset name
'tom'
age 12
OK
#获取多个键值
127.0.0.1:6379> mget name age
1)
"tom"
2)
"12"
#设置数值1
27.0.0.1:6379>
set
counts 1
OK
#获取数值
127.0.0.1:6379> get counts
"1"
#减一操作
127.0.0.1:6379> decr counts
(integer) 0
127.0.0.1:6379> get counts
"0"
#加一操作
127.0.0.1:6379> incr counts
(integer) 1
127.0.0.1:6379> incr counts
(integer) 2
#获取数值
127.0.0.1:6379> get counts
"2"
|
2.list 列表
redis list 类型其实就是每个子元素都是 string 类型的双向链表,这就意味着即使你有成千上万中元素在list中,添加一个新元素到list开头或者结尾的操作算法时间复杂度都是O(1)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#查看list列表相关操作命令
help @list
l:left
r:right
#在列表中追加一个值
127.0.0.1:6379> lpush mylist
'monday'
(integer) 1
#按索引查看列表中的元素,查看[0]号元素,即第一个元素
127.0.0.1:6379> lindex mylist 0
"monday"
#在列表中追加一个值
127.0.0.1:6379> lpush mylist
'sunday'
(integer) 2
#按索引查看列表中的元素
127.0.0.1:6379> lindex mylist 0
"sunday"
#按索引查看列表中的元素,查看第二个元素
127.0.0.1:6379> lindex mylist 1
"monday"
#从列表右边追加一个值
127.0.0.1:6379> rpush mylist
'tuesday'
(integer) 3
127.0.0.1:6379> lindex mylist 2
"tuesday"
#从列表右边删除一个值
127.0.0.1:6379> rpop mylist
"Tuesday"
127.0.0.1:6379> lindex mylist 2
(nil)
#获取列表的长度
127.0.0.1:6379> llen mylist
(integer) 2
127.0.0.1:6379> lpop mylist
"sunday"
127.0.0.1:6379> llen mylist
(integer) 1
|
3. hash
redis hash是一个string类型的field和value的映射表.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#查看hash类型相关操作命令
help @
hash
#设定hash键值为stu1,字段id,值为1
127.0.0.1:6379> hset stu1
id
1
(integer) 1
#设定另一个hash数据
127.0.0.1:6379> hset stu1 name
'tom'
(integer) 1
127.0.0.1:6379> hset stu1 age 12
(integer) 1
#获取hash字段中所有的值
127.0.0.1:6379> hmget stu1
id
name age
1)
"1"
2)
"tom"
3)
"12"
#获取hash中所有的值
127.0.0.1:6379> hvals stu1
1)
"1"
2)
"tom"
3)
"12"
#获取hash中所有的字段
127.0.0.1:6379> hkeys stu1
1)
"id"
2)
"name"
3)
"age"
#获取hash中所有字段及对应的值
127.0.0.1:6379> hgetall stu1
1)
"id"
2)
"1"
3)
"name"
4)
"tom"
5)
"age"
6)
"12"
|
4 set 集合
redis的set是string类型的无序集合。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#查看set数据类型相关的操作命令
127.0.0.1:6379> help @
set
#在students集合中添加多个成员
127.0.0.1:6379> sadd students
'tom'
'jerry'
'lili'
(integer) 3
#在teachers集合中添加多个成员
127.0.0.1:6379> sadd teachers
'sam'
'jerry'
(integer) 2
#将 students集合中的‘lili’移到teachers集合
127.0.0.1:6379> smove students teachers
'lili'
(integer) 1
#获取集合中所有的成员
127.0.0.1:6379> smembers students
1)
"tom"
2)
"jerry"
127.0.0.1:6379> smembers teachers
1)
"lili"
2)
"sam"
3)
"jerry"
#获取两个集合的交集
127.0.0.1:6379> sinter students teachers
1)
"jerry"
#获取两个集合的并集
127.0.0.1:6379> sunion students teachers
1)
"lili"
2)
"tom"
3)
"sam"
4)
"jerry"
#students集合中有那些成员teachers集合不存在
127.0.0.1:6379>
sdiff
students teachers
1)
"tom"
#和上面相反
127.0.0.1:6379>
sdiff
teachers students
1)
"lili"
2)
"sam"
#随机删除集合中的一个成员
127.0.0.1:6379> spop students 1
1)
"tom"
#删除一个成员
127.0.0.1:6379> srem students
'tom'
(integer) 0
|
5 sorted set 有序集合
redis的sorted set是string类型的有序集合。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#获取有序集合数据类型相关的操作命令用法
127.0.0.1:6379> help @sorted_set
#有序添加stus集合的成员
127.0.0.1:6379> zadd stus 1
'tom'
2
'jerry'
3
'lucy'
(integer) 3
#有序添加teas集合的成员
127.0.0.1:6379> zadd teas 1
'sam'
2
'jerry'
3
'lili'
(integer) 3
#获取有序集合成员的个数
127.0.0.1:6379> zcard teas
(integer) 3
#同上
127.0.0.1:6379> ZCARD stus
(integer) 3
#获取索引
127.0.0.1:6379> zrank teas jerry
(integer) 1
#通过索引获取值
127.0.0.1:6379> zrange stus 1 2
1)
"jerry"
2)
"lucy"
#通过分数获取有序集合中的对应的值
127.0.0.1:6379> ZRANGEBYSCORE stus 1 2
1)
"tom"
2)
"jerry"
#添加一个有序集合
127.0.0.1:6379> ZADD ecscores 67
'tom'
33
'lili'
89
'michael'
55
'sam'
(integer) 4
#通过分数获取有序集合中的对应的值
127.0.0.1:6379> ZRANGEBYSCORE ecscores 44 90
1)
"sam"
2)
"tom"
3)
"michael"
|
4.3、redis客户端/服务端命令使用
client端命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#获取客户端名字,默认为空
127.0.0.1:6379> CLIENT GETNAME
(nil)
#设置客户端名字
127.0.0.1:6379> CLIENT SETNAME
'mysql'
OK
#设置客户端名字
127.0.0.1:6379> CLIENT GETNAME
"mysql"
#列出客户端
127.0.0.1:6379> CLIENT list
id
=6 addr=127.0.0.1:55374 fd=5 name= age=1619 idle=1619 flags=N db=0 sub=0 psub=0 multi
id
=7 addr=127.0.0.1:55376 fd=6 name=mysql age=579 idle=0 flags=N db=0 sub=0 psub=0 mul
#暂停客户端
127.0.0.1:6379> CLIENT PAUSE
#杀死客户端
127.0.0.1:6379> CLIENT KILL
#客户端是否响应
127.0.0.1:6379> CLIENT REPLY
|
server端命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
#获取服务端详实信息,info命令很重要,几乎可以查看各种各样的详尽的信息
127.0.0.1:6379> info
# Server 服务端信息
redis_version:3.2.3
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:672aed6eb816ad6c
redis_mode:standalone
os:Linux 3.10.0-514.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:9087
run_id:4788b467cdf1f8055eca00ef6bbe57b55ef20bde
tcp_port:6379
uptime_in_seconds:12596
uptime_in_days:0
hz:10
lru_clock:6928199
executable:
/usr/bin/redis-server
config_
# Clients 客户端信息
connected_clients:2
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory 内存信息
used_memory:834424
used_memory_human:814.87K
used_memory_rss:6094848
used_memory_rss_human:5.81M
used_memory_peak:834424
used_memory_peak_human:814.87K
total_system_memory:1023938560
#总共内存
total_system_memory_human:976.50M
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
#内存无限制
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:7.30
mem_allocator:jemalloc-3.6.0
# Persistence 持久化相关信息
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1500090506
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats 统计数据信息,很重要
total_connections_received:6
total_commands_processed:82
instantaneous_ops_per_sec:0
total_net_input_bytes:3065
total_net_output_bytes:35815120
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:42
keyspace_misses:1
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:852
migrate_cached_sockets:0
# Replication #主从复制相关信息
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU相关
used_cpu_sys:8.24 内核空间
used_cpu_user:4.10 用户空间
used_cpu_sys_children:0.01
used_cpu_user_children:0.00
# Cluster信息
cluster_enabled:0
# Keyspace
db0:keys=10,expires=0,avg_ttl=0 键 过期时长 ttl
127.0.0.1:6379> info memory
# Memory 内存信息
#单独显示CPU信息
127.0.0.1:6379> info CPU
# CPU
used_cpu_sys:8.56
used_cpu_user:4.16
used_cpu_sys_children:0.01
used_cpu_user_children:0.0
#关机命令
127.0.0.1:6379> SHUTDOWN [NOSAVE|SAVE]
#confi命令 配置服务器属性
127.0.0.1:6379> CONFIG SET
127.0.0.1:6379> CONFIG GET
127.0.0.1:6379> CONFIG REWRITE
127.0.0.1:6379> CONFIG RESETSTAT
|
redis的使用暂且先介绍到这里,下次我们再介绍redis的应用。
本文转自 PowerMichael 51CTO博客,原文链接:http://blog.51cto.com/huwho/1947925,如需转载请自行联系原作者