Redis开发与运维读书笔记之八——键管理

按照单个键、遍历键、数据库管理三个维度对一些通用命令介绍。一、单个键管理

针对单个键的命令,前面已经介绍过一部分了,例如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上删除对应的键。

下面对migrate的参数进行逐个说明: ·host:目标Redis的IP地址。 ·port:目标Redis的端口。 ·key|””:在Redis3.0.6版本之前,migrate只支持迁移一个键,所以此处是 要迁移的键,但Redis3.0.6版本之后支持迁移多个键,如果当前需要迁移多 个键,此处为空字符串””。 ·destination-db:目标Redis的数据库索引,例如要迁移到0号数据库,这里就写0。 ·timeout:迁移的超时时间(单位为毫秒)。 ·[copy]:如果添加此选项,迁移后并不删除源键。 ·[replace]:如果添加此选项,migrate不管目标Redis是否存在该键都会 正常迁移进行数据覆盖。 ·[keys key[key…]]:迁移多个键,例如要迁移key1、key2、key3,此处填 写“keys key1 key2 key3”。

最后总结一下move、dump+restore、migrate三种迁移方式的异同点,建议使用migrate命令进行键值迁移。

命令

作用域

原子性

是否支持多个键

move

Redis 实例内部

dump+restore

Redis 实例之间

migrate

Redis 实例之间

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇