天天看点

Redis开发运维实践指南数据操作之key操作数据操作2.1.1 列出key2.1.2 测试指定key是否存在2.1.3 删除给定key2.1.4 返回给定key的value类型2.1.5 返回从当前数据库中随机选择的一个key2.1.6 原子的重命名一个key2.1.7 Key的超时设置处理

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

Redis开发运维实践指南数据操作之key操作数据操作2.1.1 列出key2.1.2 测试指定key是否存在2.1.3 删除给定key2.1.4 返回给定key的value类型2.1.5 返回从当前数据库中随机选择的一个key2.1.6 原子的重命名一个key2.1.7 Key的超时设置处理

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

*: 通配任意多个字符

?: 通配单个字符

[]: 通配括号内的某1个字符

注:生产已经禁止。更安全的做法是采用scan,原理和操作如下:
Redis开发运维实践指南数据操作之key操作数据操作2.1.1 列出key2.1.2 测试指定key是否存在2.1.3 删除给定key2.1.4 返回给定key的value类型2.1.5 返回从当前数据库中随机选择的一个key2.1.6 原子的重命名一个key2.1.7 Key的超时设置处理
针对keys的改进,支持分页查询key。在迭代过程中,keys有增删时不会要锁定写操作,数据集完整度不做任何保证,同一条key可能会被返回多次.
Redis开发运维实践指南数据操作之key操作数据操作2.1.1 列出key2.1.2 测试指定key是否存在2.1.3 删除给定key2.1.4 返回给定key的value类型2.1.5 返回从当前数据库中随机选择的一个key2.1.6 原子的重命名一个key2.1.7 Key的超时设置处理
Redis开发运维实践指南数据操作之key操作数据操作2.1.1 列出key2.1.2 测试指定key是否存在2.1.3 删除给定key2.1.4 返回给定key的value类型2.1.5 返回从当前数据库中随机选择的一个key2.1.6 原子的重命名一个key2.1.7 Key的超时设置处理
对于其他危险的命令,新版本也进行了替代:
Redis开发运维实践指南数据操作之key操作数据操作2.1.1 列出key2.1.2 测试指定key是否存在2.1.3 删除给定key2.1.4 返回给定key的value类型2.1.5 返回从当前数据库中随机选择的一个key2.1.6 原子的重命名一个key2.1.7 Key的超时设置处理

redis-cli下的扫描:

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

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

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

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

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

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

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

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

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

设置生命周期。

以毫秒返回生命周期。

注意: 当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是更小的。 <b></b> <b>本文为《redis开发运维实践指南》内容,该书作者为黄鹏程,已授权云栖社区转载。</b>