redis mysql spring_SpringMVC + MyBatis + Mysql + Redis(作为二级缓存)

一、添加redis所需依赖

pom.xml

org.springframework.data

spring-data-redis

1.6.2.RELEASE

redis.clients

jedis

2.8.0

二、创建redis配置文件

redis.properties

# Redis settings

redis.host=127.0.0.1

redis.port=6379

redis.pass=

redis.maxIdle=300

redis.maxActive=600

redis.maxWait=1000

redis.timeout=10000

redis.testOnBorrow=true

三、创建Mybatis缓存实现类MybatisRedisCache

import org.apache.ibatis.cache.Cache;

import org.apache.logging.log4j.LogManager;

import org.apache.logging.log4j.Logger;

import org.springframework.data.redis.connection.jedis.JedisConnection;

import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;

import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;

import org.springframework.data.redis.serializer.RedisSerializer;

import redis.clients.jedis.exceptions.JedisConnectionException;

import java.util.concurrent.locks.ReadWriteLock;

import java.util.concurrent.locks.ReentrantReadWriteLock;

/**

* @ClassName MybatisRedisCache

* @Description: 使用redis作为Mybatis第二级缓存 创建缓存实现类MybatisRedisCache

* @Author Jason

* @Date 2020/4/7 14:56

* @Version V1.0

**/

public class MybatisRedisCache implements Cache

{

private static final Logger logger = LogManager.getLogger(MybatisRedisCache.class);

private static JedisConnectionFactory jedisConnectionFactory;

private final String id;

/**

* The {@code ReadWriteLock}.

*/

private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

public MybatisRedisCache(final String id) {

if (id == null) {

throw new IllegalArgumentException("Cache instances require an ID");

}

logger.debug("MybatisRedisCache:id=" + id);

this.id = id;

}

@Override

public void clear()

{

JedisConnection connection = null;

try

{

connection = jedisConnectionFactory.getConnection();

connection.flushDb();

connection.flushAll();

}

catch (JedisConnectionException e)

{

e.printStackTrace();

}

finally

{

if (connection != null) {

connection.close();

}

}

}

@Override

public String getId()

{

return this.id;

}

@Override

public Object getObject(Object key)

{

Object result = null;

JedisConnection connection = null;

try

{

connection = jedisConnectionFactory.getConnection();

RedisSerializer serializer = new JdkSerializationRedisSerializer();

result = serializer.deserialize(connection.get(serializer.serialize(key)));

}

catch (JedisConnectionException e)

{

e.printStackTrace();

}

finally

{

if (connection != null) {

connection.close();

}

}

return result;

}

@Override

public ReadWriteLock getReadWriteLock()

{

return this.readWriteLock;

}

@Override

public int getSize()

{

int result = 0;

JedisConnection connection = null;

try

{

connection = jedisConnectionFactory.getConnection();

result = Integer.valueOf(connection.dbSize().toString());

}

catch (JedisConnectionException e)

{

e.printStackTrace();

}

finally

{

if (connection != null) {

connection.close();

}

}

return result;

}

@Override

public void putObject(Object key, Object value)

{

JedisConnection connection = null;

try

{

connection = jedisConnectionFactory.getConnection();

RedisSerializer serializer = new JdkSerializationRedisSerializer();

connection.set(serializer.serialize(key), serializer.serialize(value));

}

catch (JedisConnectionException e)

{

e.printStackTrace();

}

finally

{

if (connection != null) {

connection.close();

}

}

}

@Override

public Object removeObject(Object key)

{

JedisConnection connection = null;

Object result = null;

try

{

connection = jedisConnectionFactory.getConnection();

RedisSerializer serializer = new JdkSerializationRedisSerializer();

result =connection.expire(serializer.serialize(key), 0);

}

catch (JedisConnectionException e)

{

e.printStackTrace();

}

finally

{

if (connection != null) {

connection.close();

}

}

return result;

}

public static void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) {

MybatisRedisCache.jedisConnectionFactory = jedisConnectionFactory;

}

}

四、创建缓存转换中间类RedisCacheTransfer

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;

/**

* @ClassName RedisCacheTransfer

* @Description: TODO 创建中间类RedisCacheTransfer,完成MybatisRedisCache.jedisConnectionFactory的静态注入

* @Author Jason

* @Date 2020/4/7 15:40

* @Version V1.0

**/

public class RedisCacheTransfer {

@Autowired

public void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) {

MybatisRedisCache.setJedisConnectionFactory(jedisConnectionFactory);

}

}

五、spring.xml 引入redis配置

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

classpath:jdbc.properties

classpath:redis.properties

六、mybatis配置缓存设置

七、mapper中启用二级缓存

....

八、Mybatis的二级缓存redis已完成配置,测试Demo自行编写

第一次测试结果!

未命中redis(即redis没有相关数据)到mysql数据库中查询

a4d8f81070fb81336d93cf7d7babf72b.png

第二次测试结果

由于第一次已报查询结果同步到redis,因此不需要再查询mysql,查询redis即可得到数据

32d692ed060c3abd5363c5cf949329b2.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值