首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个条件的Redis缓存查询

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

Stack Overflow用户
提问于 2021-04-24 20:03:10
回答 1查看 187关注 0票数 0

我有来自电子商务的价格数据,像下面这样。每行都被视为一个域对象,比方说PriceInfo

代码语言:javascript
复制
+-----------+----------+-------+------------------+
| 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.从Ebay获取价格

代码语言:javascript
复制
+-----------+----------+-------+------------------+
| ProductId | Provider | Price |       Time       |
+-----------+----------+-------+------------------+
| iphone    | Ebay     |   201 | 13-12-2021 12:50 |
| GalaxyX2  | Ebay     |   195 | 13-12-2021 12:50 |
+-----------+----------+-------+------------------+

2.获取iphone的价格

代码语言:javascript
复制
+-----------+----------+-------+------------------+
| 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项目中使用Jedis库执行以下操作:

代码语言:javascript
复制
    public void save(PricingInfo pricingInfo ) {
        template.opsForHash().put(HASH_KEY, pricingInfo.getProductId(), pricingInfo );
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-24 23:07:58

您可以使用RedisReposiroty来获取这些数据,在Redis存储库中,您可以将集合定义为

代码语言:javascript
复制
@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存储库

代码语言:javascript
复制
@Repository
public interface ProductPriceRepository extends CrudRepository<ProductPrice, String>  {
    List<ProductPrice> findByProductId(String productId);
    List<ProductPrice> findByProvider(String provider);
} 

现在,您可以在服务中autowired ProductPriceRepository。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67242566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档