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" />