目录
过期策略
Redis使用过期策略: 惰性删除+定期删除缺略
- 惰性删除
- 含义:key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null。
- 优点:删除操作只发生在从数据库取出key的时候发生,而且只删除当前key,所以对CPU时间的占用是比较少的,而且此时的删除是已经到了非做不可的地步(如果此时还不删除的话,我们就会获取到了已经过期的key了)
- 缺点:若大量的key在超出超时时间后,很久一段时间内,都没有被获取过,那么可能发生内存泄露(无用的垃圾占用了大量的内存)
- 定期删除
- 含义:每个一段时间(默认100ms)会 随机删除一些过期的key
- 优点:
- 通过限制删除操作的时长和频率,来减少删除操作对CPU时间的占用--处理"定时删除"的缺点
- 定期删除过期key--处理"惰性删除"的缺点
- 缺点
- 在内存友好方面,不如"定时删除"
- 在CPU时间友好方面,不如"惰性删除"
- 难点
- 合理设置删除操作的执行时长(每次删除执行多长时间)和执行频率(每隔多长时间做一次删除)(这个要根据服务器运行情况来定了)
LRU内存淘汰机制
如果redis 内存满了怎么办?
1. 增加内存
2. 使用内存淘汰策略
Redis 配置文件redis.conf 的maxmemory参数 可以去控制器内存大小;
如果超过了 maxmemory的设置内存大小,那么淘汰策略 maxmemory-policy 参数配置默认值 noeviction;
noeviction(默认): 拒绝写操作, 不删除键,只返回错误, 默认策略, 不建议使用;
volatile-ttl: 删除生存时间最短的一个key;
allkeys-random: 随机删除一个key;
volatile-random: 随机删除一个设置了生存时间的key;
allkeys-lru: 使用lru 算法删除一个key 也就是 删除一个最近在最少使用的key;
volatile-lru: 使用lru算法删一个这设置了生存时间的key 删除一个设置了生存时间最近最少使用的key;
lru: 最近最少使用的算法, 也就是删除最近最少使用的key;