Mybatis的緩存交給redis管理
標籤(空格分隔): Mybatis redis
前言:
針對redis的單機版進行緩存設置
一、導入相關jar
二、實現過程
用到jedisUtils工具類
import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class JedisUtils { private static JedisPool jedisPool; static { JedisPoolConfig jedisConfig = new JedisPoolConfig(); jedisConfig.setMaxTotal(100); jedisConfig.setMaxIdle(10); jedisConfig.setMaxWaitMillis(100); jedisPool = new JedisPool(jedisConfig, "192.168.0.118", 6379); } public static Jedis getJedis() { return jedisPool.getResource(); } public static void close(Jedis jedis) { jedis.close(); } }
實現Mybatis的Cache
import java.io.Serializable; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.commons.lang3.SerializationUtils; import org.apache.ibatis.cache.Cache; import com.baizhi.util.JedisUtils; public class MyBatisCache implements Cache{ private String id; private ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); public MyBatisCache(String id){ this.id = id; } public String getId() { return id; } public int getSize() { Long size = JedisUtils.getJedis().dbSize(); return size.intValue(); } public void putObject(Object key, Object value) { JedisUtils.getJedis().set(SerializationUtils.serialize((Serializable)key), SerializationUtils.serialize((Serializable)value)); } public Object getObject(Object key) { byte[] bs = JedisUtils.getJedis().get(SerializationUtils.serialize((Serializable)key)); if(bs == null){ return null; } return SerializationUtils.deserialize(bs); } public Object removeObject(Object key) { byte[] bs = JedisUtils.getJedis().get(SerializationUtils.serialize((Serializable)key)); JedisUtils.getJedis().del(SerializationUtils.serialize((Serializable)key)); return SerializationUtils.deserialize(bs); } public void clear() { JedisUtils.getJedis().flushDB(); } public ReadWriteLock getReadWriteLock() { return readWriteLock; } }
開啓Mybatis的全局緩存
mybatis-config.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" > <configuration> <settings> <!-- 開啓全局的緩存 --> <setting name="cacheEnabled" value="true"/> </settings> </configuration>
在需要緩存的xxxxmapper.xml中開啓緩存
<cache type="com.xxxx.cache.mybatis.MyBatisCache"/>
一定要將實體進行序列化,因爲緩存的存儲過程中要進行數據的序列化
在spring對SQLSessionFactory的管理中配置
<!-- 創建SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> ... //配置開啓全局的緩存 <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean>