spring+mybatis+redis整合.docx

上传人:b****6 文档编号:5987954 上传时间:2023-01-02 格式:DOCX 页数:32 大小:26.63KB
下载 相关 举报
spring+mybatis+redis整合.docx_第1页
第1页 / 共32页
spring+mybatis+redis整合.docx_第2页
第2页 / 共32页
spring+mybatis+redis整合.docx_第3页
第3页 / 共32页
spring+mybatis+redis整合.docx_第4页
第4页 / 共32页
spring+mybatis+redis整合.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

spring+mybatis+redis整合.docx

《spring+mybatis+redis整合.docx》由会员分享,可在线阅读,更多相关《spring+mybatis+redis整合.docx(32页珍藏版)》请在冰豆网上搜索。

spring+mybatis+redis整合.docx

spring+mybatis+redis整合

redismybatisspring整合

来源:

jinkun520 阅读:

154 时间:

2016-06-3011:

18

分享:

0

最近想在框架里面加入redis,替换原因呢其实也没有,就是单纯的想替换掉

---维基百科:

redis介绍

一般开发中用户状态使用session或者cookie,两种方式各种利弊。

Session:

在InProc模式下容易丢失,并且引起并发问题。

如果使用SQLServer或者SQLServer模式又消耗了性能

Cookie则容易将一些用户信息暴露,加解密同样也消耗了性能。

Redis采用这样的方案解决了几个问题,

1.Redis存取速度快。

2.用户数据不容易丢失。

3.用户多的情况下容易支持集群。

4.能够查看在线用户。

5.能够实现用户一处登录。

(通过代码实现,后续介绍)

6.支持持久化。

(当然可能没什么用)

 

然后研究了2天怎么去整合springmybatis和redis...

 

新创建一个redis工具类

packagemon.utils.redis;

importjava.util.HashSet;

importjava.util.Map;

importjava.util.Set;

importorg.apache.log4j.Logger;

importredis.clients.jedis.Jedis;

importredis.clients.jedis.JedisPool;

importredis.clients.jedis.JedisPoolConfig;

/**

*

*@ClassNameRedisUtils

*@DescriptionRedis缓存工具类

*@authorK

*@Date2016年6月22日下午6:

08:

52

*@version1.0.0

*/

publicclassRedisUtils{

privatestaticLoggerlogger=Logger.getLogger(RedisUtils.class);

/**默认缓存时间*/

privatestaticfinalintDEFAULT_CACHE_SECONDS=60*60*1;//单位秒设置成一个钟

/**连接池**/

privatestaticJedisPooljedisPool;

static{

if(jedisPool==null){

JedisPoolConfigconfig=newJedisPoolConfig();

//控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;

//如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。

config.setMaxIdle(8);

//控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。

config.setMaxTotal(8);

//表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;

config.setMaxWaitMillis(1000*100);

//在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;

config.setTestOnBorrow(true);

config.setMinEvictableIdleTimeMillis(60000);

config.setTimeBetweenEvictionRunsMillis(30000);

config.setNumTestsPerEvictionRun(-1);

config.setMinIdle(0);

jedisPool=newJedisPool(config,"192.168.11.247",6379);

}

}

/**

*释放redis资源

*

*@paramjedis

*/

privatestaticvoidreleaseResource(Jedisjedis){

if(jedis!

=null){

jedisPool.returnResource(jedis);

}

}

/**

*删除Redis中的所有key

*

*@paramjedis

*@throwsException

*/

publicstaticvoidflushAll(){

Jedisjedis=null;

try{

jedis=jedisPool.getResource();

jedis.flushAll();

}catch(Exceptione){

logger.error("Cache清空失败:

"+e);

}finally{

releaseResource(jedis);

}

}

/**

*保存一个对象到Redis中(缓存过期时间:

使用此工具类中的默认时间).

*

*@paramkey

*键.

*@paramobject

*缓存对象.

*@returntrueorfalse.

*@throwsException

*/

publicstaticBooleansave(Objectkey,Objectobject){

returnsave(key,object,DEFAULT_CACHE_SECONDS);

}

/**

*保存一个对象到redis中并指定过期时间

*

*@paramkey

*键.

*@paramobject

*缓存对象.

*@paramseconds

*过期时间(单位为秒).

*@returntrueorfalse.

*/

publicstaticBooleansave(Objectkey,Objectobject,intseconds){

Jedisjedis=null;

try{

jedis=jedisPool.getResource();

jedis.set(SerializeUtils.serialize(key),SerializeUtils.serialize(object));

jedis.expire(SerializeUtils.serialize(key),seconds);

returntrue;

}catch(Exceptione){

logger.error("Cache保存失败:

"+e);

returnfalse;

}finally{

releaseResource(jedis);

}

}

/**

*根据缓存键获取Redis缓存中的值.

*

*@paramkey

*键.

*@returnObject.

*@throwsException

*/

publicstaticObjectget(Objectkey){

Jedisjedis=null;

try{

jedis=jedisPool.getResource();

byte[]obj=jedis.get(SerializeUtils.serialize(key));

returnobj==null?

null:

SerializeUtils.unSerialize(obj);

}catch(Exceptione){

logger.error("Cache获取失败:

"+e);

returnnull;

}finally{

releaseResource(jedis);

}

}

/**

*根据缓存键清除Redis缓存中的值.

*

*@paramkey

*@return

*@throwsException

*/

publicstaticBooleandel(Objectkey){

Jedisjedis=null;

try{

jedis=jedisPool.getResource();

jedis.del(SerializeUtils.serialize(key));

returntrue;

}catch(Exceptione){

logger.error("Cache删除失败:

"+e);

returnfalse;

}finally{

releaseResource(jedis);

}

}

/**

*根据缓存键清除Redis缓存中的值.

*

*@paramkeys

*@return

*@throwsException

*/

publicstaticBooleandel(Object...keys){

Jedisjedis=null;

try{

jedis=jedisPool.getResource();

jedis.del(SerializeUtils.serialize(keys));

returntrue;

}catch(Exceptione){

logger.error("Cache删除失败:

"+e);

returnfalse;

}finally{

releaseResource(jedis);

}

}

/**

*

*@paramkey

*@paramseconds

*超时时间(单位为秒)

*@return

*/

publicstaticBooleanexpire(Objectkey,intseconds){

Jedisjedis=null;

try{

jedis=jedisPool.getResource();

jedis.expire(SerializeUtils.serialize(key),seconds);

returntrue;

}catch(Exceptione){

logger.error("Cache设置超时时间失败:

"+e);

returnfalse;

}finally{

releaseResource(jedis);

}

}

/**

*添加一个内容到指定key的hash中

*

*@paramkey

*@paramfield

*@paramvalue

*@return

*/

publicstaticBooleanaddHash(Stringkey,Objectfield,Objectvalue){

Jedisjedis=null;

try{

jedis=jedisPool.getResource();

jedis.hset(SerializeUtils.serialize(key),SerializeUtils.serialize(field),SerializeUtils.serialize(value));

returntrue;

}catch(Exceptione){

logger.error("Cache保存失败:

"+e);

returnfalse;

}finally{

releaseResource(jedis);

}

}

/**

*从指定hash中拿一个对象

*

*@paramkey

*@paramfield

*@return

*/

publicstaticObjectgetHash(Objectkey,Objectfield){

Jedisjedis=null;

try{

jedis=jedisPool.getResource();

byte[]obj=jedis.hget(SerializeUtils.serialize(key),SerializeUtils.serialize(field));

returnSerializeUtils.unSerialize(obj);

}catch(Exceptione){

logger.error("Cache读取失败:

"+e);

returnnull;

}finally{

releaseResource(jedis);

}

}

/**

*从hash中删除指定filed的值

*

*@paramkey

*@paramfield

*@return

*/

publicstaticBooleandelHash(Objectkey,Objectfield){

Jedisjedis=null;

try{

jedis=jedisPool.getResource();

longresult=jedis.hdel(SerializeUtils.serialize(key),SerializeUtils.serialize(field));

returnresult==1?

true:

false;

}catch(Exceptione){

logger.error("Cache删除失败:

"+e);

returnnull;

}finally{

releaseResource(jedis);

}

}

/**

*拿到缓存中所有符合pattern的key

*

*@parampattern

*@return

*/

publicstaticSetkeys(Stringpattern){

Jedisjedis=null;

try{

jedis=jedisPool.getResource();

SetallKey=jedis.keys(("*"+pattern+"*").getBytes());

returnallKey;

}catch(Exceptione){

logger.error("Cache获取失败:

"+e);

returnnewHashSet();

}finally{

releaseResource(jedis);

}

}

/**

*获得hash中的所有keyvalue

*

*@paramkey

*@return

*/

publicstaticMapgetAllHash(Objectkey){

Jedisjedis=null;

try{

jedis=jedisPool.getResource();

Mapmap=jedis.hgetAll(SerializeUtils.serialize(key));

returnmap;

}catch(Exceptione){

logger.error("Cache获取失败:

"+e);

returnnull;

}finally{

releaseResource(jedis);

}

}

/**

*判断一个key是否存在

*

*@paramkey

*@return

*/

publicstaticBooleanexists(Objectkey){

Jedisjedis=null;

Booleanresult=false;

try{

jedis=jedisPool.getResource();

result=jedis.exists(SerializeUtils.serialize(key));

returnresult;

}catch(Exceptione){

logger.error("Cache获取失败:

"+e);

returnfalse;

}finally{

releaseResource(jedis);

}

}

publicvoidsetjedisPool(JedisPooljedisPool){

RedisUtils.jedisPool=jedisPool;

}

publicstaticJedisPoolgetjedisPool(){

returnjedisPool;

}

}

创建一个序列化工具类

packagemon.utils.redis;

importjava.io.ByteArrayInputStream;

importjava.io.ByteArrayOutputStream;

importjava.io.ObjectInputStream;

importjava.io.ObjectOutputStream;

importorg.apache.log4j.Logger;

/**

*

*@ClassNameSerializeUtils

*@Description序列化工具

*@authorK

*@Date2016年6月24日上午9:

44:

38

*@version1.0.0

*/

publicclassSerializeUtils{

privatestaticLoggerlogger=Logger.getLogger(SerializeUtils.class);

/**

*

*@Description序列化

*@paramobject

*@return

*@throwsException

*/

publicstaticbyte[]serialize(Objectobject)throwsException{

if(object==null)returnnull;

ObjectOutputStreamoos=null;

ByteArrayOutputStreambaos=null;

try{

//序列化

baos=newByteArrayOutputStream();

oos=newObjectOutputStream(baos);

oos.writeObject(object);

byte[]bytes=baos.toByteArray();

returnbytes;

}catch(Exceptione){

logger.error(e);

throwe;

}

}

/**

*

*@Description反序列化

*@parambytes

*@return

*@throwsException

*/

publicstaticObjectunSerialize(byte[]bytes)throwsException{

if(bytes==null)returnnull;

ByteArrayInputStreambais=null;

try{

//反序列化

bais=newByteArrayInputStream(bytes);

ObjectInputStreamois=newObjectInputStream(bais);

returnois.readObject();

}catch(Exceptione){

logger.error(e);

throwe;

}

}

}

redis管理

packagemon.utils.redis.springImpl;

importjava.util.Collection;

importorg.springframework.cache.Cache;

importorg.springframework.cache.support.AbstractCacheManager;

/**

*

*@ClassNameCacheManager

*@Description继承了spring的AbstractCacheManager管理RedisCache类缓存管理

*@authorK

*@Date2016年6月27日下午1:

55:

49

*@version1.0.0

*@param

*/

publicclassCacheManagerextendsAbstractCacheManager{

privateCollection

extendsRedisCache>caches;

publicvoidsetCaches(Collection

extendsRedisCache>caches){

this.caches=caches;

}

@Override

protectedCollection

extendsCache>loadCaches(){

returnthis.caches;

}

}

继承spri

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1