import java.util.HashSet; import java.util.Set; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.ibatis.cache.Cache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import redis.clients.jedis.BinaryJedisCluster; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisPoolConfig; /** * mybatis整合redis-cluster * @author zaqzaq * 2015年2月5日 * */ public class MybatisRedisCache implements Cache { private static Logger logger = LoggerFactory.getLogger(MybatisRedisCache.class); private static BinaryJedisCluster redisClient=createReids(); /** The ReadWriteLock. */ private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); private String id; private Set<String> keys=new HashSet<String>(); public MybatisRedisCache(final String id) { if (id == null) { throw new IllegalArgumentException("Cache instances require an ID"); } logger.debug("redis>>>>MybatisRedisCache:id="+id); this.id = id; } @Override public String getId() { return this.id; } @Override public int getSize() { //在集群情况下只返回当前主机下的dbsize // int i=Integer.valueOf(redisClient.dbSize().toString()); logger.debug("mybatis cache redis>>>>getSize:"+keys.size()); return keys.size(); } @Override public void putObject(Object key, Object value) { logger.debug("redis>>>>putObject:"+key+"="+value); redisClient.set(key.toString(), SerializeUtil.serialize(value)); if (!keys.contains(key.toString())){ keys.add(key.toString()); } } @Override public Object getObject(Object key) { Object value = SerializeUtil.unserialize(redisClient.getBytes(key.toString())); logger.debug("redis>>>>getObject:"+key+"="+value); if (!keys.contains(key.toString())){ keys.add(key.toString()); } return value; } @Override public Object removeObject(Object key) { logger.debug("redis>>>>removeObject:"+key); keys.remove(key.toString()); return redisClient.expire(key.toString(),0); } @Override public void clear() { logger.debug("redis>>>>clearObject:"+id); //清除namespace下的所有缓存 for(String key:keys){ redisClient.expire(key.toString(),0); } keys.clear(); //禁止使用 redisClient.flushDB(); } @Override public ReadWriteLock getReadWriteLock() { return readWriteLock; } protected static BinaryJedisCluster createReids(){ // JedisPoolConfig config = new JedisPoolConfig(); //控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取; //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。 config.setMaxTotal(500); //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。 config.setMaxIdle(5); //表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException; config.setMaxWaitMillis(1000 * 100); //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; config.setTestOnBorrow(true); int time_out=12*1000; Set<HostAndPort> hostAndPorts=new HashSet<HostAndPort>(); hostAndPorts.add(new HostAndPort("zaqzaq1", 6379)); hostAndPorts.add(new HostAndPort("zaqzaq2", 6379)); hostAndPorts.add(new HostAndPort("zaqzaq3", 6379)); return new BinaryJedisCluster(hostAndPorts,time_out,config); } }
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; } }
<settings> <!-- 这个配置使全局的映射器启用或禁用缓存 --> <setting name="cacheEnabled" value="true" /> <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 --> <setting name="multipleResultSetsEnabled" value="true"/> <!-- 配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新 --> <setting name="defaultExecutorType" value="REUSE" /> <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 --> <setting name="lazyLoadingEnabled" value="false" /> <setting name="aggressiveLazyLoading" value="true" /> <!-- <setting name="enhancementEnabled" value="true"/> --> <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间。 --> <setting name="defaultStatementTimeout" value="25000" /> </settings>
<!-- 缓存 --> <cache eviction="LRU" type="com.cloud.core.cache.MybatisRedisCache" readOnly="false" /> sql语句上特殊配置的属性有useCache,flushCache
我的jedis地址: https://github.com/zaqzaq/jedis
相关推荐
springMVC redis-cluster redis 集群 整合实力,采用的是redis自带的cluster 集群方案,
windows一键Redis-Cluster集群工具(32位Redis-v3.0.504),资源包括:ruby安装包,rubygem,32位Redis-v3.0.504,一键Redis-Cluster集群工具等,64位请自行替换相关资源包即可,相关文章见:...
redis集群配置文件 redis-cluster
redis-cluster-tool 是一个非常便利的 Redis 集群管理工具。help Usage: redis-cluster-tool [-?hVds] [-v verbosity level] [-o output file] [-c conf file] [-a addr] [-i interval] [-p pid file] [-C ...
redis-cluster 组件脚本
redis-cluster在centos7.4上面集群部署,详细的操作步骤。
redis-cluster集群搭建方式,里面包含了需要的插件,搭建步骤也非常详细............................
tomcat9负载均衡tomcat-cluster-redis-session-manager_4.0
redis-go-cluster, 在Go中,redis集群客户端实现 redis-go-clusterredis-go-cluster是基于 burd burd burd的客户端的一个golang实现的。 它在本地缓存 slot 信息,并在集群更改时自动更新。 客户端管理每个 node的...
window 环境安装配置 redis-cluster 所需工具包 因为有些资源下载较慢,可直接下载配置, 快速搭建, 仅支持64位
nginx+ tomcat + redis-cluster 实现session同步所需的jar包
python连接redis集群
redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-...
redis-5.0.14/src/redis-cli --cluster create 192.168.129.98:7000 192.168.129.99:7003 192.168.129.99:7002 192.168.129.126:7005 192.168.129.126:7004 192.168.129.98:7001 --cluster-replicas
资源来自pypi官网。 资源全名:redis-py-cluster-1.1.0.tar.gz
Docker-compose.yml:redis-cluster集群redis节点初始化文件 Dockerfile:集群节点redis镜像创建文件 Entrypoint.sh:redis镜像创建脚本文件 Redis.conf:redis客户端 Redis-trib-latest.tar.gz:redis-cluster管理...
3、./redis-cluster-start-all.sh 开启reids 4、执行 ./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 5、验证集群已经启动 ps -...
docker-redis-cluster Redis 集群 Docker 映像。 此图像用于测试环境。 请勿将其用于生产。用法启动集群。 它将启动 6 个 Redis 服务器,监听7000~7005端口和一个主管以确保所有服务器都启动。 在所有服务器启动后,...
redis-5.0.14-1.el7.remi.x86_64.rpm安装包(含有部署手册) redis-5.0.14-1.el7.remi.x86_64.rpm安装包(含有部署手册) redis-5.0.14-1.el7.remi.x86_64.rpm安装包(含有部署手册) redis-5.0.14-1.el7.remi.x86_64.rpm...
shiro-redis-cluster spring mvc shiro redis