>  기사  >  백엔드 개발  >  Redis 캐싱 전략

Redis 캐싱 전략

WBOY
WBOY원래의
2016-09-06 08:57:081192검색

Redis를 사용하여 데이터를 캐시하는 과정에서 캐시 설계 아이디어는 다음과 같습니다.
데이터를 가져올 때 먼저 캐시에서 데이터를 가져옵니다. 가져온 데이터가 비어 있으면 데이터베이스에 쿼리하고, 그런 다음 첫 번째 쿼리 수신된 데이터가 Redis에 캐시된 다음 데이터가 반환됩니다.
하지만 이제 두 가지 질문이 있습니다.

  1. 데이터베이스의 쿼리 결과가 비어 있으면 데이터가 캐시되지 않으므로 캐시에서 데이터를 가져올 수 없습니다. 그러면 데이터를 가져올 때마다 데이터베이스 쿼리가 수행됩니다. 이를 어떻게 최적화해야 합니까?

  2. 데이터가 업데이트되면 캐시를 어떻게 처리해야 하나요?

저는 이 두 가지 문제에 대해 미숙한 생각을 가지고 있습니다. 이것이 실현 가능한지, 그리고 이를 처리할 수 있는 더 좋은 방법이 있는지에 대해 모든 분들께 조언을 구하고 싶습니다.

첫 번째 질문의 경우 데이터베이스 쿼리에서 데이터를 얻지 못한 경우 다음 번에 데이터를 얻을 때 데이터가 없음을 나타내기 위해 고정된 기본값(예: 문자열: 'nodata')이 캐시됩니다. 캐시를 사용하면 이 고정된 값을 얻게 됩니다. 값이 데이터가 없음을 나타내는 경우 데이터베이스를 다시 쿼리하지 않고 직접 비어 있는 값을 반환합니다

두 번째 질문의 경우 업데이트된 데이터가 특별히 중요하지 않은 경우 해당 데이터를 데이터베이스에 기록하고 다음에 데이터를 얻을 때 해당 데이터를 캐시에서 직접 업데이트하면 된다는 것이 현재 생각입니다. 최신 데이터를 쿼리하지 않고 직접 가져오지만 업데이트된 데이터가 특히 중요한 경우(예: 돈) 다음 번에 데이터를 데이터베이스에 쓴 후 해당 캐시가 지워집니다. 최신 데이터를 얻으려면 데이터베이스를 쿼리해야 합니다.

답글 내용:

Redis를 사용하여 데이터를 캐시하는 과정에서 캐시 설계 아이디어는 다음과 같습니다.
데이터를 가져올 때 먼저 캐시에서 데이터를 가져옵니다. 가져온 데이터가 비어 있으면 데이터베이스에 쿼리하고, 그런 다음 첫 번째 쿼리 수신된 데이터가 Redis에 캐시된 다음 데이터가 반환됩니다.
하지만 이제 두 가지 질문이 있습니다.

  1. 데이터베이스의 쿼리 결과가 비어 있으면 데이터가 캐시되지 않으므로 캐시에서 데이터를 가져올 수 없습니다. 그러면 데이터를 가져올 때마다 데이터베이스 쿼리가 수행됩니다. 이를 어떻게 최적화해야 합니까?

  2. 데이터가 업데이트되면 캐시를 어떻게 처리해야 하나요?

저는 이 두 가지 문제에 대해 미성숙한 생각을 가지고 있습니다. 이것이 가능한지, 그리고 이를 처리할 수 있는 더 좋은 방법이 있는지에 대해 모든 분들께 조언을 구하고 싶습니다.

첫 번째 질문의 경우 데이터베이스 쿼리에서 데이터를 얻지 못한 경우 다음 번에 데이터를 얻을 때 데이터가 없음을 나타내기 위해 고정된 기본값(예: 문자열: 'nodata')이 캐시됩니다. 캐시를 사용하면 이 고정된 값을 얻을 수 있습니다. 값이 데이터가 없음을 나타내는 경우 데이터베이스를 다시 쿼리하지 않고 직접 비어 있는 값을 반환합니다

두 번째 질문의 경우 업데이트된 데이터가 특별히 중요하지 않은 경우 해당 데이터를 데이터베이스에 기록하고 다음에 데이터를 얻을 때 해당 데이터를 캐시에서 직접 업데이트하면 된다는 것이 현재 생각입니다. 최신 데이터를 쿼리하지 않고 직접 가져오지만 업데이트된 데이터가 특히 중요한 경우(예: 돈) 다음 번에 데이터를 데이터베이스에 쓴 후 해당 캐시가 지워집니다. 최신 데이터를 얻으려면 데이터베이스를 쿼리해야 합니다.

  1. 이 두 가지 경우를 구별할 수 있는 방법(예: 자연적으로 null 허용 유형 또는 유형)이 필요합니다. 예를 들어 데이터가 있으면 JSON 리스트 [{...}, {...}]가 저장되고, 데이터가 없으면 자연스럽게 []가 저장된다. 어쨌든 갈등이 없다면 말이죠.

  2. 캐시 업데이트 루틴 | Cool Shell - CoolShell.cn

위에서 말씀하신 내용이 일리가 있습니다.
파일 캐싱이라는 개념을 참고하시면 됩니다.
Thinkphp 파일 캐싱은 데이터를 저장하기 위해 직렬화(valle)를 사용하며, 파일명이 키 이름으로 사용됩니다. 캐시를 지우려면 직접 설정(null)하여 달성하세요.
캐싱은 쿼리의 편의와 mysql 액세스 횟수를 줄이기 위한 것일 뿐입니다. 캐시 업데이트 문제는 코드로 구현해야 합니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:thinkphp 문제다음 기사:thinkphp 문제