【Spring Cloud】Redis緩存接入監控、運維平臺CacheCloud

CacheCloud CacheCloud提供一個Redis雲管理平臺:實現多種類型(Redis Standalone、Redis Sentinel、Redis Cluster)自動部署、解決Redis實例碎片化現象、提供完善統計、監控、運維功能、減小運維成本和誤操做,提升機器的利用率,提供靈活的伸縮性,提供方便的接入客戶端。
項目主頁: https://github.com/sohutv/cachecloudjava

image

image

改造RedisConnectionFactory

/**
 * 根據緩存策略的不一樣,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);
        }

    }
}
複製代碼

改造 jedis-2.9.0

Connection.java

/**
 * 命令捕獲,異常保存
 * @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;
    }
}
複製代碼

JedisClusterCommand.java

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;
    }
}
複製代碼

更新spring-boot-starter-data-redis依賴

<!--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>
複製代碼

部署服務war

這一步直接參考 cachecloud 的文檔便可git

總結

  1. 源碼,參考pig: https://gitee.com/log4j/pig
  2. 關於pig, 這是一套微服務應用的實踐基於Spring Cloud、Spring Security Oauth2.0開發企業級認證與受權,提供常見服務監控、鏈路追蹤、日誌分析、緩存管理、任務調度等實現
  3. 改造寫於2017-2018的跨年夜,文章整理與2018.1.1,真慘,不過我喜歡 😊
  4. 2017 失去不少,2018本命年 💪 汪汪汪!
相關文章
相關標籤/搜索