一、单个键管理

1.键重命名

rename key newkey
  • 为防止被强行rename,Redis提供了renamenx命令,确保只有newkey不存在时才被覆盖,如果命名的返回结果为0,则表示没有完成重命名
  • 由于重命名期间会执行del命令删除旧的键,如果键对应的值比较大,会存在阻塞Redis的可能性
  • 如果rename和renamenx中的key和newkey如果是相同的,在Redis3.2和之前的版本返回结果略有不同

2.随机返回一个键

randomkey

3.键过期

1. expire key seconds
键在seconds秒后过期
2.expireat key timestamp
键在秒级时间戳timestamp后过期
3. ttl和pttl都可以查询键的剩余过期时间,但是由于pttl精度更高可以达到毫秒级别,有三种返回值:
- 大于或等于0的整数,键剩余的过期时间(ttl是秒,pttl是毫秒)
-  -1 键没有设置过期时间
-  -2 键不存在
4.pexpire key milliseconds
键在milliseconds毫秒后过期
5.pexpireat key milliseconds=timestamp
键在毫秒级时间戳timestamp后过期

无论是使用过期时间还是时间戳,秒级还是毫秒级,在Redis内部最终使用的都是pexpireat
6.键过期命令注意事项:
1.如果expire key 的键不存在,返回结果为 0

2.如果过期时间为负值,键会立即被删除,犹如使用del命令一样

3.persist命令可以将键的过期时间清除

4.对于字符串类型键,执行set命令会去掉过期时间

5.Redis不支持二级数据结构(例如哈希/列表)内部元素的过期功能,例如不能对列表类型的一个元素做过期时间设置

6.setex命令作为set+expire的组合,不但是原子执行,同时减少了一次网络通讯的时间

4.迁移键

1.move
move key db
2.dump+restore
dump key
restore key ttl value

迁移过程分为两步:

  • 在源Redis上,dump命令会将键值序列化,格式采用RDB格式
  • 在目标Redis上,restore命令将上面序列化的值进行复原,其中ttl参数代表过期时间,如果ttl=0代表没有过期时间

注意:

  • 整个迁移过程并非原子性的,而是通过客户端分步完成的
  • 迁移过程是开启了两个客户端连接,所以dump的结果不是在源Redis和目标Redis之间进行传输
3.migrate
migrate host port key | "" destination-db timeout [copy] [replace] [keys key [key ...]] 

host 目标Redis的IP地址

port 目标Redis的端口

key | "" 迁移单个键,键名key ,当迁移多个键时,直接写 ""

destination-db 目标Redis的数据库索引,例如要迁移到0号数据库,这里就写0

timeout 迁移的超时时间 毫秒

copy 如果添加此选项,迁移后并不删除源键

replace 如果添加此选项,migrate不管目标Redis是否存在该键都会正常迁移进行数据覆盖

keys key [key ...] 迁移多个键的键名
  • 整个过程是原子执行的,不需要在多个Redis实例上开启客户端的,只需要在源Redis上执行migrate命令即可
  • migrate命令的数据传输直接在源Redis和目标Redis上完成的
  • 目标Redis完成restore后会发送OK给源Redis,源Redis接收后会根据migrate对应的选项来决定是否在源Redis上删除对应的键

二、遍历键

1.全量遍历键

keys pattern
pattern 支持正则表达式

2.渐进式遍历

scan cursor [match pattern] [count number]

cursor是必须参数,是一个游标,第一次遍历从0开始,每次scan遍历完都会返回当前游标的值,直到游标值为0,表示遍历结束

match pattern 是可选参数,正则表达式

count number 是可选参数,代表每次遍历的键个数,默认10,此参数可以实当增大

三、数据库管理

1.切换数据库

select dbIndex
默认有16个数据库
索引为 0-15

2.flushdb/flushall

flushdb只清除当前数据库
flushall会清除所有数据库
如果当前数据库键值数量比较多,flushdb/flushall存在阻塞Redis的可能性