redis 的key操作是涉及范围最广的操作 。
1、Redis 列出key
keys *user*
keys *
有3个通配符 *, ? ,[]
- *: 通配任意多个字符
- ?: 通配单个字符
- []: 通配括号内的某1个字符
注:生产已经禁止。更安全的做法是采用scan,原理和操作如下: 针对Keys的改进,支持分页查询Key。在迭代过程中,Keys有增删时不会要锁定写操作,数据集完整度不做任何保证,同一条key可能会被返回多次.对于其他危险的命令,新版本也进行了替代:
redis-cli下的扫描:
redis-cli --scan --pattern 'chenqun_*'
这是用scan命令扫描redis中的key,--pattern选项指定扫描的key的pattern。相比keys pattern模式,不会长时间阻塞redis而导致其他客户端的命令请求一直处于阻塞状态。
2、Redis 测试指定key是否存在
exists key // 返回1表示存在,0不存在
3、Redis 删除给定key
del key1 key2 ....keyN // 返回1表示存在,0不存在
4、Redis 返回给定key的value类型
type key //返回 none 表示不存在key。string字符类型,list 链表类型 set 无序集合类型...
5、Redis 返回从当前数据库中随机选择的一个key
randomkey // 如果当前数据库是空的,返回空串
6、Redis 原子的重命名一个key
rename oldkey newkey
如果newkey存在,将会被覆盖,返回1表示成功,0失败。可能是oldkey不存在或者和newkey相同
renamenx oldkey newkey
同上,但是如果newkey存在返回失败
7、Redis 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是更小的。
原文链接: https://www.w3cschool.cn/redis_all_about/redis_all_about-sfc726u6.html