使用スプリングブーツ関連情報
現在使用されている Spring Boot のバージョンは 1.5.2.RELEASE
, 数据库操作使用的是 spring-boot-starter-data-jpa
,redis使用的是spring-boot-starter-data-redis
データベース操作にはSpring Bootが提供するJPAリポジトリを使用し、redisはRedisリポジトリを使用します。
一般的なシナリオは、JPA を通じてデータを mysql に保存し、成功した後に Redis のハッシュ オブジェクトを更新することです。
Spring Data Redis リポジトリの公式ドキュメントの紹介によると、エンティティを構成する必要があります。
2.関連コード
例として注文を保存すると、DTO を渡し、jpa メソッドを呼び出してデータベースに書き込み、成功後にキャッシュに書き込みます。
メインコードは次のとおりです:
メインファイルでキャッシュを有効にするために使用します
@EnableRedisRepositories(basePackages = {"com.test"})
@EnableCaching
RedisConfig はいくつかのキャッシュ関数を書き換えます
リーリーOrderService は、save メソッドを呼び出してデータをデータベースに保存します。このフォームはここで使用されます@CachePut
注解,生成的key的主键是order:100
。
リーリー
リーリー
私が今抱えている主な問題は:1)
.Order
实体配置中,如果我在Id
上配置了 redis 的 ID 注解 @org.springframework.data.annotation.Id
, 生成的redis key类似这样 order:1222702657038933405
, 我想要的效果是生成的key直接使用订单id,类似这样 order:100
で
に設定がありますが、有効になりません。 @CachePut(value = "order", key = "#order.id")
リーリー
3) redis によって作成されたキーが間違っているという問題はさておき、redis オブジェクトは正常に保存できますが、データベース レコードが正常に作成されていないことがわかりました。 Order エンティティの 注釈を削除すると、データベース レコードは正常に作成できますが、キャッシュは正常に作成できません。 @RedisHash(value = "order")
まず第一に、キーは属性名である必要があります
リーリー次に、@RedisHash はオブジェクトを Redis に永続化するために使用されます。ここで使用したいのは永続化ではなく Redis キャッシュであるため、RedisHash とは関係ありません。