目前我使用 Redis 的目的如下:
- 缓存网页。
- 缓存产生单一结果的 SQL 查询。
例如:
@Cacheable(value = "memberCache", key = "#username.concat('')")
public MemberModel findByUsername(String username) {
return memMapper.findByUsername(username);
}
但问题是如何缓存导致多个结果的 SQL 查询。
例如:
public List<MemberModel> findWhichAgeBiggerThan(int age) {
return memMapper.ageBiggerThan(age);
}
现在结果变成了一个List
。当然我也可以缓存这个结果,但是如果一个新用户刚注册到系统,这个查询的结果可能会改变。如果发生这种情况,缓存将失效。如何解决此类问题?
非常感谢!
最佳答案
您可以使用 Redis Hash 而不是使用 List:
你的方法将是这样的:
public Map<String, MemberModel> findWhichAgeBiggerThan(int age) {
// return map with key as String(may be user id) and actual MemberModel
}
整个 map 可以保存在一个 super 键上,比如“成员”,个人数据可以用 student1、student2 键保存,如下所示
hset members student1 MemberModel1 student2 MemberModel2
要添加任何其他数据,只需将上述命令与特定数据一起使用
hset members student_new MemberModel_new
成员将使用新数据添加/更新现有的“成员”键。
关于caching - MySql 与 Spring Cache 的 Redis 缓存策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30836406/