当前位置:网站首页>Redis过期键的删除策略[通俗易懂]
Redis过期键的删除策略[通俗易懂]
2022-07-25 23:02:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
文章目录
Redis中有个设置时间过期的功能,即对存储在 redis 数据库中的值可以设置一个过期时间。作为一个缓存数据库,这是非常实用的。如我们一般项目中的 token 或者一些登录信息,尤其是短信验证码都是有时间限制的,按照传统的数据库处理方式,一般都是自己判断过期,这样无疑会严重影响项目性能。
我们 set key 的时候,都可以给一个 expire time,就是过期时间,通过过期时间我们可以指定这个 key 可以存活的时间。
注:对于散列表这种容器,只能为整个键设置过期时间(整个散列表),而不能为键里面的单个元素设置过期时间。
如果一个键是过期的,那它到了过期时间之后是不是马上就从内存中被被删除呢?如果不是,那过期后到底什么时候被删除呢?
其实有三种不同的删除策略: (1):立即删除。在设置键的过期时间时,创建一个回调事件,当过期时间达到时,由时间处理器自动执行键的删除操作。 (2):惰性删除。键过期了就过期了,不管。每次从dict字典中按key取值时,先检查此key是否已经过期,如果过期了就删除它,并返回nil,如果没过期,就返回键值。 (3):定时删除。每隔一段时间,对expires字典进行检查,删除里面的过期键。 可以看到,第二种为被动删除,第一种和第三种为主动删除,且第一种实时性更高。下面对这三种删除策略进行具体分析。
立即删除
立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。但是立即删除对cpu是最不友好的。因为删除操作会占用cpu的时间,如果刚好碰上了cpu很忙的时候,比如正在做交集或排序等计算的时候,就会给cpu造成额外的压力。
而且目前redis事件处理器对时间事件的处理方式–无序链表,查找一个key的时间复杂度为O(n),所以并不适合用来处理大量的时间事件。
惰性删除
惰性删除是指,某个键值过期后,此键值不会马上被删除,而是等到下次被使用的时候,才会被检查到过期,此时才能得到删除。所以惰性删除的缺点很明显:浪费内存。dict字典和expires字典都要保存这个键值的信息。
举个例子,对于一些按时间点来更新的数据,比如log日志,过期后在很长的一段时间内可能都得不到访问,这样在这段时间内就要拜拜浪费这么多内存来存log。这对于性能非常依赖于内存大小的redis来说,是比较致命的。
定时删除
从上面分析来看,立即删除会短时间内占用大量cpu,惰性删除会在一段时间内浪费内存,所以定时删除是一个折中的办法。 定时删除是:每隔一段时间执行一次删除操作,并通过限制删除操作执行的时长和频率,来减少删除操作对cpu的影响。另一方面定时删除也有效的减少了因惰性删除带来的内存浪费。
Redis使用的策略
redis使用的过期键值删除策略是:惰性删除加上定期删除,两者配合使用。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/127895.html原文链接:https://javaforall.cn
边栏推荐
- Experiment 1, experiment 2 and Experiment 3 of assembly language and microcomputer principle: branch program design / loop program design / subroutine design
- [文献阅读] - HRL -[HRL with Universal Policies for Multi-Step Robotic Manipulation]
- The difference between "= =" and equals
- Hj9 extract non duplicate integers
- 互联网协议之 IPFS
- [tensorflow] about seed
- Use of qvariant
- The difference between abstract classes and interface interfaces
- MathType安装和解决不能Crtl+V的问题
- 校验码生成
猜你喜欢

QT的Tree View Model示例

Basic knowledge of radar

Network Security Learning (16)

Hcie is finally in hand, and the road begins

Memory paging and tuning, kernel and user space

互联网协议之 IPFS
![[文献阅读] - HRL -[HRL with Universal Policies for Multi-Step Robotic Manipulation]](/img/34/06d5ba3af4e6e775a335324c020161.png)
[文献阅读] - HRL -[HRL with Universal Policies for Multi-Step Robotic Manipulation]

驱动板网线直连电脑共享网络配置

Week 2: convolutional neural network

Stack and stack class
随机推荐
PE format: analyze and implement IATHOOK
Kibana~ the process number cannot be found after kibana is started in the background
JS makes elements get or lose focus
Session and cookie, token and storage
Rental experience post
Review of static routing
QT add mouse event to control
MathType安装和解决不能Crtl+V的问题
驱动板网线直连电脑共享网络配置
如何获取广告服务流量变现数据,助力广告效果分析?
Day 3 experiment
5 ROS仿真建模(3- rviz+gazebo+控制仿真机器人)
invalid syntax
Experiment 1, experiment 2 and Experiment 3 of assembly language and microcomputer principle: branch program design / loop program design / subroutine design
【自然语言处理】【向量表示】AugSBERT:改善用于成对句子评分任务的Bi-Encoders的数据增强方法
What are the differences between FileInputStream and bufferedinputstream?
Code shoe set precision barrage
Longitude and latitude and its transformation with coordinate system
The third experiment OSPF
Ma Tiji Wanmin hall Chef