链条传动

砥砺前行,不忘初心!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

单个键管理

键重命名
rename key newkey  newkey存在时会被强制覆盖
renamenx key newkey 只有newkey不存在时候才能执行成功
注意:
·由于重命名键期间会执行del命令删除旧的键, 如果键对应的值比较大, 会存在阻塞Redis的可能性, 这点不要忽视。
·如果rename和renamenx中的key和newkey如果是相同的, 3.2之前的版本会报错,3.2之后的版本(包含3.2)返回ok

随机返回一个键
randomkey


键过期
·expire key seconds: 键在seconds秒后过期。
·expireat key timestamp: 键在秒级时间戳timestamp后过期。
·pexpire key milliseconds: 键在milliseconds毫秒后过期。
·pexpireat key milliseconds-timestamp键在毫秒级时间戳timestamp后过期。
注:无论是使用过期时间还是时间戳, 秒级还是毫秒级, 在Redis内部最终使用的都是pexpireat。
如果expire key的键不存在, 返回结果为0;如果过期时间为负值, 键会立即被删除, 犹如使用del命令一样

查询键的剩余过期时间
ttl key 精度为秒级
pttl key 精度更高可以达到毫秒级别
有3种返回值:
·大于等于0的整数: 键剩余的过期时间(ttl是秒, pttl是毫秒) 。
·-1: 键没有设置过期时间。
·-2: 键不存在。

清除键的过期时间
persist key

对于字符串类型键, 执行set命令会去掉过期时间, 这个问题很容易在开发中被忽视。

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

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


键迁移
move key db 把指定的键从源数据库移动到目标数据库(redis内部多库间迁移)

dump+restore  实现在不同的Redis实例之间进行数据迁移的功能, 整个迁移的过程分为两步:
1) dump key   在源Redis上, dump命令会将键值序列化, 格式采用的是RDB格式。
2) restore key ttl value  在目标Redis上, restore命令将上面序列化的值进行复原, 其中ttl参数代表过期时间, 如果ttl=0代表没有过期时间。

migrate
migrate host port key|"" destination-db timeout [copy] [replace] [keys key [key ...]]
·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”。
实现过程和dump+restore基本类似, 但是有3点不太相同: 
第一, 整个过程是原子执行的, 不需要在多个Redis实例上开启客户端的, 只需要在源Redis上执行migrate命令即可。 
第二, migrate命令的数据传输直接在源Redis和目标Redis上完成的。 
第三, 目标Redis完成restore后会发送OK给源Redis, 源Redis接收后会根据migrate对应的选项来决定是否在源Redis上删除对应的键。

migrate迁移的几种情况:
1、源Redis有键, 目标Redis没有,返回ok
2、源Redis和目标Redis都有键,会覆盖掉目标redis的key的value
3、源Redis没有键hello,返回nokey

 

movedump+restoremigrate三个命令比较

 

键遍历

全量遍历键
keys pattern  pattern使用的是glob风格的通配符
其他数据结构的全量遍历:hgetall、 smembers、 zrange
注:如果Redis包含了大量的键, 执行keys命令很可能会造成Redis阻塞, 所以一般建议不要在生产环境下使用keys命令。


渐进式遍历
scan cursor [match pattern] [count number]
·cursor是必需参数, 实际上cursor是一个游标, 第一次遍历从0开始, 每次scan遍历完都会返回当前游标的值, 直到游标值为0, 表示遍历结束。
·match pattern是可选参数, 它的作用的是做模式的匹配, 这点和keys的模式匹配很像。
·count number是可选参数, 它的作用是表明每次要遍历的键个数, 默认值是10, 此参数可以适当增大。
其他数据结构的渐进式遍历:hscan、 sscan、 zscan
注:scan并不能保证完整的遍历出来所有的键(如果在scan的过程中如果有键的变化,会出现新增的键可能没有遍历到, 遍历出了重
复的键等情况)

 

数据库管理

切换数据库
select dbIndex
数据库个数在配置文件中配置,参数:databases 16  ---配置16个库,dbindex为0-15
注:cluster模式只允许使用0号库

生产环境不建议使用多库功能:
·Redis是单线程的。 如果使用多个数据库, 那么这些数据库仍然是使用一个CPU, 彼此之间还是会受到影响的。
·多数据库的使用方式, 会让调试和运维不同业务的数据库变的困难,假如有一个慢查询存在, 依然会影响其他数据库, 这样会使得别的业务方定位问题非常的困难。
·部分Redis的客户端根本就不支持这种方式。 即使支持, 在开发的时候来回切换数字形式的数据库, 很容易弄乱。

清空数据库
flushdb   只清空当前数据库
flushall   清空所有数据库

 

posted on 2020-11-13 18:24  链条君  阅读(110)  评论(0编辑  收藏  举报