redis-cluster整合mybaits

Java代码   收藏代码
  1. import java.util.HashSet;  
  2. import java.util.Set;  
  3. import java.util.concurrent.locks.ReadWriteLock;  
  4. import java.util.concurrent.locks.ReentrantReadWriteLock;  
  5.   
  6. import org.apache.ibatis.cache.Cache;  
  7. import org.slf4j.Logger;  
  8. import org.slf4j.LoggerFactory;  
  9.   
  10. import redis.clients.jedis.BinaryJedisCluster;  
  11. import redis.clients.jedis.HostAndPort;  
  12. import redis.clients.jedis.JedisPoolConfig;  
  13.     
  14. /** 
  15.  * mybatis整合redis-cluster 
  16.  * @author zaqzaq 
  17.  * 2015年2月5日 
  18.  * 
  19.  */  
  20. public class MybatisRedisCache implements Cache {    
  21.         
  22.     private static Logger logger = LoggerFactory.getLogger(MybatisRedisCache.class);    
  23.     private static BinaryJedisCluster redisClient=createReids();    
  24.      /** The ReadWriteLock. */      
  25.     private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();     
  26.         
  27.     private String id;    
  28.       
  29.     private Set<String> keys=new HashSet<String>();  
  30.       
  31.     public MybatisRedisCache(final String id) {      
  32.         if (id == null) {    
  33.             throw new IllegalArgumentException("Cache instances require an ID");    
  34.         }    
  35.         logger.debug("redis>>>>MybatisRedisCache:id="+id);    
  36.         this.id = id;    
  37.     }      
  38.     @Override    
  39.     public String getId() {    
  40.         return this.id;    
  41.     }    
  42.     
  43.     @Override    
  44.     public int getSize() {    
  45.         //在集群情况下只返回当前主机下的dbsize   
  46.         // int i=Integer.valueOf(redisClient.dbSize().toString());  
  47.           
  48.         logger.debug("mybatis cache redis>>>>getSize:"+keys.size());    
  49.         return keys.size();    
  50.     }    
  51.     
  52.     @Override    
  53.     public void putObject(Object key, Object value) {    
  54.         logger.debug("redis>>>>putObject:"+key+"="+value);    
  55.         redisClient.set(key.toString(), SerializeUtil.serialize(value));    
  56.           
  57.         if (!keys.contains(key.toString())){    
  58.             keys.add(key.toString());    
  59.         }    
  60.           
  61.     }    
  62.     
  63.     @Override    
  64.     public Object getObject(Object key) {    
  65.         Object value = SerializeUtil.unserialize(redisClient.getBytes(key.toString()));    
  66.         logger.debug("redis>>>>getObject:"+key+"="+value);    
  67.         if (!keys.contains(key.toString())){    
  68.             keys.add(key.toString());    
  69.         }    
  70.         return value;    
  71.     }    
  72.     
  73.     @Override    
  74.     public Object removeObject(Object key) {    
  75.         logger.debug("redis>>>>removeObject:"+key);    
  76.         keys.remove(key.toString());  
  77.         return redisClient.expire(key.toString(),0);    
  78.     }    
  79.     
  80.     @Override    
  81.     public void clear() {    
  82.         logger.debug("redis>>>>clearObject:"+id);    
  83.         //清除namespace下的所有缓存  
  84.         for(String key:keys){  
  85.             redisClient.expire(key.toString(),0);    
  86.         }  
  87.         keys.clear();  
  88. //禁止使用          redisClient.flushDB();    
  89.     }    
  90.     @Override    
  91.     public ReadWriteLock getReadWriteLock() {    
  92.         return readWriteLock;    
  93.     }    
  94.     protected  static BinaryJedisCluster createReids(){    
  95. //          
  96.         JedisPoolConfig config = new JedisPoolConfig();  
  97.         //控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;  
  98.         //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。  
  99.         config.setMaxTotal(500);  
  100.         //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。  
  101.         config.setMaxIdle(5);  
  102.         //表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;  
  103.         config.setMaxWaitMillis(1000 * 100);  
  104.         //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;  
  105.         config.setTestOnBorrow(true);  
  106.           
  107.         int time_out=12*1000;  
  108.           
  109.         Set<HostAndPort> hostAndPorts=new HashSet<HostAndPort>();  
  110.         hostAndPorts.add(new HostAndPort("zaqzaq1"6379));  
  111.         hostAndPorts.add(new HostAndPort("zaqzaq2"6379));  
  112.         hostAndPorts.add(new HostAndPort("zaqzaq3"6379));  
  113.           
  114.           
  115.        return new BinaryJedisCluster(hostAndPorts,time_out,config);   
  116.     }    
  117. }  

 

Java代码   收藏代码
  1. import java.io.ByteArrayInputStream;  
  2. import java.io.ByteArrayOutputStream;  
  3. import java.io.ObjectInputStream;  
  4. import java.io.ObjectOutputStream;  
  5.   
  6. public class SerializeUtil {  
  7.     public static byte[] serialize(Object object) {  
  8.         ObjectOutputStream oos = null;  
  9.         ByteArrayOutputStream baos = null;  
  10.         try {  
  11.             // 序列化  
  12.             baos = new ByteArrayOutputStream();  
  13.             oos = new ObjectOutputStream(baos);  
  14.             oos.writeObject(object);  
  15.             byte[] bytes = baos.toByteArray();  
  16.             return bytes;  
  17.         } catch (Exception e) {  
  18.             e.printStackTrace();  
  19.         }  
  20.         return null;  
  21.     }  
  22.   
  23.     public static Object unserialize(byte[] bytes) {  
  24.         ByteArrayInputStream bais = null;  
  25.         try {  
  26.             // 反序列化  
  27.             bais = new ByteArrayInputStream(bytes);  
  28.             ObjectInputStream ois = new ObjectInputStream(bais);  
  29.             return ois.readObject();  
  30.         } catch (Exception e) {  
  31.   
  32.         }  
  33.         return null;  
  34.     }  
  35. }  

 

Mybaits配置configuration.xml代码   收藏代码
  1. <settings>  
  2.     <!-- 这个配置使全局的映射器启用或禁用缓存 -->  
  3.     <setting name="cacheEnabled" value="true" />  
  4.     <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->      
  5.     <setting name="multipleResultSetsEnabled" value="true"/>  
  6.     <!-- 配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新 -->  
  7.     <setting name="defaultExecutorType" value="REUSE" />  
  8.     <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->  
  9.     <setting name="lazyLoadingEnabled" value="false" />  
  10.     <setting name="aggressiveLazyLoading" value="true" />  
  11.     <!-- <setting name="enhancementEnabled" value="true"/> -->  
  12.     <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间。 -->  
  13.     <setting name="defaultStatementTimeout" value="25000" />  
  14. </settings>  

 

Java代码   收藏代码
  1.  <!-- 缓存 -->  
  2.     <cache eviction="LRU" type="com.cloud.core.cache.MybatisRedisCache" readOnly="false" />  
  3.   
  4. sql语句上特殊配置的属性有useCache,flushCache  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据中心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值