Redis系列之CacheCloud简介

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 Redis系列之CacheCloud简介,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

概述

CacheCloud,最早知道这个组件,是在《Redis开发与运维》这本书里面看到的。
GitHub,搜狐开源的一套Redis集群管理、可视化平台;
GitHub-README
GitHub-wiki
除了GitHub站点的文档,还有停更的官方GitPage

安装

问题

appId合法性校验

背景:在我们团队维护的一个数据产品中,有个数据同步功能,如支持MySQL数据同步到Redis。然后我们的Redis集群使用的是开源的CacheCloud,不同的研发团队或部门被分配有一个全局唯一的appId。此appId即代表数据同步的源头或者目标。大致如此。

需求:校验用户输入的appId是一个合法的CacheCloud appId,否则数据同步从何谈起?

import com.ppdai.cachecloud.builder.ClientBuilder;
import com.ppdai.cachecloud.redis.clients.jedis.JedisCluster;

@Slf4j
@ProviderName(name = "redis")
public class RedisDataProvider extends DataProvider {
	@Override
	public void check() throws Exception {
	    getConnection();
	}
	
	private JedisCluster getConnection() {
	    long appId = Long.parseLong(dataSource.get("appId"));
	    return ClientBuilder.redisCluster(appId)
	            .setJedisPoolConfig(getPoolConfig())
	            .setConnectionTimeout(2000)
	            .setSoTimeout(1000)
	            .build();
	}
}

maven依赖(经过我们公司二次开发修改groupId)为:

<dependency>
    <groupId>com.ppdai.cachecloud</groupId>
    <artifactId>cachecloud-jedis</artifactId>
    <version>2.2.0</version>
</dependency>
<dependency>
    <groupId>com.ppdai.cachecloud</groupId>
    <artifactId>cachecloud-open-client-redis</artifactId>
    <version>2.1.1</version>
</dependency>

上面的代码在appId合法时,没有任何问题。但是输入非法的appId时,报错一直停留在.build();这一行,且是无限次的循环重试:

2021-11-19 11:46:26.806 [ERROR][http-nio-8080-exec-2]:com.ppdai.cachecloud.builder.RedisClusterBuilder [load:198] remote build error, appId: 123122
com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to map due to end-of-input
 at [Source: (String)""; line: 1, column: 0]
	at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
	at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4666)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4511)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3466)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3434)
	at com.ppdai.cachecloud.builder.RedisClusterBuilder.load(RedisClusterBuilder.java:196)
	at com.ppdai.cachecloud.builder.RedisClusterBuilder.build(RedisClusterBuilder.java:123)
	at com.xy.cloudiview.common.dataprovider.impl.RedisDataProvider.getConnection(RedisDataProvider.java:43)
	at com.xy.cloudiview.common.dataprovider.impl.RedisDataProvider.check(RedisDataProvider.java:33)
	at com.xy.cloudiview.common.services.DataProviderService.testConnection(DataProviderService.java:102)
	at com.xy.cloudiview.web.controller.datasource.DataSourceController.checkDatasource(DataSourceController.java:248)
2021-11-19 11:46:26.807 [ERROR][http-nio-8080-exec-2]:com.ppdai.cachecloud.builder.RedisClusterBuilder [build:130] [status code: 404] jedis node 信息找不到
com.ctrip.framework.apollo.exceptions.ApolloConfigStatusCodeException: [status code: 404] jedis node 信息找不到
	at com.ppdai.cachecloud.builder.RedisClusterBuilder.build(RedisClusterBuilder.java:124)
	at com.xy.cloudiview.common.dataprovider.impl.RedisDataProvider.getConnection(RedisDataProvider.java:43)
	at com.xy.cloudiview.common.dataprovider.impl.RedisDataProvider.check(RedisDataProvider.java:33)
	at com.xy.cloudiview.common.services.DataProviderService.testConnection(DataProviderService.java:102)
	at com.xy.cloudiview.web.controller.datasource.DataSourceController.checkDatasource(DataSourceController.java:248)

不知道是不是和建造者模式有关。即使加上try...catch{}语句块,也不能捕获异常。。

借助于idea强大的源码阅读功能,最终发现源码提供有一个工具类方法CachecloudJedisFactoryUtil.getHostAndPortForStandAlone

private JedisCluster getConnection() throws Exception {
    long appId = Long.parseLong(dataSource.get("appId"));
    try {
        CachecloudJedisFactoryUtil.getHostAndPortForStandAlone(dataSource.get("appId"));
    } catch (IllegalArgumentException e) {
        throw new Exception(e.getMessage());
    }
    return ClientBuilder.redisCluster(appId)
            .setJedisPoolConfig(getPoolConfig())
            .setConnectionTimeout(2000)
            .setSoTimeout(1000)
            .build();
}

需要加入一个依赖:

<dependency>
    <groupId>com.ppdai.cachecloud</groupId>
    <artifactId>cachecloud-spring-boot-apollo</artifactId>
    <version>2.1.1</version>
</dependency>

参考

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/142269.html

(0)

相关推荐

  • Shiro注解

    导读:本篇文章讲解 Shiro注解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    技术随笔 2023年1月22日
    00
  • 回首来路多感概,最是奋斗动人心。

    生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

    导读:本篇文章讲解 回首来路多感概,最是奋斗动人心。,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    技术随笔 2023年4月25日
    00
  • Ctfhub解题 web 密码口令

    导读:本篇文章讲解 Ctfhub解题 web 密码口令,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    技术随笔 2023年2月6日
    00
  • 【springboot进阶】RestTemplate集成okhttp3并自定义日志打印

    导读:本篇文章讲解 【springboot进阶】RestTemplate集成okhttp3并自定义日志打印,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    技术随笔 2023年2月7日
    00
  • hibernate延迟加载(get和load的区别)

    导读:本篇文章讲解 hibernate延迟加载(get和load的区别),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    2023年2月8日
    00
  • SpringBoot项目出现No adapter for handler错误

    追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

    导读:本篇文章讲解 SpringBoot项目出现No adapter for handler错误,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    技术随笔 2023年4月10日
    00
  • springboot+jersey+tomcat实现跨域方式上传文件到服务器

    生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

    导读:本篇文章讲解 springboot+jersey+tomcat实现跨域方式上传文件到服务器,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

    技术随笔 2023年4月21日
    00
  • Postman – post请求application/x-www-from-urlencoded

    导读:本篇文章讲解 Postman – post请求application/x-www-from-urlencoded,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    技术随笔 2023年2月22日
    00
  • 【springboot】15、文件上传

    导读:本篇文章讲解 【springboot】15、文件上传,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    2023年1月13日
    00
  • 【C语言深度剖析】你真的懂C语言中的位操作符吗?(按位与、按位或、按位异或)(代码例题+详细图解)

    导读:本篇文章讲解 【C语言深度剖析】你真的懂C语言中的位操作符吗?(按位与、按位或、按位异或)(代码例题+详细图解),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

    技术随笔 2023年1月20日
    00

发表回复

登录后才能评论