Redis开发运维实践指南数据操作之key操作
熟悉每个数据操作前一定要明白每个操作都是代价,以时间复杂度和对应查询集或者结果集大小为衡量。时间复杂度收敛状况如下:
2.1.1 列出keykeys *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.1.2 测试指定key是否存在exists key
返回1表示存在,0不存在
2.1.3 删除给定keydel 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 原子的重命名一个keyrename 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开发运维实践指南》内容,该书作者为黄鹏程,已授权云栖社区转载。
Redis(三十)- Redis集群操作和故障恢复&集群的Jedis开发 上一篇文章我们介绍了集群的基本概念,以及如何搭建一个简单的Redis集群。Redis(二十九)- Redis集群的介绍以及搭建,这篇文章我们接着来学习Redis集群。
相关文章
- Redis集群的搭建
- Redis集群搭建的三种方式
- Redis锁机制的几种实现方式
- Redis学习(5)-Jedis(Java操作redis数据库技术)
- Redis的Python客户端redis-py说明文档(转)
- Ubuntu下安装配置redis
- centos8安装redis
- Redis 学习笔记四 Mysql 与Redis的同步实践
- Redis 切片集群:数据增多了,是该加内存还是加实例?
- linux snap安装redis-desktop-manager
- Redis 怎么防止数据丢失?(互联网公司-银行等都喜欢问这个问题)
- [转]Redis作者:深度剖析Redis持久化
- 【服务器安装Redis】Centos7离线安装redis
- 〖Python 数据库开发实战 - Python与Redis交互篇④〗- 利用 redis-py 实现集合与有序集合的常用指令操作
- 〖Python 数据库开发实战 - Python与Redis交互篇⑧〗- 利用 redis-py 实现缓存观众投票数据信息案例
- redis分布式锁的这些坑,我怀疑你是假的开发
- 深入浅出Redis-redis哨兵集群
- Python使用redis介绍
- 009-redis应用-02-位图getbit/setbit
- redis_05 _ 内存快照:宕机后,Redis如何实现快速恢复
- centos7 shell 安装docker redis mongodb 等
- Docker搭建redis
- “位图(BitMaps):Redis中高效存储布尔类型数据的利器”
- ASP.NET Core微服务(六)——【.Net Core操作redis】StackExchange.Redis
- 【redis源码分析】Redis Sentinel 是如何实际解决分布式共识问题的