最近使用Redis处理项目数据,因为数据太多,需要使用模糊查询来查找指定的key。除了查找之外,还有很多操作key的命令,本文简单总结常用的Redis操作key命令(电脑环境为windows)。
1. keys pattern 命令(获取key值)
keys pattern 命令用于查找所有符合给定模式 pattern(正则表达式)的 key 。在redis里,允许模糊查询key,有3个通配符 *、? 、[]:
* : 通配任意多个字符
? : 通配单个字符
[] : 通配括号内的某1个字符
使用举例:
C:\Users\Administrator>redis-cli 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> set name1 zhang OK 127.0.0.1:6379> set name2 liu OK 127.0.0.1:6379> keys * 1) "name2" 2) "name1" 127.0.0.1:6379> keys nam?1 1) "name1" 127.0.0.1:6379> keys name[1,2] 1) "name2" 2) "name1" 127.0.0.1:6379>
2. randomkey(随机获取key值)
从当前数据库返回一个随机的key。如果数据库没有任何key,返回nil,否则返回一个随机的key。
C:\Users\Administrator>redis-cli 127.0.0.1:6379> keys * 1) "name2" 2) "name1" 127.0.0.1:6379> RANDOMKEY "name1" 127.0.0.1:6379> flushdb OK 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> RANDOMKEY (nil) 127.0.0.1:6379>
3. type keyname(获取某个key中的存储的类型)
返回key所存储的value的数据结构类型,它可以返回string, list, set, zset 和 hash等不同的类型,如果key不存在时返回none。
C:\Users\Administrator>redis-cli 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> set name zhang OK 127.0.0.1:6379> HSET like color red (integer) 1 127.0.0.1:6379> HSET like food rice (integer) 1 127.0.0.1:6379> keys * 1) "like" 2) "name" 127.0.0.1:6379> type name string 127.0.0.1:6379> type like hash 127.0.0.1:6379>
4. exists keyname(判断某个key是否存在)
返回key是否存在,如果key存在,返回 1;否则,返回 0。
C:\Users\Administrator>redis-cli 127.0.0.1:6379> keys * 1) "like" 2) "addr" 3) "name" 127.0.0.1:6379> EXISTS name (integer) 1 127.0.0.1:6379> exists age (integer) 0 127.0.0.1:6379>
5. del keyname(删除某个key值)
删除指定的一批keys,如果删除中的某些key不存在,则直接忽略。返回被删除的keys的数量。
C:\Users\Administrator>redis-cli 127.0.0.1:6379> keys * 1) "like" 2) "addr" 3) "name" 127.0.0.1:6379> del like (integer) 1 127.0.0.1:6379> keys * 1) "addr" 2) "name" 127.0.0.1:6379>
6. rename keyname newkeyname(重命名 key)
将key重命名为newkey,如果key与newkey相同,将返回一个错误。如果newkey已经存在,则值将被覆盖。
C:\Users\Administrator>redis-cli 127.0.0.1:6379> keys * 1) "addr" 2) "name" 127.0.0.1:6379> RENAME addr address OK 127.0.0.1:6379> keys * 1) "address" 2) "name" 127.0.0.1:6379> RENAME name name OK 127.0.0.1:6379> keys * 1) "address" 2) "name"
7. ttl key(查询key的生命周期)
返回key剩余的过期时间,key有效的秒数(TTL in seconds),或者一个负值的错误。 这种反射能力允许Redis客户端检查指定key在数据集里面剩余的有效期。
在Redis 2.6和之前版本,如果key不存在或者已过期时返回-1。
从Redis2.8开始,错误返回值的结果有如下改变:
-
-
如果key不存在或者已过期,返回 -2
-
如果key存在并且没有设置过期时间(永久有效),返回 -1 。
-
C:\Users\Administrator>redis-cli 127.0.0.1:6379> keys * 1) "address" 2) "name" 127.0.0.1:6379> ttl name (integer) -1 127.0.0.1:6379> ttl like (integer) -2 127.0.0.1:6379> expire name 2 (integer) 1 127.0.0.1:6379> keys * 1) "address" 127.0.0.1:6379>
8. expire key(设置key的生命周期)
设置key的过期时间,超过时间后,将会自动删除该key。1 如果成功设置过期时间,0 如果key不存在或者不能设置过期时间。在Redis的术语中一个key的相关超时是不确定的。
超时后只有对key执行DEL命令或者SET命令或者GETSET时才会清除。 这意味着,从概念上讲所有改变key的值的操作都会使他清除。 例如,INCR递增key的值,执行LPUSH操作,或者用HSET改变hash的field所有这些操作都会触发删除动作。
使用PERSIST命令可以清除超时,使其变成一个永久的key。
如果key被RENAME命令修改,相关的超时时间会转移到新key上面。
如果key被RENAME命令修改,比如原来就存在Key_A,然后调用RENAME Key_B Key_A命令,这时不管原来Key_A是永久的还是设置为超时的,都会由Key_B的有效期状态覆盖。
另外,对已经有过期时间的key执行EXPIRE操作,将会更新它的过期时间。有很多应用有这种业务场景,例如记录会话的session。
C:\Users\Administrator>redis-cli 127.0.0.1:6379> keys * 1) "address" 127.0.0.1:6379> set name zhang OK 127.0.0.1:6379> keys * 1) "address" 2) "name" 127.0.0.1:6379> expire name 5 (integer) 1 127.0.0.1:6379> keys * 1) "address" 127.0.0.1:6379>
9. pttl 和 pexpire key
pttl key:这个命令类似于TTL命令,但它以毫秒为单位返回 key 的剩余生存时间,而不是像TTL命令那样,以秒为单位。
pexpire key:这个命令和EXPIRE命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像EXPIRE命令那样,以秒为单位。
10. persist key(设置key永久有效)
移除给定key的生存时间,将这个 key 转换成一个不带生存时间、永不过期的 key。