CacheCloud CacheCloud提供一個Redis雲管理平臺:實現多種類型(Redis Standalone、Redis Sentinel、Redis Cluster)自動部署、解決Redis實例碎片化現象、提供完善統計、監控、運維功能、減小運維成本和誤操做,提升機器的利用率,提供靈活的伸縮性,提供方便的接入客戶端。
項目主頁: https://github.com/sohutv/cachecloudjava
/** * 根據緩存策略的不一樣,RedisConnectionFactory不一樣 * 示例是單機模式。 * * @return */ @Bean public RedisConnectionFactory redisConnectionFactory() { while (true) { try { LOCK.tryLock(100, TimeUnit.MILLISECONDS); /** * 心跳返回的請求爲空; */ String response = HttpUtils.doGet("http://localhost:5005/cache/client/redis/standalone/10000.json?clientVersion=1.0-SNAPSHOT"); if (response == null || response.isEmpty()) { continue; } JSONObject jsonObject = null; try { jsonObject = JSONObject.parseObject(response); } catch (Exception e) { } if (jsonObject == null) { continue; } /** * 從心跳中提取HostAndPort,構造JedisPool實例; */ String instance = jsonObject.getString("standalone"); String[] instanceArr = instance.split(":"); if (instanceArr.length != 2) { continue; } //收集上報數據 ClientDataCollectReportExecutor.getInstance("http://localhost:5005/cachecloud/client/reportData.json"); String password = jsonObject.getString("password"); String host = instanceArr[0]; String port = instanceArr[1]; JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(); jedisConnectionFactory.setPassword(password); jedisConnectionFactory.setHostName(host); jedisConnectionFactory.setPort(Integer.parseInt(port)); return jedisConnectionFactory; } catch (InterruptedException e) { logger.error("error in build().", e); } } }
/** * 命令捕獲,異常保存 * @param cmd * @param args */ public void sendCommand(final ProtocolCommand cmd, final byte[]... args) { try { //統計開始 UsefulDataModel costModel = UsefulDataModel.getCostModel(threadLocal); costModel.setCommand(cmd.toString().toLowerCase()); costModel.setStartTime(System.currentTimeMillis()); connect(); Protocol.sendCommand(outputStream, cmd, args); } catch (JedisConnectionException ex) { UsefulDataCollector.collectException(ex, getHostPort(), System.currentTimeMillis()); broken = true; throw ex; } }
private T runWithRetries(byte[] key, int attempts, boolean tryRandomNode, boolean asking) { if (attempts <= 0) { JedisClusterMaxRedirectionsException exception = new JedisClusterMaxRedirectionsException("Too many Cluster redirections? key=" + SafeEncoder.encode(key)); //收集 UsefulDataCollector.collectException(exception, "", System.currentTimeMillis(), ClientExceptionType.REDIS_CLUSTER); throw exception; } }
<!--Redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <exclusions> <exclusion> <artifactId>jedis</artifactId> <groupId>redis.clients</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.sohu.tv</groupId> <artifactId>cachecloud-open-client-redis</artifactId> <version>1.0-SNAPSHOT</version> <exclusions> <exclusion> <artifactId>jedis</artifactId> <groupId>redis.clients</groupId> </exclusion> </exclusions> </dependency> <!--上步改造後編譯的jar--> <dependency> <groupId>com.github.pig</groupId> <artifactId>pig-cache-cloud-jedis</artifactId> <version>2.9.1</version> </dependency>
這一步直接參考 cachecloud 的文檔便可git