이 글에서는 Redis 캐시의 8가지 제거 전략에 대해 설명하고 이를 사용하는 방법을 알아보겠습니다. 모든 사람에게 도움이 되기를 바랍니다.
Redis
캐시는 데이터를 저장하기 위해 메모리를 사용한다는 것을 알고 있지만, 결국 캐시할 데이터의 양이 많아질수록 메모리 크기는 제한됩니다. 필연적으로 Full로 작성됩니다. 이때, 데이터를 삭제하기 위해서는 캐시 제거 전략이 필요합니다. [관련 권장사항: Redis
缓存使用内存来保存数据,但内存大小毕竟有限,随着要缓存的数据量越来越大,有限的缓存空间不可避免地会被写满。这时候就需要缓存的淘汰策略去删除数据。【相关推荐:Redis视频教程】
Redis的淘汰策略,根据是否会进行数据淘汰可以把它们分成两类:
会进行淘汰的 7 种策略,我们可以再进一步根据淘汰候选数据集的范围把它们分成两类:
在设置了过期时间的数据中进行淘汰,包括 volatile-random、volatile-ttl、volatile-lru、volatile-lfu(Redis 4.0 后新增)四种。
在所有数据范围内进行淘汰,包括 allkeys-lru、allkeys-random、allkeys-lfu(Redis 4.0 后新增)三种。
在redis3.0之前,默认是volatile-lru
;在redis3.0之后(包括3.0),默认淘汰策略则是noeviction
noeviction表示不淘汰数据,当缓存数据满了,有新的写请求进来,Redis不再提供服务,而是直接返回错误。
volatile-random、volatile-ttl、volatile-lru、volatile-lfu 四种策略是针对已经设置了过期时间的键值对。到键值对的到期时间到了或者Redis内存使用量达到了maxmemory
阈值,Redis会根据这些策略对键值对进行淘汰;
allkeys-lru、allkeys-random、allkeys-lfu 这三种策略淘汰的数据范围扩大到所有的键值对,无论这些键值对是否设置了过期时间,筛选数据进行淘汰的规则是:
allkeys-random 策略,从所有键值对中随机选择并删除数据;
allkeys-lru 策略,使用 LRU 算法在所有数据中进行筛选。
allkeys-lfu 策略,使用 LFU 算法在所有数据中进行筛选。
LRU算法即是最近最常使用算法,由于LRU会使用一个链表去维护使用的数据列表,当使用的数据越多,其移动元素时就会越耗时,这不可避免地会影响到Redis主线程。为此Redis对lru算法做了些简化。
LRU 策略的核心思想:如果一个数据刚刚被访问,那么这个数据肯定是热数据,还会被再次访问。
按照这个核心思想,Redis 中的 LRU 策略,会在每个数据对应的 RedisObject 结构体中设置一个 lru 字段,用来记录数据的访问时间戳。在进行数据淘汰时,LRU 策略会在候选数据集中淘汰掉 lru 字段值最小的数据(也就是访问时间最久的数据)。
所以,在数据被频繁访问的业务场景中,LRU 策略的确能有效留存访问时间最近的数据。而且,因为留存的这些数据还会被再次访问,所以又可以提升业务应用的访问速度。
具体做法是,在访问键值对时,redis会记录最近一次访问的时间戳。在redis决定淘汰数据时,会随机挑选N个数据,把它们作为一个候选集合,把最小的时间戳给筛选出去。当下一次要淘汰数据时,会挑选比第一次挑选的候选集合时间戳值要小的数据进入新的候选集合。当数据达到maxmemory-samples 时,将最小的值给淘汰掉。
通过该命令可以设置挑选的候选集合数CONFIG SET maxmemory-samples N
Redis 동영상 튜토리얼
휘발성-lru
였고, redis3.0(3.0 포함) 이후에는 기본 제거 전략이 noeviction
🎜이었습니다. h3 data-id="heading-1">🎜noeviction strategy🎜🎜🎜noeviction은 데이터를 제거하지 않는다는 의미입니다. 캐시 데이터가 가득 차고 새로운 쓰기 요청이 들어오면 Redis는 더 이상 서비스를 제공하지 않고 직접 오류를 반환합니다. . 🎜maxmemory
임계값에 도달하면 Redis는 이러한 전략에 따라 키-값 쌍을 제거합니다. 🎜CONFIG SET maxmemory-samples N
을 통해 선택한 후보 세트의 수를 설정할 수 있습니다.🎜🎜🎜사용 제안🎜🎜🎜전략의 특성에 따라 제거할 다양한 전략을 선택할 수 있습니다. 다양한 시나리오에 대한 데이터. 🎜allkeys-random
무작위 전략을 사용하여 데이터를 제거하는 것이 좋습니다. allkeys-random
随机策略淘汰数据;allkeys-lru
或者volatile-lru
算法,将最近最常访问的数据留在缓存数据中;volatile-lru
allkeys-lru
또는 휘발성-lru
알고리즘을 사용하여 가장 최근에 액세스한 데이터를 캐시 데이터에 보관하는 것이 좋습니다. 비즈니스를 최우선으로 해야 하는 경우, 즉 만료되는 데이터의 경우 이러한 유형의 데이터에는 일반적으로 만료 시간이 설정되어 있지 않으며 휘발성-lru
전략을 사용할 수 있습니다. 사용됩니다. 이러한 방식으로 이러한 유형의 데이터는 제거되지 않지만 LRU 규칙에 따라 다른 데이터는 제거될 수 있습니다.
위 내용은 Redis 캐시의 8가지 제거 전략에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!