Redis过期key的删除及淘汰机制

目录

一、Redis过期key的删除

1.Redis的key生存期到了会立即删除吗?

2.定期删除

3.惰性删除

二、Redis的淘汰机制

1.为什么任何一个缓存机制都是有淘汰机制的?

2.淘汰机制的类型

(1)LRU:最近最少使用淘汰算法。(一个时间段内用的最少的)

(3)FIFO:最先写入淘汰 

3.Redis的淘汰机制什么时候触发?

4.Redis的淘汰机制


一、Redis过期key的删除

1.Redis的key生存期到了会立即删除吗?

不一定。因为当如果有大量key同时过期,那么Redis都去删除这些key的话,那么需要消耗很大的性能,那么对于我们数据缓存的的性能就有影响,所以Redis有两种删除过期key的策略

2.定期删除

Redis每隔一段时间就会去查看设置了过期时间的key,并且在100ms的间隔中默认查看三个key

3.惰性删除

如果查询了一个过期的key,Redis会看这个key的生存时间是否到了,如果到了那么Redis会把这个key删除,返回一个空值

通过这些策略就不会导致大批量的去删除过期的key,浪费Redis过多的性能

二、Redis的淘汰机制

任何一个缓存机制都是有淘汰机制的

1.为什么任何一个缓存机制都是有淘汰机制的?

因为缓存的数据是存在于内存当中的,内存相比于磁盘的IO读写速度会更快,所以我们使用缓存就是为了提高查询效率,但是内存是有一个上限的,内存资源也是比较珍贵的,所以内存要及时清理“冷数据”释放更多的内存空间出来存储“热数据”

淘汰机制就是对“冷数据”进行清理的一种策略

2.淘汰机制的类型

(1)LRU:最近最少使用淘汰算法。(一个时间段内用的最少的)

LRU算法的基本思想是,如果一个数据在最近一段时间内没有被访问,那么它在将来也很可能不会被访问,因此可以优先淘汰这部分数据。

实现:

LRU算法的实现通常依赖于数据结构,最常见的是使用一个双向链表(Doubly Linked List)和一个哈希表(Hash Map)的结合来实现

双向链表维护数据访问时间,哈希表维护数据在链表中的位置

(2)LFU:最不经常使用淘汰使用算法。(整个时间期用的最少的

淘汰被访问频率最低的数据项

实现:

  1. 频率表(Frequency Table): 用于记录每个数据项的访问频率。可以是一个哈希表,其中键是数据项,值是对应的访问频率。

  2. 最小堆(Min Heap): 用于维护数据项和对应访问频率的关系,堆顶元素是访问频率最低的数据项。

(3)FIFO:最先写入淘汰 

最先进入缓存的数据最先被淘汰

(4)RANDOM:随机淘汰

3.Redis的淘汰机制什么时候触发?

当内存不足的时候就会触发淘汰机制

4.Redis的淘汰机制

Redis过期key的删除及淘汰机制_第1张图片

你可能感兴趣的:(redis,redis,数据库,缓存)