Redis集成到Spring做mybatis做二级缓存

一、原理:
  1. 要缓存的 Java 对象必须实现 Serializable 接口,因为 Spring 会将对象先序列化再存入 Redis,比如本文中的 com.defonds.bdp.city.bean.City 类,如果不实现 Serializable 的话将会遇到类似这种错误:nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [com.defonds.bdp.city.bean.City]]。
  2. 缓存的生命周期我们可以配置,然后托管 Spring CacheManager,不要试图通过 redis-cli 命令行去管理缓存。比如 provinceCities 方法的缓存,某个省份的查询结果会被以 key-value 的形式存放在 Redis,key 就是我们刚才自定义生成的 key,value 是序列化后的对象,这个 key 会被放在 key 名为 provinceCities~keys key-value 存储中,参考下图"provinceCities 方法在 Redis 中的缓存情况"。可以通过 redis-cli 使用 del 命令将 provinceCities~keys 删除,但每个省份的缓存却不会被清除。
  3. CacheManager 必须设置缓存过期时间,否则缓存对象将永不过期,这样做的原因如上,避免一些野数据“永久保存”。此外,设置缓存过期时间也有助于资源利用最大化,因为缓存里保留的永远是热点数据。
  4. 缓存适用于读多写少的场合,查询时缓存命中率很低、写操作很频繁等场景不适宜用缓存。
 
二、代码实现:
 
1.把所用到的model序列化
 
public class UserGroupModel implements Serializable{
 
    private static final long serialVersionUID = 4673186153813605228L;
2.对于mapper.xml开二级缓存
 
    <!--  开启二级缓存-->
    <cache eviction="LRU" type="com.lsqz.util.redis.RedisCache" />
3.在对应的statement 上开启缓存
 
    <select id="selectByLoginname" resultType="com.lsqz.model.user.ls_user_loginModel" useCache="true">
posted @ 2017-06-02 11:44  夏冬青  阅读(1044)  评论(0编辑  收藏  举报