Java 使用多个条件的Redis缓存查询

Java 使用多个条件的Redis缓存查询,java,caching,redis,spring-data-redis,Java,Caching,Redis,Spring Data Redis,我有电子商务的价格数据,比如following。每一行都被视为一个域对象,比如PriceInfo +-----------+----------+-------+------------------+ | ProductId | Provider | Price | Time | +-----------+----------+-------+------------------+ | iphone | Amazon | 200 | 13-12-2021 1

我有电子商务的价格数据,比如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缓存密钥,如何查询数据库以获得上述两个结果

保存pojo时,我使用java spring boot项目中的绝地库执行以下操作:

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

您可以使用
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);
} 
@存储库
公共接口ProductPriceRepository扩展了Crudepository{
列出findByProductId(字符串productId);
列表findByProvider(字符串提供程序);
} 
现在,您可以在服务中
自动连线
ProductPriceRepository


要保存记录,您需要调用
repository.save
方法。

是否检查了Redis模块?非常感谢。成功了!如何在特定时间后使特定条目过期?我可以看到,我们可以在模板级别设置过期,但会使整个哈希过期。我想在每一个哈希条目上都过期。谢谢。它起作用了。