zoukankan      html  css  js  c++  java
  • Mybatis-Redis-Cache

    相关链接
    mybatis集成cache
    mybatis与redis整合

    步骤

    • redisTemplate的配置查看【redis的使用】笔记
    • 增加配置,spring-redis.xml
    <bean id="redisCacheTransfer" class="com.pdt.ssm.util.RedisCacheTransfer">
        <property name="redisTemplate" ref="redisTemplate"/>
    </bean>
    
    • 配置bean
    // utils.RedisCacheTransfer
    public class RedisCacheTransfer {
        @Autowired
        public void setRedisTemplate(RedisTemplate redisTemplate) {
            RedisCache.setRedisTemplate(redisTemplate);
        }
    }
    
    • 重写Cache
    // com.ssm.pdt.utils.RedisCache
    public class RedisCache implements Cache //实现类
    {
        private static final Logger logger = LoggerFactory.getLogger(RedisCache.class);
    
        private static RedisTemplate<String,Object> redisTemplate;
    
        private final String id;
    
        /**
         * The {@code ReadWriteLock}.
         */
        private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
    
        @Override
        public ReadWriteLock getReadWriteLock()
        {
            return this.readWriteLock;
        }
    
        public static void setRedisTemplate(RedisTemplate redisTemplate) {
            RedisCache.redisTemplate = redisTemplate;
        }
    
        public RedisCache(final String id) {
            if (id == null) {
                throw new IllegalArgumentException("Cache instances require an ID");
            }
            logger.debug("MybatisRedisCache:id=" + id);
            this.id = id;
        }
    
        @Override
        public String getId() {
            return this.id;
        }
    
        @Override
        public void putObject(Object key, Object value) {
            try{
                logger.info(">>>>>>>>>>>>>>>>>>>>>>>>putObject: key="+key+",value="+value);
                if(null!=value)
                    redisTemplate.opsForValue().set(key.toString(),value,60, TimeUnit.SECONDS);
            }catch (Exception e){
                e.printStackTrace();
                logger.error("redis保存数据异常!");
            }
        }
    
        @Override
        public Object getObject(Object key) {
            try{
                logger.info(">>>>>>>>>>>>>>>>>>>>>>>>getObject: key="+key);
                if(null!=key)
                    return redisTemplate.opsForValue().get(key.toString());
            }catch (Exception e){
                e.printStackTrace();
                logger.error("redis获取数据异常!");
            }
            return null;
        }
    
        @Override
        public Object removeObject(Object key) {
            try{
                if(null!=key)
                    return redisTemplate.expire(key.toString(),1,TimeUnit.DAYS);
            }catch (Exception e){
                e.printStackTrace();
                logger.error("redis获取数据异常!");
            }
            return null;
        }
    
        @Override
        public void clear() {
            Long size=redisTemplate.execute(new RedisCallback<Long>() {
                @Override
                public Long doInRedis(RedisConnection redisConnection) throws DataAccessException {
                    Long size = redisConnection.dbSize();
                    //连接清除数据
                    redisConnection.flushDb();
                    redisConnection.flushAll();
                    return size;
                }
            });
            logger.info(">>>>>>>>>>>>>>>>>>>>>>>>clear: 清除了" + size + "个对象");
        }
    
        @Override
        public int getSize() {
            Long size = redisTemplate.execute(new RedisCallback<Long>() {
                @Override
                public Long doInRedis(RedisConnection connection)
                        throws DataAccessException {
                    return connection.dbSize();
                }
            });
            return size.intValue();
        }
    }
    
    • 注解使用
    @CacheNamespace(implementation = com.pdt.ssm.util.RedisCache.class)
    public interface UserMapper{
        ...
    }
    
    • mapper使用
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="mapper.UserMapper">
    
        <cache type="com.pdt.ssm.util.RedisCache" />
    
        <select id="selectById">
            select * from test where id = #{id}
        </select >
    </mapper>
    
  • 相关阅读:
    【持续更新】leetcode算法-数组篇
    【转】敏捷开发之Scrum扫盲篇
    设计Twitter的api
    给一个表达式字符串加括号,计算它的所有的可能的值
    判断一个整数是否是平方数
    Spring Cloud 入门教程(七): 熔断机制 -- 断路器
    断路器(Curcuit Breaker)模式
    Spring Cloud 入门教程(六): 用声明式REST客户端Feign调用远端HTTP服务
    Spring Cloud 入门教程(五): Ribbon实现客户端的负载均衡
    Spring Cloud 入门教程(四): 分布式环境下自动发现配置服务
  • 原文地址:https://www.cnblogs.com/pengdt/p/13523299.html
Copyright © 2011-2022 走看看