文档章节

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

冷冷gg
 冷冷gg
发布于 2018/01/02 10:22
字数 594
阅读 1292
收藏 3

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,真惨,不过我喜欢
  4. 2017 失去很多,2018本命年 汪汪汪!

© 著作权归作者所有

冷冷gg

冷冷gg

粉丝 698
博文 131
码字总数 69020
作品 1
潍坊
UI设计师
私信 提问
加载中

评论(2)

E
EsIstGut
hello<br> there
E
EsIstGut
hello<br> there
Java开发——Redis云管理平台 实现方案CacheCloud 扫盲

本文简述一个redis云平台解决方案,该方案是搜狐TV云平台管理的解决方案CacheCloud ,感兴趣的可以持续关注我的发布。 一、CacheCloud是做什么的 CacheCloud提供一个Redis云管理平台:实现多...

欧阳愠斐
2018/07/25
0
0
cachecloud 使用几个月的情况与坑

前言 单集群redis cluster 转 cachecloud 几个月来,遇到一些情况与问题的总结. 版本问题 mysql 升级到5.7 默认 cachecloud 底层 db mysql 版本为:MySQL 5.5,升级 mysql 到5.7后出现不兼容sql...

super-wen
2018/08/28
981
0
CacheCloud —— 来自搜狐的 Redis 云管理平台

CacheCloud提供一个Redis云管理平台:实现多种类型(Redis Standalone、Redis Sentinel、Redis Cluster)自动部署、解决Redis实例碎片化现象、提供完善统计、监控、运维功能、减少开发人员的运...

oschina
2016/03/18
101
0
CacheCloud bug修复日志

CacheCloud从3月17日正式开源,虽然在我们内部一直运行正常,开源后虽然没有大的问题,但还是遇到很多小问题,比如操作系统兼容性问题,数据库版本问题,一些配置不灵活等等问题。 期间感谢大...

付磊-起扬
2016/04/06
0
0
owenwangwen/open-capacity-platform

open-capacity-platform 微服务能力开发平台 项目简介 1.用户登录 2.用户管理 3.角色管理 4.菜单管理 5.角色菜单管理 6.注册中心 7.配置中心 8.应用列表以及资料列表页面正在开发中,敬请期待...

owenwangwen
2018/04/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Knowage 6.2安装部署

注意:需要正确配置JAVA_HOME和JRE_HOME还有catalina_home,否则启动的时候tomcat一闪而过,想要获得报错信息,可以打开cmd,在dos命令行运行开始命令 官网:https://www.knowage-suite.com/s...

阿伦哥-
10分钟前
4
0
c++11 左值引用和右值引用

#include <iostream>using namespace std;void Print(string& s){ cout << s;}int main(){ string s="abc"; Print(s); // OK Print("abc"); // parse error......

SibylY
11分钟前
3
0
浅谈Facade外观模式

一、前言 外观模式是一种非常简单的模式,简单到我们经常都会使用,比如对于类A和B,如果两者需要交互,经过一定的处理过程才能实现某一个具体的功能,那么我们可以将这个处理的过程定义为一...

青衣霓裳
12分钟前
3
0
AnalyticDB for PostgreSQL 6.0 新特性介绍

阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务ACID。ADB PG通过行存储、列存...

Mr_zebra
14分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部