2015-06-15 47 views
0

目前我使用的Redis用于以下目的:用于MySQL的Redis的缓存策略与Spring缓存

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

非常感谢你!

回答

0

而不是使用列表,您可以使用Redis的哈希值:

你的方法将是这样的:

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 

要添加的任何其他数据简单地使用上面的命令与数据paricular像

hset members student_new MemberModel_new 

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