redis有效时间设置及时间过期处理_查看redis状态
redis是在内存中进行缓存的,我们在设置redis缓存时,可以设置下过期时间。那么在设置时间到期后redis是如何进行数据删除的。
redis清理过期数据。
定期清理 + 惰性清理
定期删除:redis数据库默认每隔100ms就会进行随机抽取一些设置过期时间的key进行检测,过期则删除。
惰性删除:定期删除还没有来得及删除,就被程序请求到的一个过期key,redis会先检测key是否,过期,如果过期则删除,不进行返回。
但是前面两种机制可能还导致一些问题就是,过期的key如果大量堆积,删除的速度太慢,内存爆满怎么办?
内存淘汰机制
1)noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。
2)allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)就是LRU算法。
3)allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key,一般没人用。
4)volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key(这个一般不太合适)
5)volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key
6)volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除
LRU算法实现
public class LRUCache extends LinkedHashMap {
private final int CACHE_SIZE;
// 这里就是传递进来最多能缓存多少数据
public LRUCache(int cacheSize) {
super((int) Math.ceil(cacheSize / 0.75) + 1, 0.75f, true); // 这块就是设置一个hashmap的初始大小,同时最后一个true指的是让linkedhashmap按照访问顺序来进行排序,最近访问的放在头,最老访问的就在尾
CACHE_SIZE = cacheSize;
}
@Override
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > CACHE_SIZE; // 这个意思就是说当map中的数据量大于指定的缓存个数的时候,就自动删除最老的数据
}
}
public static void main(String[] args) {
LRUCache testCache = new LRUCache<>(3);
testCache.put(“A”, 1);
testCache.put(“B”, 2);
testCache.put(“C”, 3);
System.out.println(testCache.get(“B”));
System.out.println(testCache.get(“A”));
testCache.put(“D”, 4);
System.out.println(testCache.get(“D”));
System.out.println(testCache.get(“C”));
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
相关文章
- Redis:开创高性能分布式存储技术(redis全称)
- 阿里云 Redis:漏洞知多少?(阿里云redis漏洞)
- 使用Redis进行状态检测(redis检测)
- Redis优化并发,提升处理效率(redis优化并发)
- 快速简便的Redis迁移:Redis迁移工具(redis迁移工具)
- 现象解决Redis雪崩问题的几种方法(怎么处理redis的雪崩)
- 探索Redis周边一次性体验(查找redis附近的人)
- 重大变故Redis数据大幅变动(数据变动了redis)
- 在Web服务器上使用Redis进行高性能处理(web服务器 redis)
- 北风网突破界限,大力推广Redis技术(北风网redis)
- 如何用Redis实现高效的队列系统(如何用redis实现队列)
- 深入理解Redis二级缓存(什么是redis二级缓存)
- 用Redis实现高效的队列处理(redis高效队列处理)
- 使用Redis实现顺序取值功能(redis顺序取值)
- Redis队列更快更可靠的处理任务(redis队列优点)
- Redis断开连接报错处理实践(redis闪断报错)
- 功能Redis分布式锁注解功能提升(redis锁注解)
- Redis如何设置最大值递增(redis 递增 最大值)
- 途 构建Redis连接池提升系统性能 (redis连接池什么用)
- Redis淘汰策略最佳解决方案(redis过期处理方法)
- 处理使用Redis轻松实现中文输入处理(redis 输入中文)
- Redis超时处理如何优化读请求性能(redis读请求超时处理)
- 利用Redis集群实现SetNX功能(redis集群setnx)
- Redis订阅状态实时报告(redis 订阅 状态)
- 使用让Redis为你重复使用带来更多福利(redis能重复)
- Redis实现自动处理过期订单(redis 过期订单)
- 使用Redis实现多线程处理过期策略(redis过期 多线程)