方法一
(一)、RedisCache(mybatis二级缓存实现类)
1/** 2 * Created by hhjian on 17-6-27. 3 */ 4public class RedisCache implements Cache { 5 6 private static final Logger logger = LoggerFactory.getLogger(RedisCache.class); 7 8 private static JedisConnectionFactory jedisConnectionFactory; 9 10 private final String id; 11 12 private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); 13 14 public RedisCache(final String id) { 15 if (id == null) { 16 throw new IllegalArgumentException("Cache instances require an ID"); 17 } 18 this.id = id; 19 } 20 21 @Override 22 public String getId() { 23 return this.id; 24 } 25 26 @Override 27 public void putObject(Object o, Object o1) { 28 RedisConnection connection = jedisConnectionFactory.getConnection(); 29 connection.set(serializer(o), serializer(o1)); 30 connection.close(); 31 } 32 33 @Override 34 public Object getObject(Object key) { 35 RedisConnection connection = jedisConnectionFactory.getConnection(); 36 Object object = deSerializer(connection.get(serializer(key))); 37 connection.close(); 38 return object; 39 } 40 41 @Override 42 public Object removeObject(Object o) { 43 RedisConnection connection = jedisConnectionFactory.getConnection(); 44 Object object = connection.expire(serializer(o), 0); 45 return object; 46 } 47 48 @Override 49 public void clear() { 50 RedisConnection connection = jedisConnectionFactory.getConnection(); 51 connection.flushDb(); 52 connection.flushAll(); 53 connection.close(); 54 } 55 56 @Override 57 public int getSize() { 58 RedisConnection connection = jedisConnectionFactory.getConnection(); 59 int size = Integer.valueOf(connection.dbSize().toString()); 60 connection.close(); 61 return size; 62 } 63 64 @Override 65 public ReadWriteLock getReadWriteLock() { 66 return this.readWriteLock; 67 } 68 69 public static void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) { 70 RedisCache.jedisConnectionFactory = jedisConnectionFactory; 71 } 72 73 private byte[] serializer(Object arg) { 74 RedisSerializer<Object> serializer = new JdkSerializationRedisSerializer(); 75 return serializer.serialize(arg); 76 } 77 78 private Object deSerializer(byte[] arg) { 79 RedisSerializer<Object> serializer = new JdkSerializationRedisSerializer(); 80 return serializer.deserialize(arg); 81 } 82}
(二)、静态注入 jedisConnectionFactory
1<bean id="redisCache" class="com.linkworld.dao.RedisCacheTransfer"> 2 <property name="jedisConnectionFactory" ref="jedisConnectionFactory"/> 3</bean> 4 5/** 6 * Created by hhjian on 17-6-27. 7 */ 8public class RedisCacheTransfer { 9 10 @Autowired 11 public void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) { 12 RedisCache.setJedisConnectionFactory(jedisConnectionFactory); 13 } 14} 15
(三)、开启缓存
1<setting name="cacheEnabled" value="true"/> 2<cache type="com.linkworld.dao.RedisCache" eviction="FIFO" readOnly="true" />
方法二 官方文档方法
1<dependencies> 2 ... 3 <dependency> 4 <groupId>org.mybatis.caches</groupId> 5 <artifactId>mybatis-redis</artifactId> 6 <version>1.0.0-beta2</version> 7 </dependency> 8 ... 9</dependencies>
then, just configure it in the mapper XML
1<mapper namespace="org.acme.FooMapper"> 2 <cache type="org.mybatis.caches.redis.RedisCache" /> 3 ... 4</mapper>