redis springmvc mysql_SpringMVC+Mybatis+MySQL配置Redis缓存

SpringMVC+Mybatis+MySQL配置Redis缓存

1.准备环境:

SpringMVC:spring-framework-4.3.5.RELEASE-dist

Mybatis:3.4.2

MySQL:5.0

JDK:1.8

IDE:Eclipse4.6.1

以及配置好的SpringMVC+Mybatis项目

2.需要添加的jar包

jedis-2.9.0.jar

或者使用POM配置

redis.clients

jedis

2.9.0

3.配置

配置分为以下几个部分:

1、Java使用Jedis实现Mybatis的Cache接口,RedisCache.java

package redisCache;

import java.util.concurrent.locks.ReadWriteLock;

import java.util.concurrent.locks.ReentrantReadWriteLock;

import org.apache.ibatis.cache.Cache;

import org.apache.log4j.Logger;

import redis.clients.jedis.Jedis;

import redis.clients.jedis.JedisPool;

import redis.clients.jedis.JedisPoolConfig;

import tool.SerializeUtil;

public class RedisCache implements Cache {

private static Logger logger = Logger.getLogger(RedisCache.class);

/* 创建访问Redis数据库的Redis客户端 */

private Jedis redisClient = createReids();

/* 读写锁 */

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(">>>>>>>>>>>>>>>>>>>>>>>>RedisCache:id=" + id);

this.id = id;

}

@Override

public void clear() {

redisClient.flushDB();

}

@Override

public String getId() {

return this.id;

}

@Override

public Object getObject(Object key) {

Object value = SerializeUtil.unserialize(redisClient.get(SerializeUtil.serialize(key.toString())));

logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>getObject:" + key + " value=" + value);

return value;

}

@Override

public ReadWriteLock getReadWriteLock() {

return readWriteLock;

}

@Override

public int getSize() {

return Integer.valueOf(redisClient.dbSize().toString());

}

@Override

public void putObject(Object key, Object value) {

logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>putObject:" + key + " value=" + value);

redisClient.set(SerializeUtil.serialize(key.toString()), SerializeUtil.serialize(value));

}

@Override

public Object removeObject(Object key) {

return redisClient.expire(SerializeUtil.serialize(key.toString()), 0);

}

protected static Jedis createReids() {

JedisPool pool = new JedisPool(new JedisPoolConfig(), "127.0.0.1");

Jedis result = pool.getResource();

return result;

}

}

​RedisCache文件结构如下

570ec80c189d941745dad1a3331daa7a.png

​Tool包下的序列化工具SerializeUtil.java

package tool;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

public class SerializeUtil {

public static byte[] serialize(Object object) {

ObjectOutputStream oos = null;

ByteArrayOutputStream baos = null;

try {

// 序列化

baos = new ByteArrayOutputStream();

oos = new ObjectOutputStream(baos);

oos.writeObject(object);

byte[] bytes = baos.toByteArray();

return bytes;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

public static Object unserialize(byte[] bytes) {

ByteArrayInputStream bais = null;

try {

// 反序列化

bais = new ByteArrayInputStream(bytes);

ObjectInputStream ois = new ObjectInputStream(bais);

return ois.readObject();

} catch (Exception e) {

}

return null;

}

}

2、配置Mybatis开启缓存

​配置SqlMapConfig.xml添加一下属性

...

...

...

...

3、在Mapper.xml中使用缓存

​举例,如我使用的TbUserMapperCustom.xml,在其中添加使用缓存

...

...

4、使用效果

9b9bdf517c8f0368cb4623218e469081.png

b52e136283cf2864213328e0376168f9.png

8847a166682cc19b3cbabc3f405d1210.png

4、注意事项

​1、在缓存的过程中,需要把对象序列化转化为字节数组存入,那么需要缓存的Bean类就需要实现Serializable接口。

​2、由于我为了Bean类的扩展性没有直接使用Mybatis逆向工程生成的原始类,而是继承了原TbUser,使用TbUserCustom,如果仅仅是TbUserCustom实现了Serializable接口而父类没有实现Serializable接口的话,在序列化、反序列化的过程中将无法对数据进行正确的读写,读出来的对象将为空,所以如果要传输的数据有父类的话,那么父类也需要实现Serializable接口。

​3、在使用前你肯定需要打开Redis服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值