찾다

 >  Q&A  >  본문

java - redis 缓存方案--有没有可用的?

现在的方案是,sql 作为key 查询结果序列化后 存入value 。表如果有数据修改添加删除,flushDB()。
但是整个项目只要有数据变更缓存就没了。
谁还有其他方案?
想知道的就是数据增删改对redis都有操作后再对数据库操作,redis里查询的永远是最新的,当某些原因redis里查不到时查数据库然后保存到reids里。
这种方案有谁实现了吗?

黄舟黄舟2766일 전478

모든 응답(6)나는 대답할 것이다

  • 高洛峰

    高洛峰2017-04-18 09:15:22

    왜 sql을 키로 사용해야 하는지... 그리고 db를 플러시할 때마다 마음이 바뀔 수 있습니다. 제품이 포함된 테이블이 있고 기본 키가 id인 경우 다음을 사용하여 캐시를 만들 수 있습니다. 주요 세부사항: 제품 ID, 이것을 넣습니다. 행 레코드는 값으로 사용되며 데이터 유형은 해시 또는 문자열입니다. 비즈니스에서 기본 키를 기반으로 특정 제품 정보를 확인해야 하는 경우 먼저 Redis에 가서 세부 정보 캐시가 있는지 확인합니다. 기본 키가 없으면 캐시를 직접 가져옵니다. 캐시를 사용하면 데이터베이스를 확인하고 쿼리 결과를 저장할 수 있습니다. 또한 기록이 변경되면 캐시를 직접 삭제하거나 캐시를 업데이트할 수도 있습니다.
    이것은 아주 간단한 예일 뿐입니다. Redis 데이터 유형은 매우 풍부하며 올바르게 사용하면 매우 즐겁게 사용할 수 있습니다. 또한 위의 예에서는 비즈니스에 따라 캐시별로 유효 기간을 일주일 등으로 설정할 수 있습니다. 일반적으로 사용자는 오래된 콘텐츠를 거의 보지 않으므로 콘텐츠가 만료되고 아무도 콘텐츠를 탐색하지 않으면 다시 작성되지 않습니다. 이렇게 하면 Redis에 항상 핫 데이터가 유지됩니다. 그냥 오래된 자료가 아닙니다. 휴대폰으로 타이핑하기 지겹네요. 유용하셨다면 좋아요 부탁드립니다

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 09:15:22

    캐싱의 의미는 데이터베이스에서 자주 사용하는 데이터를 Redis에 저장하는 등 인기 있는 데이터를 저장하여 매번 데이터베이스에 쿼리할 필요가 없도록 하는 것입니다.

    포스터가 직면한 문제는 캐시의 데이터를 데이터베이스의 데이터와 일관되게 유지하는 방법입니다.
    위에서 언급한 表如果有数据修改添加删除,flushDB()처럼 바람직하지 않습니다.

    캐시된 데이터의 작업은 실제로 읽기쓰기

    로 단순화됩니다.

    애플리케이션이 redis를 쿼리할 때 찾을 수 없다면 이때 데이터베이스를 확인하고 찾은 데이터를 redis에 저장해야 합니다.
    데이터베이스의 데이터가 변경되면 위에서 언급한 数据增删改对redis都有操作后再对数据库操作은 실제로 애플리케이션이 데이터베이스를 먼저 수정한 다음 성공한 후 Redis를 업데이트하는 것이 바람직하지 않습니다. Redis를 먼저 업데이트했지만 데이터베이스 업데이트가 실패하면 어떻게 해야 합니까? Redis는 더티 데이터를 저장하지 않습니까?

    또한 캐시에 있는 데이터는 만료 시간(만료 시간 초과)을 설정할 수 있습니다. 만료 시간 이후에는 데이터베이스를 다시 확인하고 데이터를 업데이트하세요(만료 시간 이전에 데이터가 전혀 변경되지 않은 경우에도 마찬가지). , 적어도 데이터베이스의 부하를 줄이십시오.

    테마의 목적을 살펴보면 Redis를 데이터베이스 데이터의 백업으로 사용하는 방법이 있습니다. Redis Cache를 사용하는 것은 아닙니다. (아마도 데이터베이스 마스터-슬레이브 백업을 고려해야 할 것입니다.)

    당신이 언급한 솔루션은 주제 설명을 보면 솔루션이 필요하지 않습니다(데이터의 일관성 등을 고려할 때 고가용성 구성을 솔루션이라고 생각합니다).
    실제로는 코드의 논리이며 코드 작성 방법에 따라 다릅니다.

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:15:22

    Spring에는 redis 플러그인이 있습니다. 소규모 프로젝트에는 ehcache와 spring 플러그인을 사용하는 것이 더 편리합니다.

    회신하다
    0
  • 迷茫

    迷茫2017-04-18 09:15:22

    캐싱 시스템을 구현할 때 다음 세 가지 질문을 고려해야 합니다(세 번째 질문은 선택 사항)

    1. 캐시 로드

    2. 캐시 무효화

    3. 캐시된 업데이트(선택 사항)

    질문 1:

    캐시를 로드하기 위해 해야 할 일은 매우 간단합니다. 어떤 쿼리든 먼저 캐시에 쿼리가 없으면 데이터베이스를 확인하세요.

    질문 2:

    캐시를 무효화하려면 데이터베이스가 수정(업데이트, 삭제)될 때 캐시를 삭제하기만 하면 됩니다.

    질문 3:

    데이터가 업데이트되면 캐시가 무효화되거나 삭제되지 않지만, 이 선택적 작업을 통해 캐시가 항상 최신 상태로 유지되는 효과를 얻을 수 있습니다.

    질문 3에는 또 다른 문제가 있습니다. 데이터베이스가 성공적으로 업데이트되기 전에는 캐시를 업데이트하지 마세요. 이때 캐시가 복원되지 않으면 더티 데이터가 나타날 수 있습니다.

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-18 09:15:22

    mybatis-redis에 솔루션이 있습니다. https://github.com/mybatis/redis-cache를 참조하세요

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 09:15:22

    @Cacheable을 구현했으며 service 또는 dao 레이어 메서드에서 가로채서 redis로 직접 이동하여 데이터를 얻는 데 사용됩니다.

    회신하다
    0
  • 취소회신하다