쿼리 결과를 캐싱하면 시스템의 서비스 기능이 크게 향상되고 기본 서비스나 데이터베이스에 대한 부담을 줄일 수 있다는 것은 모두 알고 있습니다. 페이징 조건을 사용한 캐싱의 경우 다양한 페이징 조건에 따라 여러 키를 캐시할 수도 있습니다.
SortedSet을 기반으로 한 페이징 쿼리 캐싱 솔루션
가장 먼저 떠오르는 솔루션은 페이징 조건에 따라 여러 키를 사용하는 대신 @see ListOperations
캐시가 실패하면 동시 쓰기 캐시로 인해 데이터가 중복되므로 문제가 발생합니다. 그래서 동시성 중에 중복 데이터를 처리하기 위해 set을 사용하려고 생각했습니다. @see ZSetOperations< ;K, V>
코드 로직은 다음과 같습니다.
range(key,start,limit)按照分页条件获取缓存,命中则直接返回 缓存未命中,查询(没有分页条件)数据库或是调用(没有分页)底层接口 add(key,valueScoreMap<value,score>)写入缓存,expire设置缓存时间 当需要清理缓存时,直接删除key,如果是因为数据新增和删除,可以add(key,value,score)或remove(key,value)
redis는 맵의 데이터를 점수 점수에 따라 오름차순으로 정렬합니다. 일반적으로 점수 점수는 fileA의 값을 순서대로 나타냅니다. sql 문의 fileA를 사용하면 데이터 일관성을 보장할 수 있습니다
그러나 이 방법에도 몇 가지 문제가 있습니다.
이 키 캐시의 값은 실제로 핫 데이터이지만 일부 데이터만 자주 사용될 수 있으며 나머지는 데이터 등 전혀 사용되지 않습니다. 100개의 페이지가 있지만 실제로는 처음 10페이지만 사용할 수 있으며 이로 인해 캐시 공간이 낭비될 수도 있습니다. Redis 가상 메모리를 사용하는 경우에도 일정한 영향을 미칩니다. . SQL 쿼리가 원래 페이징 쿼리에서 비페이징 쿼리로 변경되었습니다. 캐시가 무효화되면 특히 대규모 테이블의 경우 시스템 처리 능력이 이전에 비해 감소합니다.
더 많은 Redis 관련 기술 기사를 확인하세요.
Redis 시작하기 튜토리얼위 내용은 Redis가 페이징 쿼리를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!