文章目录
前言
一说到优化内存,再结合Redis的本身特性——基于内存的操作,我感觉有很多东西都可以说啊,比如说:
- 比如redis内存满了怎么办?这涉及到过期键的删除策略
一、过期键删除
Redis是key-value数据库,可以设置key的过期时间,来及时释放内存,否则可能会导致写命令返回错误信息等问题。
1、过期策略通常有以下三种:
- 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。
- 惰性过期:只有真正的访问到一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。
- 定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。
Redis中同时使用了惰性过期和定期过期两种过期策略。
2、过期key是怎么维护的?
这些设置了过期时间的key专门存放在数据库结构中的一个地方,expires字典保存了数据库中所有键的过期