springboot - 스프링 부트 redis는 사용자 정의 ID 문제를 사용하여 해시 객체를 저장합니다.
阿神
阿神 2017-05-16 13:20:12
0
1
1756
  1. 사용된 스프링부트 관련 정보

현재 사용되는 스프링 부트 버전은 1.5.2.RELEASE, 数据库操作使用的是 spring-boot-starter-data-jpa,redis使用的是spring-boot-starter-data-redis

입니다.

데이터베이스 작업에는 spring boot에서 제공하는 JPA 저장소를 사용하고, redis는 Redis Repositories를 사용합니다.

일반적인 시나리오는 JPA를 통해 mysql에 데이터를 저장하고 성공한 후 redis의 해시 개체를 업데이트하는 것입니다.

Spring Data Redis Repositories 공식 문서 소개에 따라 엔터티를 구성해야 합니다.

2.관련 코드

주문 저장을 예로 들어 DTO를 전달하고 jpa 메서드를 호출하여 데이터베이스에 쓰고 성공 후 캐시에 씁니다.
주요 코드는 다음과 같습니다.

메인 파일에서 캐싱을 활성화하는 데 사용
@EnableRedisRepositories(basePackages = {"com.test"})
@EnableCaching

으아악

RedisConfig는 일부 캐싱 기능을 다시 작성합니다

으아악

OrderService는 데이터를 데이터베이스에 저장하기 위해 save 메소드를 호출합니다. 이 양식은 여기에서 사용됩니다@CachePut注解,生成的key的主键是order:100 으아악

엔터티 설정은 다음과 같습니다. JPA 구성과 Redis 구성이 모두 사용됩니다. 이것은 약간 모호하며 올바른지 모르겠습니다.

으아악

지금 내가 겪고 있는 주요 문제는 다음과 같습니다.

1)

.Order实体配置中,如果我在Id上配置了 redis 的 ID 注解 @org.springframework.data.annotation.Id, 生成的redis key类似这样 order:1222702657038933405, 我想要的效果是生成的key直接使用订单id,类似这样 order:100

서비스

에 구성이 있지만 적용되지 않습니다. @CachePut(value = "order", key = "#order.id")

2) 디버깅할 때 생성된 객체에 ID가 있어도 표현식의 id 속성이 존재하지 않는다고 보고하는 것을 발견했습니다

으아악

3) Redis에서 잘못된 키가 생성되는 문제를 제쳐두고, Redis 개체는 성공적으로 저장할 수 있지만 데이터베이스 레코드가 성공적으로 생성되지 않는 것을 발견했습니다. Order 엔터티에서

주석을 제거하면 데이터베이스 레코드는 성공적으로 생성될 수 있지만 캐시는 성공적으로 생성될 수 없습니다. @RedisHash(value = "order")

阿神
阿神

闭关修行中......

모든 응답(1)
给我你的怀抱

우선 키는 속성 이름이어야 합니다

으아악

둘째, @RedisHash는 객체를 Redis에 유지하는 데 사용됩니다. 여기서 사용하려는 것은 지속성이 아닌 Redis 캐시이므로 RedisHash와는 아무런 관련이 없습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿