首页>代码>java缓存工具类,支持主流的缓存memcache redis两种缓存系统>/cache-util/src/main/java/net/easipay/cache/client/manager/CacheClientManager.java
package net.easipay.cache.client.manager; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.whalin.MemCached.MemCachedClient; import com.whalin.MemCached.SockIOPool; import net.easipay.cache.config.CacheConfig; import net.easipay.cache.util.StringUtils; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPool; public class CacheClientManager { Logger logger = LoggerFactory.getLogger(CacheClientManager.class); private static MemCachedClient memCachedClient; private static ShardedJedisPool jedisPool = null; public void initCacheClient(){ int cacheMode=CacheConfig.getCacheMode(); logger.debug("===========cacheMode:"+cacheMode); switch (cacheMode) { case 1: initMemcachedClient(); break; case 2: initRedisClient(); break; default: break; } } /** * 获取Jedis实例 * @return */ public synchronized static ShardedJedis getJedis() { try { if (jedisPool != null) { ShardedJedis resource = jedisPool.getResource(); return resource; } else { return null; } } catch (Exception e) { e.printStackTrace(); return null; } } /** * 获取memcached实例 * @return */ public synchronized static MemCachedClient getMemCachedClient() { if (memCachedClient != null) { return memCachedClient; } else { return null; } } /** * 初始化memcached客户端 */ void initMemcachedClient(){ logger.debug("===========start to intit MemcachedClient,services:"+CacheConfig.getServers()); /************************************配置Memcached**************************************/ SockIOPool sockIOPool = SockIOPool.getInstance(); sockIOPool.setServers(CacheConfig.getServers().split(","));//设置memcached服务器地址 if (StringUtils.isNotBlank(CacheConfig.getWeights())){ String[] Weights=CacheConfig.getWeights().split(","); Integer[] n = new Integer[Weights.length]; for(int i = 0;i<Weights.length;i++){ n[i] = Integer.parseInt(Weights[i]); } sockIOPool.setWeights(n); //设置每个MemCached服务器权重 } sockIOPool.setFailover(CacheConfig.isFailover()); //当一个memcached服务器失效的时候是否去连接另一个memcached服务器. sockIOPool.setInitConn(CacheConfig.getInitConn()); //初始化时对每个服务器建立的连接数目 sockIOPool.setMinConn(CacheConfig.getMinConn()); //每个服务器建立最小的连接数 sockIOPool.setMaxConn(CacheConfig.getMaxConn()); //每个服务器建立最大的连接数 sockIOPool.setMaintSleep(CacheConfig.getMaintSleep()); //自查线程周期进行工作,其每次休眠时间 sockIOPool.setNagle(CacheConfig.isNagle()); //Socket的参数,如果是true在写数据时不缓冲,立即发送出去。Tcp的规则是在发送一个包之前,包的发送方会等待远程接收方确认已收到上一次发送过来的包;这个方法就可以关闭套接字的缓存——包准备立即发出。 //sockIOPool.setSocketTO(3000); //Socket阻塞读取数据的超时时间 sockIOPool.setAliveCheck(CacheConfig.isAliveCheck()); //设置是否检查memcached服务器是否失效 sockIOPool.setMaxIdle(CacheConfig.getMaxIdle()); // 设置最大处理时间 //sockIOPool.setSocketConnectTO(0); //连接建立时对超时的控制 sockIOPool.initialize(); // 初始化连接池 if (memCachedClient == null){ memCachedClient = new MemCachedClient(); } logger.debug("===========MemcachedClient init success================="); } /** * 初始化redis连接池 */ void initRedisClient(){ logger.debug("===========start to init RedisClient,addr=======:"+CacheConfig.getRedisAddr()); try { List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>(); String ADDR = CacheConfig.getRedisAddr(); String[] addrs=ADDR.split(","); for(String addr:addrs){ String[] adds=addr.split(":"); shards.add( new JedisShardInfo(adds[0],Integer.parseInt(adds[1])) ); } int MAX_IDLE=CacheConfig.getRedisMaxIdle(); boolean TEST_ON_BORROW=CacheConfig.isTestOnBorrow(); JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle(MAX_IDLE); //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。 config.setTestOnBorrow(TEST_ON_BORROW);//在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的 jedisPool = new ShardedJedisPool(config, shards); } catch (Exception e) { e.printStackTrace(); } logger.debug("===========init RedisClient success================="); } /** * 设置参数 * @param cacheConfig */ public void setCacheConfig(Map<String, String> cacheConfig){ if (StringUtils.isNotBlank(cacheConfig.get("cacheMode")) &&!StringUtils.equals(cacheConfig.get("cacheMode"),"${easipay.cache.cacheMode}")) { CacheConfig.setCacheMode(Integer.parseInt(cacheConfig.get("cacheMode"))); } if (StringUtils.isNotBlank(cacheConfig.get("servers")) &&!StringUtils.equals(cacheConfig.get("servers"),"${easipay.memcached.servers}")) { CacheConfig.setServers(cacheConfig.get("servers")); } if (StringUtils.isNotBlank(cacheConfig.get("weights")) &&!StringUtils.equals(cacheConfig.get("weights"),"${easipay.memcached.weights}")) { CacheConfig.setWeights(cacheConfig.get("weights")); } if (StringUtils.isNotBlank(cacheConfig.get("initConn")) &&!StringUtils.equals(cacheConfig.get("initConn"),"${easipay.memcached.initConn}")) { CacheConfig.setInitConn(Integer.parseInt(cacheConfig.get("initConn"))); } if (StringUtils.isNotBlank(cacheConfig.get("minConn")) &&!StringUtils.equals(cacheConfig.get("minConn"),"${easipay.memcached.minConn}")) { CacheConfig.setMinConn(Integer.parseInt(cacheConfig.get("minConn"))); } if (StringUtils.isNotBlank(cacheConfig.get("maxConn")) &&!StringUtils.equals(cacheConfig.get("maxConn"),"${easipay.memcached.maxConn}")) { CacheConfig.setMaxConn(Integer.parseInt(cacheConfig.get("maxConn"))); } if (StringUtils.isNotBlank(cacheConfig.get("maintSleep")) &&!StringUtils.equals(cacheConfig.get("maintSleep"),"${easipay.memcached.maintSleep}")) { CacheConfig.setMaintSleep(Integer.parseInt(cacheConfig.get("maintSleep"))); } if (StringUtils.isNotBlank(cacheConfig.get("aliveCheck")) &&!StringUtils.equals(cacheConfig.get("aliveCheck"),"${easipay.memcached.aliveCheck}")) { CacheConfig.setAliveCheck(new Boolean(cacheConfig.get("aliveCheck"))); } //redis if (StringUtils.isNotBlank(cacheConfig.get("redisAddr")) &&!StringUtils.equals(cacheConfig.get("redisAddr"),"${easipay.redis.redisAddr}")) { CacheConfig.setRedisAddr(cacheConfig.get("redisAddr")); } if (StringUtils.isNotBlank(cacheConfig.get("redisMaxIdle")) &&!StringUtils.equals(cacheConfig.get("redisMaxIdle"),"${easipay.redis.redisMaxIdle}")) { CacheConfig.setRedisMaxIdle(Integer.parseInt(cacheConfig.get("redisMaxIdle"))); } if (StringUtils.isNotBlank(cacheConfig.get("testOnBorrow")) &&!StringUtils.equals(cacheConfig.get("redisAddr"),"${easipay.redis.testOnBorrow}")) { CacheConfig.setTestOnBorrow(new Boolean(cacheConfig.get("testOnBorrow"))); } } }
最近下载更多
weixiao LV6
2020年5月18日
tangzhengqi LV8
2019年12月31日
lironggang LV38
2019年7月17日
lanjf2000 LV1
2019年5月20日
王晓波 LV16
2018年11月25日
wangfengnan LV6
2018年9月3日
xshxxm1 LV21
2018年7月21日
最代码官方 LV168
2018年6月30日
最近浏览更多
微信网友_6489792788402176
2023年5月24日
暂无贡献等级
小白queen LV1
2022年12月22日
tianli3000 LV8
2022年6月13日
落后就要挨打 LV26
2021年6月16日
是pangpang呀 LV6
2021年5月21日
耀眼的星星 LV3
2021年4月17日
Killah LV9
2021年4月16日
a992013093 LV15
2021年3月2日
youzichao
2021年2月1日
暂无贡献等级
lilei123456
2021年1月7日
暂无贡献等级