MyBatis+Redis缓存实现

来源:互联网 发布:php 36进制 编辑:程序博客网 时间:2024/05/01 09:30

1.RedisCache.java

import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.ibatis.cache.Cache;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;public class RedisCache implements Cache {    private static Log logger = LogFactory.getLog(RedisCache.class);    private Jedis redisClient = createClient();    /** The ReadWriteLock. */    private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();    private String id;    public RedisCache(final String id) {        if (id == null) {            throw new IllegalArgumentException("Cache instances require an ID");        }        logger.debug("----------->>MybatisRedisCache:id=" + id);        this.id = id;    }    public String getId() {        return this.id;    }    public int getSize() {        return Integer.valueOf(redisClient.dbSize().toString());    }    public void putObject(Object key, Object value) {        byte[] bytes = SerializeUtil.serialize(value);        redisClient.set(SerializeUtil.serialize(key.toString()), bytes);        logger.debug("----------->>putObject:" + key + "=" + value);    }    public Object getObject(Object key) {        byte[] bytes = redisClient.get(SerializeUtil.serialize(key.toString()));        Object value = SerializeUtil.unserialize(bytes);        logger.debug("----------->>getObject:" + key + "=" + value);        return value;    }    public Object removeObject(Object key) {        return redisClient.expire(SerializeUtil.serialize(key.toString()), 0);    }    public void clear() {        redisClient.flushDB();    }    public ReadWriteLock getReadWriteLock() {        return readWriteLock;    }    protected static Jedis createClient() {        try {            JedisPoolConfig config = new JedisPoolConfig();            JedisPool pool = new JedisPool(config, "175.15.27.322");               return pool.getResource();        } catch (Exception e) {            e.printStackTrace();        }        throw new RuntimeException("初始化连接池错误");    }}

2.TestUser.mapper.xml
mapper配置文件中加入一家配置:

<cache eviction="LRU" type="com.ecs.redis.RedisCache" />

refer: http://blog.csdn.net/fhx007/article/details/12680875

0 0