前面几篇文章分别写了Redis不同数据类型使用的命令,这篇文章中的命令适用Redis的所有数据类型。
命令:keys patten,获取符合规则的键名列表。
patten指通配符格式,规则如下:
* 表示匹配任意字符,也就是说会查询出所有key。
127.0.0.1:6379> keys *
1) "zset"
2) "set1"
3) "ceshi"
4) "list1"
5) "set2"
6) "su"
7) "AA"
8) "c"
9) "person"
10) "b"
?表示匹配一个字符,也就是说?替代一个字符
127.0.0.1:6379> keys ?
1) "c"
2) "b"
127.0.0.1:6379> keys set?
1) "set1"
2) "set2"
127.0.0.1:6379> keys se?
(empty list or set)
127.0.0.1:6379> keys ?u
1) "su"
[] 表示匹配括号内的任意一个字符,括号内字符可以使用-来表示范围
127.0.0.1:6379> keys [b]
1) "b"
127.0.0.1:6379> keys [s]
(empty list or set)
127.0.0.1:6379> keys [a-b]
1) "b"
127.0.0.1:6379> keys [a-m]
1) "c"
2) "b"
127.0.0.1:6379> keys list[1-3]
1) "list1"
127.0.0.1:6379> keys set[1-3]
1) "set1"
2) "set2"
\x 表示匹配字符x,用于转义
127.0.0.1:6379> keys \b
1) "b"
127.0.0.1:6379> keys \m
(empty list or set)
127.0.0.1:6379> keys set\1
1) "set1"
注意:keys命令不允许在正式环境使用!keys命令会遍历Redis中所有key,当Redis中key足够多的时候,性能会受到影响,甚至出现宕机等事故。
命令:exists key [key ...],查询key是否存在,返回存在key的个数
127.0.0.1:6379> exists a
(integer) 0
127.0.0.1:6379> exists b
(integer) 1
127.0.0.1:6379> exists a b c
(integer) 2
127.0.0.1:6379> keys *
1) "zset"
2) "set1"
3) "ceshi"
4) "list1"
5) "set2"
6) "su"
7) "AA"
8) "c"
9) "person"
10) "b"
命令:del key [key ...],删除key,返回删除key的个数
127.0.0.1:6379> del a
(integer) 0
127.0.0.1:6379> del b
(integer) 1
127.0.0.1:6379> del a b c
(integer) 1
127.0.0.1:6379> keys *
1) "zset"
2) "set1"
3) "ceshi"
4) "list1"
5) "set2"
6) "su"
7) "AA"
8) "person"
注意:del命令不支持通配符,但是结合linux管道和xargs命令可以批量删除符合某一规则的所有(或者一部分)key,linux管道符“|”的作用是管道符左边的输出会作为管道符右边的输入,xargs是给命令传输参数的过滤器,能够捕获一个命令的输出。
127.0.0.1:6379> exit
[root@localhost src]# ./redis-cli keys "set?" | xargs ./redis-cli del
(integer) 2
[root@localhost src]# ./redis-cli
127.0.0.1:6379> keys *
1) "zset"
2) "ceshi"
3) "list1"
4) "su"
5) "AA"
6) "person"
不使用keys命令,但是却想批量删除key时,在redis 2.8之后的版本中可以使用scan命令替代,如下所示,-L 10表示命令行最多允许有 10
个非空的输入行,这样就能有效避免查询所有key。
127.0.0.1:6379> set AB 123
OK
127.0.0.1:6379> keys *
1) "zset"
2) "ceshi"
3) "list1"
4) "su"
5) "AA"
6) "person"
7) "AB"
127.0.0.1:6379> exit
[root@localhost src]# ./redis-cli --scan --pattern "A?" | xargs -L 10 ./redis-cli del
(integer) 2
[root@localhost src]# ./redis-cli
127.0.0.1:6379> keys *
1) "zset"
2) "ceshi"
3) "list1"
4) "su"
5) "person"
命令:expire key seconds,设置一个key的生存时间,单位为秒;
命令:persist key,取消key生存时间的设置,即把key设置成永久存在的;
命令:ttl key,获取key剩余的生存时间,单位为秒。
27.0.0.1:6379> expire su 20
(integer) 1
127.0.0.1:6379> ttl su
(integer) 16
127.0.0.1:6379> ttl su
(integer) 12
127.0.0.1:6379> exists su
(integer) 0
127.0.0.1:6379> set su 111
OK
127.0.0.1:6379> exists su
(integer) 1
127.0.0.1:6379> expire su 30
(integer) 1
127.0.0.1:6379> ttl su
(integer) 24
127.0.0.1:6379> persist su
(integer) 1
127.0.0.1:6379> exists su
(integer) 1
命令:move key db,将当前数据库指定的key移动到参数(db)指定的数据库中,成功返回1,key在当前数据库不存在或者目标数据库已存在,则返回0。
命令:select index,切换数据库。
127.0.0.1:6379> move su 1
(integer) 1
127.0.0.1:6379> keys *
1) "zset"
2) "ceshi"
3) "list1"
4) "person"
127.0.0.1:6379> move su 1
(integer) 0
127.0.0.1:6379> set su 12
OK
127.0.0.1:6379> keys *
1) "zset"
2) "ceshi"
3) "list1"
4) "su"
5) "person"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "su"
127.0.0.1:6379[1]>
命令:randomkey,从当前数据库中随机返回一个key当前数据库为空则返回nil。
127.0.0.1:6379> keys *
1) "zset"
2) "ceshi"
3) "list1"
4) "su"
5) "person"
127.0.0.1:6379> randomkey
"list1"
127.0.0.1:6379> randomkey
"zset"
127.0.0.1:6379> randomkey
"ceshi"
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> keys *
(empty list or set)
127.0.0.1:6379[2]> randomkey
(nil)
命令:rename key newkey,将指定的key重命名
127.0.0.1:6379> rename su su1
OK
127.0.0.1:6379> keys *
1) "zset"
2) "ceshi"
3) "list1"
4) "su1"
5) "person"
命令:type key,获取key的类型,如:string,hash,list,set,zset。
127.0.0.1:6379> type su1
string
127.0.0.1:6379> type zset
zset
127.0.0.1:6379> type list1
list
127.0.0.1:6379> type person
hash
如果有写的不对的地方,请大家多多批评指正,非常感谢!