最近使用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。