【Spring Cloud】Redis缓存接入监控、运维平台CacheCloud


声明:本文转载自https://my.oschina.net/giegie/blog/1600383,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

CacheCloud CacheCloud提供一个Redis云管理平台:实现多种类型(Redis Standalone、Redis Sentinel、Redis Cluster)自动部署、解决Redis实例碎片化现象、提供完善统计、监控、运维功能、减少运维成本和误操作,提高机器的利用率,提供灵活的伸缩性,提供方便的接入客户端。
项目主页: https://github.com/sohutv/cachecloud

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 的文档即可

总结

  1. 源码,参考pig: https://gitee.com/log4j/pig
  2. 关于pig, 这是一套微服务应用的实践基于Spring Cloud、Spring Security Oauth2.0开发企业级认证与授权,提供常见服务监控、链路追踪、日志分析、缓存管理、任务调度等实现
  3. 改造写于2017-2018的跨年夜,文章整理与2018.1.1,真惨,不过我喜欢

本文发表于2018年01月02日 12:32
(c)注:本文转载自https://my.oschina.net/giegie/blog/1600383,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2078 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1