【问题标题】:Redis cache strategy for MySql with Spring Cache带有 Spring Cache 的 MySql 的 Redis 缓存策略
【发布时间】:2015-06-15 01:50:58
【问题描述】:

目前我将 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。当然我也可以缓存这个结果,但是如果一个新用户刚刚注册到系统,这个查询的结果可能会改变。如果发生这种情况,缓存将是陈旧的。如何解决这样的问题?

非常感谢!

【问题讨论】:

    标签: caching redis spring-cache


    【解决方案1】:

    你可以使用 Redis Hash 来代替 List :

    你的方法是这样的:

    public Map<String, MemberModel> findWhichAgeBiggerThan(int age) {
       // return map with key as String(may be user id) and actual MemberModel
    }
    

    整个地图可以用超级键保存,比如“成员”,个人数据可以用 student1、student2 键保存,如下所示

    hset members student1 MemberModel1 student2 MemberModel2
    

    要添加任何其他数据,只需将上述命令与特定数据一起使用,例如

    hset members student_new MemberModel_new
    

    这里的成员将使用新数据添加/更新现有的“nembers”键。

    【讨论】:

      猜你喜欢
      • 2017-01-16
      • 2016-09-08
      • 2022-08-08
      • 2013-10-13
      • 2021-05-05
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多