按照单个键、遍历键、数据库管理三个维度对一些通用命令介绍。一、单个键管理
针对单个键的命令,前面已经介绍过一部分了,例如type、del、object、exists、expire等,下面介绍剩余的几个重要命令。 1、键重命名:rename key newkey 如果在rename之前,newkey键已存在,那么它的值也将被覆盖 为了防止被强行rename,Redis提供了renamenx命令,确保只有newKey不存在时才被覆盖 在使用重命名命令时,有两点需要注意: 由于重命名键期间会执行del命令删除旧的键,如果键对应的值比较大,会存在阻塞Redis的可能性,这点不要忽视。 rename和renamenx中的key和newkey如果是相同的,在Redis3.2和之前版本返回结果略有不同。Redis3.2中会返回OK,Redis3.2之前的版本会提示错误。
2、随机返回一个键:randomkey
3、键过期 除了expire、ttl命令以外,Redis还提供了expireat、pexpire、pexpireat、pttl、persist等一系列命令。 • expire key seconds:键在secondes秒后过去 • expireat key timestamp:键在秒级时间戳timestamp后过期
ttl命令和pttl命令都可以查询键的剩余过期时间,但是pttl精度更高可以达到毫秒级别,有3种返回值: 大于等于0的整数:键剩余的过期时间(ttl是秒,pttl是毫秒) -1:键没有设置过期时间 -2:键不存在
但无论是使用过期时间还是过期时间戳,秒级还是毫秒级,在Redis内部最终都是使用pexpireat,另外在使用Redis相关过期命令时,需要注意以下几点: 1)如果expire key的键不存在,返回结果为0 2)如果过期时间为复制,键会立即被删除,犹如使用del命令一下 3)persist命令可以将键的过期时间清除 4)对于字符串类型键,执行set命令会去掉过期时间,这个问题很容易在开发中被忽视。 5)Redis不支持二级数据结构(例如哈希、列表)内部元素的过期功能,例如不能对列表类型的一个元素做过期时间设置 6)setex命令作为set+expire的组合,不但是原子执行,同时减少了一次网络通讯的时间。
4、迁移键 (1) move move key db 如图所示:move命令用于在Redis内部进行数据迁移,Redis内部可以有多个数据库,彼此在数据库上是相互隔离的,move key db就是把指定的键从源数据库移动到目标数据库中,多数据库功能不建议在生产环境使用。
(2)dump + restore dump key restore key ttl value dump和restore可以实现在不同的Redis实例之间进行数据迁移的功能,整个迁移的过程分为两步,如下图所示:
1)在源Redis上,dump命令去将键值序列化,格式采用的是RDB格式。 2)在目标Redis上,restore命令将上面序列化的值进行复原,其实ttl参数代表过期时间,如果ttl=0,代表没有过期时间。 有关dump+restore有两点需要注意:一,整个迁移过程并非原子性的,而是通过客户端分步完成的;第二,迁移过期是开启了两个客户端连接,所以dump的结果不是在源Redis和目标Redis之间进行传输。
(3)migrate migrate host port key|”” destination-db timeout [copy] [replace] [keys key [key …]] migrate 命令也是用于在Redis实例间进行数据迁移的,实际上migrate 命令就是将dump、restore、del三个命令进行组合,从而简化了操作流程。migrate 命令具有原子性,而且从Redis3.0.6版本以后已经支持迁移多个键的功能,有效地提高了迁移效率。
整个过程如下图所示:实现过程和dump+restore基本类似,但是有3点不太相同:第一,整个过长是原子执行的,不需要在多个Redis实例上开启客户端,只需要在源Redis上执行migrate命令即可。第二,migrate名的数据传输直接在源Redis和目标Redis上完成的。第三,目标Redis完成restore后会发送OK给源Redis,源Redis接受后会根据migrate对应的选项来决定是否在源Redis上删除对应的键。
最后总结一下move、dump+restore、migrate三种迁移方式的异同点,建议使用migrate命令进行键值迁移。
|
命令 |
作用域 |
原子性 |
是否支持多个键 |
|
move |
Redis 实例内部 |
是 |
否 |
|
dump+restore |
Redis 实例之间 |
否 |
否 |
|
migrate |
Redis 实例之间 |
是 |
是 |


