redis缓存查询

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

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

+-----------+----------+-------+------------------+
| ProductId | Provider | Price |       Time       |
+-----------+----------+-------+------------------+
| iphone    | Amazon   |   200 | 13-12-2021 12:50 |
| iphone    | Ebay     |   201 | 13-12-2021 12:50 |
| iphone    | Alibaba  |   202 | 13-12-2021 12:50 |
| GalaxyX2  | Ebay     |   195 | 13-12-2021 12:50 |
| GalaxyX2  | Alibaba  |   196 | 13-12-2021 12:50 |
+-----------+----------+-------+------------------+

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

+-----------+----------+-------+------------------+
| ProductId | Provider | Price |       Time       |
+-----------+----------+-------+------------------+
| iphone    | Ebay     |   201 | 13-12-2021 12:50 |
| GalaxyX2  | Ebay     |   195 | 13-12-2021 12:50 |
+-----------+----------+-------+------------------+

2.获取iphone的价格

+-----------+----------+-------+------------------+
| ProductId | Provider | Price |       Time       |
+-----------+----------+-------+------------------+
| iphone    | Amazon   |   200 | 13-12-2021 12:50 |
| iphone    | Ebay     |   201 | 13-12-2021 12:50 |
| iphone    | Alibaba  |   202 | 13-12-2021 12:50 |
+-----------+----------+-------+------------------+

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

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

flseospp1#

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

@RedisHash("productPrice")
public class ProductPrice implements Serializable {
    @Id private String id; // assign id as productId#provider
    @Indexed
    private String productId;
    @Indexed
    private String provider;
    private Double price;
    private Long timestamp;
}

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

@Repository
public interface ProductPriceRepository extends CrudRepository<ProductPrice, String>  {
    List<ProductPrice> findByProductId(String productId);
    List<ProductPrice> findByProvider(String provider);
}

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

相关问题