caching - MySql 与 Spring Cache 的 Redis 缓存策略

标签 caching redis spring-cache

目前我使用 Redis 的目的如下:

  1. 缓存网页。
  2. 缓存产生单一结果的 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/

相关文章:

node.js - 特拉维斯 CI 缓存 : ignore specific folder/file from cache

python - 是否可以将嵌套字典作为哈希结构存储在Redis中?

spring-boot - 在 spring boot 中启用 Redis 缓存

spring - 如何在Java中缓存REST API响应

PHP缓存包含文件

javascript - 缓存:myscript-1125.js vs myscript.js?1125

python - 如何在 View 中使用Django缓存而不缓存所有页面

c# - 无法连接到 Redis 服务器;要创建断开连接的多路复用器,请禁用 AbortOnConnectFail。 PING 上的套接字失败

redis - Kubernetes Redis 集群问题

java - 逐出EhCache中的所有元素