인터뷰에서 Redis Value를 만료시키는 방법을 물었습니다. 10 개 중 9 개는 만료되지 않습니다!

최근에 한 급우가 그룹에서 자신의 경험을 교환했는데, 그는 10 명의 프로그래머를 인터뷰했고 그중 9 명은 Redis의 가치를 만료시키는 방법을 "못할 것"이라고 말했습니다!

Redis의 지속성 기능은 주요 기능 중 하나이지만 영구 저장소에는 사용되지 않습니다. 따라서 Redis 키 또는 값을 만료시키는 방법은 매우 중요합니다! 오늘은이 인터뷰 질문에 대해 간단히 이야기하겠습니다!

Redis 자체에는 자체 만료 메커니즘이 있지만이 만료 메커니즘은 특정 키 만료에만 적용되며 값이 만료되는 방식에는 특정 기능이 없습니다. 그러나 일부 시나리오에서는 종종 Redis 값이 만료되도록해야하지만 키는 만료되지 않습니다.

예를 들어 이제 15 분 이내에 기사에 대한 통계 읽기를 수행해야합니다. 그리고 1 분에 한 번 세고, 뜨거운 기사를 찾아 내고, 특별한 대우를해야합니다. 각 기사는 고유 한 ID로 표시됩니다.

다음은 읽은 기사 수의 변경 예입니다.


[100, 520, 666, 888, 996 ...]

기사가 너무 많으면 많은 메모리 공간이 낭비됩니다! 일부 값 데이터를 제때 정리하고 키가 만료되도록해야합니다. 이는 시나리오에 적합하지 않을 수 있습니다!

그래서 어떻게할까요?

현재 주문한 Redis 컬렉션이 유용 할 수 있습니다!

점수는 지정된 값으로 지정하고 점수에 따라 정렬 할 수 있으며, ZRANGEBYSCORE를 통해 특정 범위의 점수에 해당하는 값을 얻을 수 있습니다.


ZRANGEBYSCORE key score1 
#   文章id   时间戳    阅读数 
ZADD id    1577591750 996

이제 15 분 이내에 데이터를 얻으려면 다음을 수행 할 수 있습니다.


ZRANGEBYSCORE id now - 15 * 60 now

그러나 우리의 가치는 정확하지만 가치는 만료되지 않았기 때문에 여전히 완벽하지 않습니다.

따라서 위의 명령에 대해 여전히 최적화 할 수 있습니다!


ZRANGEBYSCORE id 0 now - 15 * 60

마지막으로 값 만료 외에도 키도 기록해야하며 키도 만료되어야한다는 점에주의해야합니다.

# 24 小时后整个 key 过期
EXPIRE key 24 * 60 * 60

위의 예는 특별히 적절하지 않을 수 있으며 주문 된 컬렉션을 대상으로합니다. 순서가없는 컬렉션 인 경우 일부 네티즌들은 값을 먼저 얻은 다음 이전 데이터를 제거하고 값을 다시 설정해야한다고 답했습니다. 그러나 내 제안은 올바른 데이터 구조를 선택하는 것이 더 중요하다는 것입니다!

추천

출처blog.51cto.com/15127565/2664728