検索

ホームページ  >  に質問  >  本文

springboot - Spring Boot RedisはカスタムIDを使用してハッシュオブジェクトを保存する問題

  1. 使用スプリングブーツ関連情報

現在使用されている 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。 リーリー

エンティティの設定は次のとおりです。ここでは 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")

阿神阿神2752日前1766

全員に返信(1)返信します

  • 给我你的怀抱

    给我你的怀抱2017-05-16 13:22:12

    まず第一に、キーは属性名である必要があります

    リーリー

    次に、@RedisHash はオブジェクトを Redis に永続化するために使用されます。ここで使用したいのは永続化ではなく Redis キャッシュであるため、RedisHash とは関係ありません。

    返事
    0
  • キャンセル返事