目录


mac-cache - 示例

前往下载 示例下载 | 示例下载 | 依赖JAR包与源码下载

基本示例

  在缓存监控中心配置所有缓存DB及其下分片和节点的信息 <!-- Redis缓存节点 --> <bean id="redis1n" class="com.boarsoft.cache.redis.MyJedisShardInfo"> <constructor-arg index="0" type="java.lang.String" value="redis.dev" /> <constructor-arg index="1" type="int" value="6379" /> </bean> <bean id="redis2n" class="com.boarsoft.cache.redis.MyJedisShardInfo"> <constructor-arg index="0" type="java.lang.String" value="redis.dev" /> <constructor-arg index="1" type="int" value="6380" /> </bean> <bean id="redis3n" class="com.boarsoft.cache.redis.MyJedisShardInfo"> <constructor-arg index="0" type="java.lang.String" value="redis.dev" /> <constructor-arg index="1" type="int" value="6381" /> </bean> <bean id="redis4n" class="com.boarsoft.cache.redis.MyJedisShardInfo"> <constructor-arg index="0" type="java.lang.String" value="redis.dev" /> <constructor-arg index="1" type="int" value="6382" /> </bean> <!-- 客户端所需的缓存连接池配置 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="minIdle" value="50" /> <property name="maxIdle" value="100" /> <property name="maxTotal" value="500" /> </bean> <!-- 缓存监控需要通过Agent来执行Shell以操控Redis缓存节点 --> <bean id="redisNodeAgent" class="com.boarsoft.boar.redis.RedisNodeAgentImpl"> <property name="path" value="/home/app/shells/redis" /> </bean> <bean id="cacheMonitor" class="com.boarsoft.cache.monitor.CacheMonitorImpl"> <property name="threadPool" ref="threadPool" /> <!-- 配置缓存各客户端与缓存DB的关系,以便当缓存DB宕机时,通知相应的客户端 --> <property name="cacheClientMap"> <map> <entry key="userDb"> <set> <ref bean="cacheClient" /> </set> </entry> </map> </property> <!-- 所有的缓存DB配置,缓存客户端依赖在启动时会通过RPC远程获取它需要的缓存DB配置 --> <property name="dbMap"> <map> <entry key="userDb"> <bean class="com.boarsoft.cache.redis.MyJedisDb"> <property name="shards"> <list> <bean class="com.boarsoft.cache.redis.MyJedisShard"> <!-- 0: COLD, 1: WARM, 2: SLAVE --> <property name="standby" value="2" /> <property name="master"> <bean class="com.boarsoft.cache.redis.MyJedisNode" init-method="open"> <property name="jedisPoolConfig" ref="jedisPoolConfig" /> <property name="code" value="userDb_0_0" /> <property name="jedisShardInfo" ref="redis1n" /> </bean> </property> <property name="backups"> <list> <bean class="com.boarsoft.cache.redis.MyJedisNode"> <property name="jedisPoolConfig" ref="jedisPoolConfig" /> <property name="code" value="userDb_0_1" /> <property name="jedisShardInfo" ref="redis3n" /> </bean> </list> </property> </bean> <bean class="com.boarsoft.cache.redis.MyJedisShard"> <!-- 0: COLD, 1: WARM, 2: SLAVE --> <property name="standby" value="2" /> <property name="master"> <bean class="com.boarsoft.cache.redis.MyJedisNode" init-method="open"> <property name="jedisPoolConfig" ref="jedisPoolConfig" /> <property name="code" value="userDb_1_0" /> <property name="jedisShardInfo" ref="redis2n" /> </bean> </property> <property name="backups"> <list> <bean class="com.boarsoft.cache.redis.MyJedisNode"> <property name="jedisPoolConfig" ref="jedisPoolConfig" /> <property name="code" value="userDb_1_1" /> <property name="jedisShardInfo" ref="redis4n" /> </bean> </list> </property> </bean> </list> </property> </bean> </entry> </map> </property> </bean>   在客户端应用的 caches.xml 中配置需要的缓存DB <bean id="redisClient" class="com.boarsoft.cache.redis.SimpleRedisClientImpl"> <property name="mapping"> <bean init-method="init" class="com.boarsoft.cache.config.CacheMapping"> <property name="defaultDbName" value="userDb" /> <property name="groupMap"> <map> <entry key="default" value="userDb" /> </map> </property> </bean> </property> <property name="dbMap"> <map> <entry key="userDb"> <bean class="com.boarsoft.cache.redis.MyJedisDb"> </bean> </entry> </map> </property> </bean> <bean id="redisCache" class="com.boarsoft.cache.redis.SimpleRedisCacheImpl"> <property name="redisClient" ref="redisClient" /> </bean>   读写测试代码 final ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:conf/context.xml"); Cache cache = (Cache) ctx.getBean("redisCache"); // 清空缓存 cache.clearAll(); // 将字符串“v1”放到conf组的k1键上 cache.put("conf", "k1", "v1"); cache.put("conf", "k2", "v2"); // 将对象u放到conf组的u1键上 User u = new User(); u.setAge(38); u.setName("Mac_J"); cache.put("conf", "u1", u); // 读取conf下的k1 String v1 = (String) cache.get("conf", "k1"); log.info("conf.k1={}", v1); // 读取conf下的u1 User u1 = (User) cache.get("conf", "u1"); log.info("conf.u1={}", u1);

shell脚本

  通常,为提高可靠性,缓存监控不应与缓存节点在同一个服务器上。当缓存节点可用时,可以通过redis-cli对缓存节点发送命令。
  可以在缓存监控服务器上安装redis,以使用这的redis-cli命令,也可以通过ssh命令远程执行该缓存服务器上的redis-cli。
  toMaster.sh ssh redis@$1 "~/redis-3.2.9/src/redis-cli -h $1 -p $2 slaveof NO ONE"   toSlave.sh ssh redis@$1 "~/redis-3.2.9/src/redis-cli -h $1 -p $2 slaveof $3 $4"   startMaster.sh ssh redis@$1 "sh /home/redis/shells/startMaster.sh $2"   startSlave.sh ssh redis@$1 "sh /home/redis/shells/startSlave.sh $2 $3 $4"