✨ Redis删除策略
- 过期数据
- Redis中的数据特征
- 过期数据是否被真正删除
- Redis删除策略
- 时效性数据的存储结构
- 定时删除
- 惰性删除
- 定期删除
- 逐出算法
- 基本介绍
- 相关配置
- 相关算法
📃个人主页:不断前进的皮卡丘
🌞博客描述:梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记
🔥个人专栏:微服务专栏
过期数据
Redis中的数据特征
- Redis是内存级别的数据库,所有的数据都是存储在内存中,内存中的数据我们可以通过TTL来获取数据的状态
- TTL key
- xx:具有时效性的数据
- -1:永久有效的数据
- -2:已经过期的数据,或者是被删除的数据,或者是没有被定义的数据
过期数据是否被真正删除
其实,可能大家会有一种疑惑,就是说那些过期的数据是真的被删除了吗。就像平时在生活中父母让我们倒垃圾,我们会说好的,马上就去倒垃圾,但是很经常都是等一会时间才去倒垃圾。那么,Redis会不会也和我们一样,有懒惰心理呢?
假设现在Redis要处理一个数据,当它发出指令给CPU的时候,这个时候CPU觉得还挺OK,没有什么压力。但是,如果Redis要处理很多的数据,这个时候命令很多,CPU就会觉得压力挺大的,CPU的性能就会降低,此时,Redis就会和CPU说,先把正事给做了,那些过期数据先不着急处理,set,get等命令要先进行处理。也就是说那些过期的数据可能还是先存放在内存里面的,等到真正要删除的时候,才把过期数据从内存中删除。
Redis删除策略
我们肯定是希望当CPU忙的时候,就不要再给它添加太多的压力,所以尽可能让CPU在空闲的时候,来处理那些过期的数据。在内存占用与CPU占用之间寻找一种平衡,顾此失彼都会造成整体redis性能的下降,甚至引发服务器宕机或
内存泄露
时效性数据的存储结构
定时删除
惰性删除
定期删除
逐出算法
基本介绍
📖上面讲的三种删除策略是基于数据库中key的有效时间有关的,如果说有新的数据要进入redis,但是内存不足怎么办?
📖Redis使用内存存储数据,在执行每一个命令前,会调用freeMemoryIfNeeded()检测内存是否充足。如果内存不满足新加入数据的最低存储要求,redis要临时删除一些数据为当前指令清理存储空间。清理数据的策略称为逐出算法。
📖注意:逐出数据的过程不是100%能够清理出足够的可使用的内存空间,如果不成功则反复执行。当对所
有数据尝试完毕后,如果不能达到内存清理的要求,将出现错误信息。
📖(error) OOM command not allowed when used memory >'maxmemory‘
相关配置
命令 | 功能描述 |
maxmemory | 最大可用内存,占用物理内存的比例默认是0,表示不限制。生存环境中根据实际需要来设置,一般设置在50%以上 |
maxmemory-samples | 每次选取待删除数据的个数,选数据的时候不会全数据库扫描,这样会导致性能严重消耗,降低读写性能,因此采用随机获取数据的方式作为待检测删除数据 |
maxmemory-policy | 删除策略,达到最大内存以后,对被挑选出来的数据进行删除的策略 |
相关算法
使用INFO命令输出监控信息,查询缓存 hit 和 miss 的次数,根据业务需求调优Redis配置