spring+mybatis+redis整合Word文档格式.docx
《spring+mybatis+redis整合Word文档格式.docx》由会员分享,可在线阅读,更多相关《spring+mybatis+redis整合Word文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
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
*@throwsException
publicstaticvoidflushAll(){
Jedisjedis=null;
try{
jedis=jedisPool.getResource();
jedis.flushAll();
}catch(Exceptione){
logger.error("
Cache清空失败:
"
+e);
}finally{
releaseResource(jedis);
*保存一个对象到Redis中(缓存过期时间:
使用此工具类中的默认时间).<
br/>
*@paramkey
*键.<
*@paramobject
*缓存对象.<
*@returntrueorfalse.<
publicstaticBooleansave(Objectkey,Objectobject){
returnsave(key,object,DEFAULT_CACHE_SECONDS);
*保存一个对象到redis中并指定过期时间
*@paramseconds
*过期时间(单位为秒).<
*@returntrueorfalse.
publicstaticBooleansave(Objectkey,Objectobject,intseconds){
jedis.set(SerializeUtils.serialize(key),SerializeUtils.serialize(object));
jedis.expire(SerializeUtils.serialize(key),seconds);
returntrue;
Cache保存失败:
returnfalse;
*根据缓存键获取Redis缓存中的值.<
*键.<
*@returnObject.<
publicstaticObjectget(Objectkey){
byte[]obj=jedis.get(SerializeUtils.serialize(key));
returnobj==null?
null:
SerializeUtils.unSerialize(obj);
Cache获取失败:
returnnull;
*根据缓存键清除Redis缓存中的值.<
*@return
publicstaticBooleandel(Objectkey){
jedis.del(SerializeUtils.serialize(key));
Cache删除失败:
*@paramkeys
publicstaticBooleandel(Object...keys){
jedis.del(SerializeUtils.serialize(keys));
*超时时间(单位为秒)
publicstaticBooleanexpire(Objectkey,intseconds){
Cache设置超时时间失败:
*添加一个内容到指定key的hash中
*@paramfield
*@paramvalue
publicstaticBooleanaddHash(Stringkey,Objectfield,Objectvalue){
jedis.hset(SerializeUtils.serialize(key),SerializeUtils.serialize(field),SerializeUtils.serialize(value));
*从指定hash中拿一个对象
publicstaticObjectgetHash(Objectkey,Objectfield){
byte[]obj=jedis.hget(SerializeUtils.serialize(key),SerializeUtils.serialize(field));
returnSerializeUtils.unSerialize(obj);
Cache读取失败:
*从hash中删除指定filed的值
publicstaticBooleandelHash(Objectkey,Objectfield){
longresult=jedis.hdel(SerializeUtils.serialize(key),SerializeUtils.serialize(field));
returnresult==1?
true:
false;
*拿到缓存中所有符合pattern的key
*@parampattern
publicstaticSet<
byte[]>
keys(Stringpattern){
Set<
allKey=jedis.keys(("
*"
+pattern+"
).getBytes());
returnallKey;
returnnewHashSet<
();
*获得hash中的所有keyvalue
publicstaticMap<
byte[],byte[]>
getAllHash(Objectkey){
Map<
map=jedis.hgetAll(SerializeUtils.serialize(key));
returnmap;
*判断一个key是否存在
publicstaticBooleanexists(Objectkey){
Booleanresult=false;
result=jedis.exists(SerializeUtils.serialize(key));
returnresult;
publicvoidsetjedisPool(JedisPooljedisPool){
RedisUtils.jedisPool=jedisPool;
publicstaticJedisPoolgetjedisPool(){
returnjedisPool;
}
创建一个序列化工具类
importjava.io.ByteArrayInputStream;
importjava.io.ByteArrayOutputStream;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
*@ClassNameSerializeUtils
*@Description序列化工具
*@Date2016年6月24日上午9:
44:
38
publicclassSerializeUtils{
privatestaticLoggerlogger=Logger.getLogger(SerializeUtils.class);
*@Description序列化
publicstaticbyte[]serialize(Objectobject)throwsException{
if(object==null)returnnull;
ObjectOutputStreamoos=null;
ByteArrayOutputStreambaos=null;
//序列化
baos=newByteArrayOutputStream();
oos=newObjectOutputStream(baos);
oos.writeObject(object);
byte[]bytes=baos.toByteArray();
returnbytes;
logger.error(e);
throwe;
*@Description反序列化
*@parambytes
publicstaticObjectunSerialize(byte[]bytes)throwsException{
if(bytes==null)returnnull;
ByteArrayInputStreambais=null;
//反序列化
bais=newByteArrayInputStream(bytes);
ObjectInputStreamois=newObjectInputStream(bais);
returnois.readObject();
redis管理
packagemon.utils.redis.springImpl;
importjava.util.Collection;
importorg.springframework.cache.Cache;
importorg.springframework.cache.support.AbstractCacheManager;
*@ClassNameCacheManager
*@Description继承了spring的AbstractCacheManager管理RedisCache类缓存管理
*@Date2016年6月27日下午1:
55:
49
*@param<
T>
publicclassCacheManager<
TextendsObject>
extendsAbstractCacheManager{
privateCollection<
?
extendsRedisCache>
caches;
publicvoidsetCaches(Collection<
caches){
this.caches=caches;
@Override
protectedCollection<
extendsCache>
loadCaches(){
returnthis.caches;
继承spri