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>
    
  • 相关阅读:
    ASP.NET Core 中文文档 第四章 MVC(4.4)依赖注入和控制器
    ASP.NET Core 中文文档 第四章 MVC(4.3)过滤器
    ASP.NET Core 中文文档 第四章 MVC(4.1)Controllers, Actions 和 Action Results
    ASP.NET Core 中文文档 第四章 MVC(3.9)视图组件
    ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入
    ASP.NET Core 中文文档 第四章 MVC(3.7 )局部视图(partial)
    magento 导入语言包
    php 生成二维码(qrcode)
    在windows下的CLI模式下如何运行php文件
    ftp命令
  • 原文地址:https://www.cnblogs.com/pengdt/p/13523299.html
Copyright © 2011-2022 走看看