만료 설정 및 제거 전략 ---- 레디 스 레디 스 시리즈

메모리 부족 레디 스 만료 시간 메커니즘과 전략

   레디 스 데이터 그렇지 않으면 메모리 공간의 낭비가 될 것입니다, 메모리에, 서버의 메모리의 메모리 크기는 더 이상이 삭제되어야하며, 사용하지 않는 몇 가지 키, 중단하지 않는 한, 그렇지 않으면 데이터는 항상 존재한다, 제한된다. 그리고 이러한 제한 시간 제공, 사용자 세션, 인증 코드와 데이터의 무효화를 요구 몇 가지 장면이있다. 일정 시간 후에는 데이터를 삭제해야합니다. 만료 시간에 도달하면이 문제를 해결하기 위해, 레디 스가에 시간 함수 값이 만료 제공, 데이터는 메모리 공간을 확보하기 위해 삭제됩니다.

첫째, 만료 시간 메커니즘

   레디 스 만기 프로세스 실제로 즉, 시간 설정 키 유효 시간 설정 프로세스 값의 키 (열쇠)에 대한 값을 저장한다. 사전이 만료 시간의 모든 키를 보유 만료, 그것은 또한 필드 만료 언급 만료됩니다. 이벤트 네 치료 전략을 레디 스 :

  • 만료 키 생존 시간은 TTL (초)로 설정
  • PEXPIRE 생성 된 키는 밀리 초 TTL의 시간으로 설정
  • 타임 스탬프를 나타내는 타임 스탬프 초 키 유효 시간 설정 번호 EXPIREAT
  • PEXPIREAT는 타임 스탬프 (밀리 초)을 설정할 수있는 키의 만료 시간은 시간 스탬프를 나타낸다

   (2)는 가장 일반적으로 사용되는 처리 정책 인증 코드 세 분 실패 후 5 분, 레디 스 저장 초 밀리 변환에 시간 (분)을 제공하는 등의 시간의 두 가지 방법이 만료에 제공된다.
   도 3 및도 4는 시간이 만료 쿠폰 등의 유효 기간을 설정하는 두 가지 방법으로, 하루의 일정 기간이지만 단위는 동일하지 않다.

예를 들면 :

127.0.0.1:6379> set messageCode 8223
OK
127.0.0.1:6379> expire messageCode 100
(integer) 1

남은 수명주기를 보려면 TTL 명령을 사용하여

127.0.0.1:6379> ttl messageCode
(integer) 91

   버전 2.1.3 이하에서 키를 한 번만 만료되도록 설정되어 있습니다. 반복적으로 사용할 수 2.1.3 이상 버전 명령 키를 만료, 키 업데이트는 시간이 만료됩니다. 당신은 세트 또는 델 명령 키를 사용하는 경우, 그것은 또한 시간이 만료 제거합니다.
만료 시간이 키가 만료 후에 삭제됩니다됩니다 설정 한 다음 방법은 그것을 삭제 레디 스?

삭제 정책

레디 스 세 가지 삭제 정책을 제공합니다 :

  • 정기적으로 삭제 : 즉시에 시간과 만료 시간이 삭제 작업을 실행할 때, 중요한 시간의 만료 시간을 설정 타이머를 생성, 정상 업무에 더 큰 영향을 읽고 이런 식으로 쓰기합니다.
  • 정기적으로 삭제 : 100ms마다 기본 데이터베이스를 무작위로 테스트를위한 만료 시간이 삭제됩니다 만료 키 세트의 번호에서 선택됩니다 레디 스.
  • 삭제 불활성이 키에 액세스 키를 삭제할 때 삭제 불활성 소위, 키 삭제에 그려지는하지 않을 때 위해 정기적으로 삭제 불활성 힙 제거합니다.

현재, 레디 스 정기적으로 프로그램을 삭제 + 삭제 불활성 사용합니다.

두, 레디 스 메모리 제거 전략

   앞서 언급 한 바와 같이, 키 레디 스 삭제됩니다 만료,하지만 당신은 다음 빨리, 통관의 속도보다 더 빨리 삽입 이상 서버의 메모리가 꽉 찬 경우,이 시간, 우리는 다음 메모리 키의 단계적 전략이 필요 처리, 레디 스 메모리에 레디 스, 메모리에 사용자가 구성한 정책에 따라 원치 않는 키 릴리스 밖으로 웁니다 전략의 다음과 같은 여덟 아웃을 제공합니다 :

  • 휘발성-LRU : 데이터가 가장 최근에 사용 중 중앙 집중화 된 데이터를 선택하는 만료 시간을 설정에서. 열쇠는 당신이 손실되지 않는 영구 데이터를 필요로하는 보장 같은 시간에 메모리 공간을 늘릴 수 있도록, 만료 시간이 제거되지 않습니다 설정되어 있지 않습니다.
  • 해서 AllKeys-LRU는 : 최소 최근 사용이 전략 중 선택된 데이터를 단계적으로하는 데이터 세트로부터 모든 키 컬렉션보다 오래된 키 컬렉션에 대한 키이다.
  • 휘발성 랜덤 : 데이터 아웃 만료 시간 데이터의 집합에서 무작위로 선택된
  • 해서 AllKeys 랜덤 : 어떤 키의 전체 데이터 세트를 선택
  • 휘발성 TTL : LRU를 첨가하여 제거기구와 실질적으로 유사한 전략 휘발성 LRU는 데이터를 만료 데이터 세트의 선택으로부터 만료 시간을 설정 TTL 큰 값이 우선적으로 제거.
  • noeviction : 메모리가 새 데이터를 수용하기에 충분하지 않을 때 퇴학 데이터, 즉,, 오류가있는 새로운 쓰기가, 요청이 진행 금지, 온라인 작업이 손실되지 않도록 데이터를 보장 할 수없는 enviction 정책을 사용하여, 계속 될 수 없다, 이 시스템 기본 정책 중의 일종이다.
  • 휘발성 LFU : 모든 키 주파수 키 추방 최소 만료 시간에 배열로부터
  • 해서 AllKeys-LFU : 최소 주파수 키를 추방하는 데 사용되는 모든 키에서.

   여기 특징이며, 주요 정책 이름에서 모든 설정을 초기에 변동성이 만료 불안정한 키에 속하는 키 만료 시간 설정이 여기에 또한 이름은 이탈리아어 알아보기 때문에,이입니다.

   LRU 레디 스 종래의 LRU 구현 (N 상기 머리 뒤로 정확한 것, 종래의 LRU 아웃 소자 동일 아닌 레디 스 LRU 큐 유지하거나 임의로 설정 정책 N에 따른 키의 모두에서 선택되지 않은 당신 구성 할 수 있습니다) 또는 N 키는 키 세트 만료 시간을 모두 선택하고, 다음이 N 키가 가장 긴하지 않는 핵심 밖으로 선정되었다. LRU는 가장 최근에 사용 된 이러한 단점을 해결하기 위해, Redis4.0는 LFU 가장 자주 액세스하는 데이터는 대부분 미래에 액세스 할 수입니다 (최소 자주 사용) 알고리즘을 제공하고, 실제로는 정확하지 않습니다. 유사 레디 스 각 키에 대한 카운터를 유지하는 것이라고 생각했다. 모든 키, 때 카운터 증가를 액세스 할 수 있습니다. 카운터가 클수록,이 빈번한 액세스에 대해 동일 할 수있다.

어떻게 만료 단계적 전략을 설정합니다

레디 스 redis.conf 파일에서, 이러한 설명 :

# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
# is reached. You can select among five behaviors:
#
# volatile-lru -> Evict using approximated LRU among the keys with an expire set.
# allkeys-lru -> Evict any key using approximated LRU.
# volatile-lfu -> Evict using approximated LFU among the keys with an expire set.
# allkeys-lfu -> Evict any key using approximated LFU.
# volatile-random -> Remove a random key among the ones with an expire set.
# allkeys-random -> Remove a random key, any key.
# volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
# noeviction -> Don't evict anything, just return an error on write operations.
# LRU是最近最少使用
# LRU means Least Recently Used
# LFU是最少使用
# LFU means Least Frequently Used
#
# Both LRU, LFU and volatile-ttl are implemented using approximated
# randomized algorithms.
#
# Note: with any of the above policies, Redis will return an error on write
#       operations, when there are no suitable keys for eviction.
#
#       At the date of writing these commands are: set setnx setex append
#       incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
#       sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
#       zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
#       getset mset msetnx exec sort
#
# The default is:
# 默认使用的是noeviction
# maxmemory-policy noeviction

이러한 구성의 의미를 이해 할 수있을 것입니다에이 프로필을보고있는 것만으로, 매우 명확하게 설명합니다.

   일반적으로, 현장 휘발성-LRU 그 중요한 데이터, 개발, 사람을 사용 (예를 들어, 구성 클래스 데이터 등) 설정 기간이 아니라, 폐기해서는 안된다, 그래서 레디 스 데이터를 제거하지 않을 것이다; 상대적으로 덜 중요하고, 그 데이터 소스로 돌아갈 수 있습니다를 들어, 메모리가 부족 레디 스 데이터의이 부분을 제거 할 때 그래서, 유효 기간을 설정할 수 있습니다.

설정 제거 전략 :
다음 명령을 사용하여 레디 스 bin 디렉토리로 :

redis-cli -p 6379 config set maxmemory-policy volatile-lru

또는 직접 구성 redis.conf 수정 :

maxmemory-policy volatile-lru

   레디 스 완전히 신뢰할 수있는 성능 및 가용성 고려 사항에서 제거 메커니즘, 그리고, 우리가 설정 또는 업데이트 데이터의 원치 않는 영구적 인 보존의 개발에 시간 키를 만료 주도권을 쥐고 시도해야 이니셔티브의이 부분은 전체 레디 스를 향상, 데이터를 제거합니다 성능과 공간.

추천

출처www.cnblogs.com/JackSparrow-/p/12174069.html