当前位置:网站首页>说说 Redis 缓存删除策略
说说 Redis 缓存删除策略
2022-07-19 05:08:00 【Deniro Lee】
Redis 缓存删除策略分为定时删除、定期删除与惰性删除。前两个是主动删除,后一个是被动删除。
1 定时删除
为 key 设置一个过期时间,时间一到,由定时器任务删除这个 key。
优点:节省内存,因为 key 一过期,就会被立即删除。
缺点:CPU压力大,因此相当于 CPU 在轮询判断当前时间是否需要执行删除任务。
2 惰性删除
key 过期时不处理,直到访问该 key 时才删除。(很懒,直到最后一刻才执行)
优点:节省 CPU 资源,因为直到访问该 key 时,才用到 CPU。
缺点:key 过期后,仍然占用内存空间,可能导致内存出现大量过期的 key。
3 定期删除
相当于前两种策略的折中。
定期删除是每隔一段时间随机抽取一些过期 key 执行删除操作。它限制删除操作的时长与频率避免占用大量 CPU 资源。同时它还删除那些过期键避免占用大量内存资源1。
4 策略失效场景
惰性删除因为直到访问过期 key 时才删除它,可能导致内存出现大量过期的 key。而定期删除是一种随机抽取策略,有些 key 可能一直没有被抽取到,导致一直驻留在内存中。所以这两种策略都可能导致 Redis
的内存占有率越来越高。这时就需要内存淘汰机制来解决这一问题。
5 内存淘汰机制
Redis
有两种数据集,一种是设置了过期 key 的集合(volatile),另一种是包含所有 key 的集合(allkeys
)。它们都拥有以下这些内存淘汰机制2。
(1)LRU
LRU
(Least recently used,最近最少使用)算法根据数据的历史访问记录来淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”3。
本质上是把最久未被访问的元素淘汰掉。
(2)Random
淘汰掉随机选取的某些元素。
(3)LFU
LFU
(Least frequently used) 最不经常使用,如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小4。
LFU
是选择一段时间内使用次数最少的那个元素,而 LRU
是选择在内存中排在队尾的那个最近没有被使用过的元素,因为如果元素被使用过,那么会被排在队头。
另外还有以下这些机制:
(4)TTL
TTL 是 Time To Live5。当 key 过期,会被马上清除。
(5)no eviction
不会清除任何 key。当内存超过配置的阈值时,就会抛出错误。
参考资料
- Redis详解:Redis过期键删除策略 https://blog.csdn.net/qq_40378034/article/details/89418424
- 彻底弄懂Redis的内存淘汰策略 https://zhuanlan.zhihu.com/p/105587132?utm_source=qq
- 缓存淘汰算法–LRU算法 https://zhuanlan.zhihu.com/p/34989978
- LRU和LFU的区别 https://blog.csdn.net/a3192048/article/details/82291222
- Redis中的expire和ttl指令 https://www.cnblogs.com/tubeWang/p/10042334.html
Redis(6)删除策略(定时删除、惰性删除、定期删除)和数据逐出策略 https://blog.csdn.net/weixin_43230682/article/details/107670911
边栏推荐
- 当程序员没了互联网,该如何继续学习写代码
- 仿网易云音乐的YY音乐微信小程序源码
- [JS] usage of call (), apply (), bind ()
- Golang:容易误解的一些操作
- 函数的递归(利用递归求1-n的阶乘)(利用递归求斐波那契数列)(利用递归遍历数据)
- mongodb 查询和投影运算符
- How to open the enterprise payment to change | red envelope function
- Aggregate payment meets the needs of various industries to access a variety of payment channels
- 108 Polkadot substrate: private network
- wamp musql 空密码
猜你喜欢
Discuz大气游戏风格模板/仿lol英雄联盟游戏DZ游戏模板GBK
104 polkadot substrate : 许可网络
10C Polkadot substrate: add pallet to runtime
Wordpress固定链接怎么设置伪静态
[JS] usage of call (), apply (), bind ()
MYSQL日志模块
Vs2019 modify background + height custom font color
10C polkadot substrate : 添加 pallet 到 runtime
[JS] shallow copy and deep copy
Alipay payment and wechat payment are easy to be risk controlled. Take a look at this operation
随机推荐
102 polkadot substrate : 存在证明
函数的定义方式和调用
Solving inverse matrix with C language
Alipay payment and wechat payment are easy to be risk controlled. Take a look at this operation
What is tripartite payment?
性能测试基础笔试题
手写校验框架
php生成的csv, 无法完整显示带前导0的数字
支付宝支付和微信支付容易被风控可以看一下这个操作
支付产品及其使用场景
10A polkadot substrate : 节点指标
TCP三次握手和四次挥
苹果cms V10模板/MXone Pro自适应影视电影网站模板
sequelize 增删改查
三方支付公司有哪些?
mongodb 查询和投影运算符
JS 获取当前日期与时间
WordPress函数大全,学会了你就可以做主题了
上传本地jar包到线上私服
Generate multiple databases at the same time based on multiple data sources and zero code, add, delete, modify and check restful API interfaces - mysql, PostgreSQL, Oracle, Microsoft SQL Server