spring+mybatis+redis整合.docx
- 文档编号:5987954
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:32
- 大小:26.63KB
spring+mybatis+redis整合.docx
《spring+mybatis+redis整合.docx》由会员分享,可在线阅读,更多相关《spring+mybatis+redis整合.docx(32页珍藏版)》请在冰豆网上搜索。
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
*/
publicstaticSet
Jedisjedis=null;
try{
jedis=jedisPool.getResource();
Set
returnallKey;
}catch(Exceptione){
logger.error("Cache获取失败:
"+e);
returnnewHashSet
}finally{
releaseResource(jedis);
}
}
/**
*获得hash中的所有keyvalue
*
*@paramkey
*@return
*/
publicstaticMap
Jedisjedis=null;
try{
jedis=jedisPool.getResource();
Map
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
*/
publicclassCacheManager
privateCollection
extendsRedisCache>caches;
publicvoidsetCaches(Collection
extendsRedisCache>caches){
this.caches=caches;
}
@Override
protectedCollection
extendsCache>loadCaches(){
returnthis.caches;
}
}
继承spri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- spring mybatis redis 整合