健管理
- 健重命名
rename key newKey
// 注意rename 时如果newKey 存在的话, 会覆盖
renamenx key newKey
renamenx 保证了只有在newKey 不存在的时候才会被重命名成功
// rename 非原子操作, 先删除旧健, 在新增新建
- 随机返回一个健
randomkey
dbsize count 有多少健
randomkey 随机返回一个健
- 健过期
expire key seconds. 健在多少秒过期
expireat key timestamp 健在秒级“时间戳” 后过期
ttl key 查询key 的有效时间
ttl 与pttl 都可以查询剩余时间, pttl精度更高, 可以达到毫秒级的
// 返回大于0 的整数, 即剩余时间
// 返回-1 没有设置过期时间
// 返回-2 已过期, 健不存在
- 在redis里面执行set 命令会抹去key的有效期设置, setkey 函数最终执行了removeExpire(db, key)
- redis 不支持二级数据结构(哈希, 列表) 内部元素的过期功能, 不支持对列表的元素进行过期时间设置。
- setex 命令为set expire 的组合, 不但是原子操作, 而且减少了一次网络通信。
健迁移
- move
move key db
// move 主要在redis内部运用, 在redis 内部有多个数据库, move 的作用就是把key 从源数据库移到目标数据库。
- dump + restore
dump key
restore key ttl value
// 可以在不同的redis 实例之间做数据迁移:
// 在源redis上, dump 命令会将键值序列化, 采取的方式就是rdb格式
// 在目标redis上, restore 命令将上面的序列化的值进行复原, 其中ttl参数代表过期时间, 如果ttl = 0代表没有设置过期时间
// 要注意:
// 整个过程非原子性的
// 整个过程开启了源Redis和目标Redis的传输
在源redis上执行
set key value
dump key
在目标redis上执行
restore key ttl value
- migrate
migrate host port key | “” destination-db timeout [copy] [replace] [keys key key…]
migrate 也是数据库之间进行的数据迁移, 是将dump, restore, del命令三者结合, 同时具有原子性。
migrate 127.0.0.1 6380 hello 0 1000
//源redis 6379。 目标: 6380, 将6379的hello健迁移到6380上, 同超时时间为1000毫秒
遍历健
- keys pattern 全量遍历
- 渐进式遍历
scan cursor [match pattern ] [count number] 可以做分页
scan 0
结果为两部分:
第一部分: 下次cursor 的值
第二部分: 返回本次的健
数据库管理
- select dbindex 切换数据库
- flushdb/flushall flushdb清除当前数据库, flushall清除所有数据库
清除数据库 谨慎使用, 特别是生产