java - 使用多个条件的 Redis 缓存查询
问题描述
我有来自电子商务的价格数据,如以下。每一行都被视为一个域对象让我们说 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.从Ebay获取价格
+-----------+----------+-------+------------------+
| 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 缓存键以及如何查询数据库以获得上述 2 个结果?
在保存 pojo 时,我在 java spring boot 项目中使用 Jedis 库进行以下操作:
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);
}
现在您可以autowired
在服务中使用 ProductPriceRepository。
要保存记录,您需要调用repository.save
方法。
推荐阅读
- python - 根据参数类型设置 issubset 性能差异
- .htaccess - 防止人们直接在我的网站上打开 pdf
- mysql - 编写为备份文件创建日期目录的小型 Shell 脚本时遇到问题
- perl - 在单次迭代中提取相同模式的第一次和最后一次出现之间的所有内容
- javascript - 如何使用javascript从summernote编辑器获取和设置光标位置
- ruby-on-rails - 如何在索引视图中显示图像
- javascript - 读取 xml 文件以确定复制哪些文件的 Grunt 构建脚本
- django-viewflow - Viewflow Django - 你如何弃用一个步骤?
- row - 向下行 - Java 脚本
- c++ - 如何获取由 CreateProcess 生成的进程的真实 ID