Redis key的过期时间和永久有效分别怎么设置? EXPIRE和PERSIST命令。
EXPIRE:到期的意思;用于设置过期时间的。 PERSIST:继续存在的意思;用于设置永久有效的。
即没有配置的话,默认是我们主机的最大内存。
通过命令来配置redis占用的内存大小:
config set maxmemory 大小 config get maxmemory
查看内存使用情况:info memory
redis内存打满的情况:如:
缓存过期淘汰策略:
三种不同的过期键的删除策略:
我们都知道,Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间。Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理。
过期策略通常有以下三种:
注意;Redis中同时使用了惰性删除和定期删除两种过期策略。
第一种:定时删除
定时删除即到期立即清除
定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。
该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。
定时删除总结:
第二种:惰性删除
惰性删除:用的时候判读是否过期,过期则删除,不过期则使用
原理:惰性删除不在是redis去主动删除,而是在你要获取某个key 的时候,redis会先去检测一下这个key是否已经过期,如果没有过期则返回给你,如果已经过期了,那么redis会删除这个key,不会返回给你。
该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。
第三种:定期删除:
redis 会将每个设置了过期时间的 key 放入到一个独立的字典中,以后会定期遍历这个字典来删除到期的 key。
Redis 默认会每秒进行十次过期扫描(100ms一次),过期扫描不会遍历过期字典中所有的 key,而是采用了一种简单的贪心策略。
1.从过期字典中随机 20 个 key;
2.删除这 20 个 key 中已经过期的 key;
3.如果过期的 key 比率超过 1/4,那就重复步骤 1;
redis默认是每隔 100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。注意这里是随机抽取的。为什么要随机呢?假如 redis 存了几十万个 key ,每隔100ms就遍历所有的设置过期时间的 key 的话,就会给 CPU 带来很大的负载。
Redis中同时使用了惰性删除和定期删除两种过期策略。
2.为什么需要淘汰策略
有了以上过期策略的说明后,就很容易理解为什么需要淘汰策略了,因为不管是定期采样删除还是惰性删除都不是一种完全精准的删除,就还是会存在key没有被删除掉的场景,所以就需要内存淘汰策略进行补充。
内存淘汰策略:
生产上常用的是:
配置: 方式一:
方式二:
|