redis缓存查询

htrmnn0y  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(445)

我有电子商务的价格数据,比如following。每一行都被视为一个域对象,比如priceinfo

  1. +-----------+----------+-------+------------------+
  2. | ProductId | Provider | Price | Time |
  3. +-----------+----------+-------+------------------+
  4. | iphone | Amazon | 200 | 13-12-2021 12:50 |
  5. | iphone | Ebay | 201 | 13-12-2021 12:50 |
  6. | iphone | Alibaba | 202 | 13-12-2021 12:50 |
  7. | GalaxyX2 | Ebay | 195 | 13-12-2021 12:50 |
  8. | GalaxyX2 | Alibaba | 196 | 13-12-2021 12:50 |
  9. +-----------+----------+-------+------------------+

客户感兴趣的是从一个特定的供应商那里得到所有的价格,或者从不同的供应商那里得到单个产品的价格
1.从易趣获取价格

  1. +-----------+----------+-------+------------------+
  2. | ProductId | Provider | Price | Time |
  3. +-----------+----------+-------+------------------+
  4. | iphone | Ebay | 201 | 13-12-2021 12:50 |
  5. | GalaxyX2 | Ebay | 195 | 13-12-2021 12:50 |
  6. +-----------+----------+-------+------------------+

2.获取iphone的价格

  1. +-----------+----------+-------+------------------+
  2. | ProductId | Provider | Price | Time |
  3. +-----------+----------+-------+------------------+
  4. | iphone | Amazon | 200 | 13-12-2021 12:50 |
  5. | iphone | Ebay | 201 | 13-12-2021 12:50 |
  6. | iphone | Alibaba | 202 | 13-12-2021 12:50 |
  7. +-----------+----------+-------+------------------+

如何定义我的redis缓存键,如何查询db得到以上两个结果?
在保存pojo时,我正在使用java spring boot项目中的jedis库执行以下操作:

  1. public void save(PricingInfo pricingInfo ) {
  2. template.opsForHash().put(HASH_KEY, pricingInfo.getProductId(), pricingInfo );
  3. }
flseospp

flseospp1#

你可以用 RedisReposiroty 要获取这些数据,可以在redis存储库中将集合定义为

  1. @RedisHash("productPrice")
  2. public class ProductPrice implements Serializable {
  3. @Id private String id; // assign id as productId#provider
  4. @Indexed
  5. private String productId;
  6. @Indexed
  7. private String provider;
  8. private Double price;
  9. private Long timestamp;
  10. }

我们在这里添加了两个索引,一个用于productid,另一个用于provider。
使用以下两种方法定义redis存储库

  1. @Repository
  2. public interface ProductPriceRepository extends CrudRepository<ProductPrice, String> {
  3. List<ProductPrice> findByProductId(String productId);
  4. List<ProductPrice> findByProvider(String provider);
  5. }

现在你可以了 autowired 服务中的productpricerepository。
要保存记录,您需要呼叫 repository.save 方法。

展开查看全部

相关问题