Redis开发运维实践指南数据操作之key操作

数据操作

熟悉每个数据操作前一定要明白每个操作都是代价,以时间复杂度和对应查询集或者结果集大小为衡量。时间复杂度收敛状况如下:

Redis开发运维实践指南数据操作之key操作

2.1.1 列出key

keys *user*
keys *

有3个通配符 *, ? ,[]

  • *: 通配任意多个字符
  • ?: 通配单个字符
  • []: 通配括号内的某1个字符

注:生产已经禁止。更安全的做法是采用scan,原理和操作如下:

Redis开发运维实践指南数据操作之key操作

针对Keys的改进,支持分页查询Key。在迭代过程中,Keys有增删时不会要锁定写操作,数据集完整度不做任何保证,同一条key可能会被返回多次.

Redis开发运维实践指南数据操作之key操作Redis开发运维实践指南数据操作之key操作对于其他危险的命令,新版本也进行了替代: Redis开发运维实践指南数据操作之key操作

redis-cli下的扫描:

redis-cli --scan --pattern 'chenqun_*'

这是用scan命令扫描redis中的key,--pattern选项指定扫描的key的pattern。相比keys pattern模式,不会长时间阻塞redis而导致其他客户端的命令请求一直处于阻塞状态。

2.1.2 测试指定key是否存在

exists key

返回1表示存在,0不存在

2.1.3 删除给定key

del key1 key2 ....keyN

返回1表示存在,0不存在、

2.1.4 返回给定key的value类型

type key

返回 none 表示不存在key。string字符类型,list 链表类型 set 无序集合类型...


2.1.5 返回从当前数据库中随机选择的一个key

randomkey

如果当前数据库是空的,返回空串

2.1.6 原子的重命名一个key

rename oldkey newkey

如果newkey存在,将会被覆盖,返回1表示成功,0失败。可能是oldkey不存在或者和newkey相同

renamenx oldkey newkey 

同上,但是如果newkey存在返回失败、

2.1.7 Key的超时设置处理

expire key seconds

单位是秒。返回1成功,0表示key已经设置过过期时间或者不存在。 如果想消除超时则使用persist key。如果希望采用绝对超时,则使用expireat命令。


ttl key 

返回设置过过期时间的key的剩余过期秒数 -1表示没有设置过过期时间,对于不存在的key,返回-2。


pexpire key 毫秒数

设置生命周期。


pttl key

以毫秒返回生命周期。


注意:

当client主动访问key会先对key进行超时判断,过时的key会立刻删除。

如果clien永远都不再get那条key呢? 它会在Master的后台,每秒10次的执行如下操作: 随机选取100个key校验是否过期,如果有25个以上的key过期了,立刻额外随机选取下100个key(不计算在10次之内)。可见,如果过期的key不多,它最多每秒回收200条左右,如果有超过25%的key过期了,它就会做得更多,但只要key不被主动get,它占用的内存什么时候最终被清理掉只有天知道。

在主从复制环境中,由于上述原因存在已经过期但是没有删除的key,在主snapshot时并不包含这些key,因此在slave环境中我们往往看到dbsize较master是更小的。


本文为《Redis开发运维实践指南》内容,该书作者为黄鹏程,已授权云栖社区转载。

上一篇:中文问题解决| 学习笔记


下一篇:如何快速导入SVN服务器的项目代码