Java 接入 cachecloud 入门分享

  • cachecloud 简介
  • 接入思路
    • 1.cachecloud 提供了redis的集中管理,机器配置,内存分配等等.
    • 2.接入redis 常规思路
    • 3.对接 cachecloud 跟常规 redis 的区别
    • 4.接入cachecloud 思路
  • 代码实现

cachecloud 简介

自行网上查阅 cachecloud 相关资料,了解这是个什么东西,提供啥子功能
参考链接 : https://blog.csdn.net/xiaofengbuhuimai/article/details/90449779

接入思路

1.cachecloud 提供了redis的集中管理,机器配置,内存分配等等.

2.接入redis 常规思路

根据ip port password 连接上redis服务器,得到Jedis对象,使用Jedis set get 方法

3.对接 cachecloud 跟常规 redis 的区别

1申请应用appid
2.请求cachecloud url,获取host port password等信息
3.根据ip port password 连接上redis服务器,得到Jedis对象,使用Jedis set get 方法

4.接入cachecloud 思路

1.根据应用场景申请cachecloud 应用appId,组装请求url=http://ip:port应用场景分三种模式,standlone,sentinel,cluster 分别对应,单机,主从,集群如何抉择模式:standlone:对缓存使用较少,数据量小,即使redis挂了,对系统影响不大.sentinel:对redis依赖较大,数据量较大,有一定的挂机风险cluster:很大,无中心的一种多节点,可规避一定的挂机风险,如果全挂,也是有风险,但是这个不常见.三种模式对应的url:url=http://ip:port/cache/client/redis/模式/appid/.json?clientVersion=1.0-SNAPSHOTeg:standlone : http://ip:port/cache/client/redis/standlone/appid/.json?clientVersion=1.0-SNAPSHOT
2.发送请求到cachecloud,得到host,port,password,status等信息. response = httpClient.doGet(url)返回数据结构:sentinel:{"sentinels": "ip:port ip:port ip:port","message": "appId:10086 client is up to date, Cheers!","status": 1,"masterName": "sentinel-ip-port","appId": 10086}standlone:{"standlone": "ip:port","message": "appId:10086 client is up to date, Cheers!","status": 1,"password": "password","appId": 10086}
3..拿到第一步返回的数据,连接redis服务器,得到Jedis对象,使用redis.1.如何得到redis对象 Jedis ?跟源码发现,Jedis = JedisPool.getResource();JedisPool 是什么东西呢,跟源码如下:public class JedisPool extends Pool<Jedis> {public JedisPool() {this((String)"localhost", 6379);}public JedisPool(GenericObjectPoolConfig poolConfig, String host) {this(poolConfig, host, 6379, 2000, (String)null, 0, (String)null);}public JedisPool(String host, int port) {this(new GenericObjectPoolConfig(), host, port, 2000, (String)null, 0, (String)null);}根据class 定义,几个构造函数,我们知道了,JedisPool 需要host port password poolconfig 等信息才能构造成功.继承Pool<Jedis>类,跟踪发现,这个pool的实现类如下:JedisPool,JedisSentinePool ,ShardedJedisPool发现分别JedisPool对应standlone,JedisSentinePool 对应sentinel,ShardedJedisPool对应cluster,而poolconfig 是GenericObjectPoolConfig类的实例,这个类是是干嘛的?源码告诉我们,这个类就是存一些redis的常规配置的.

代码实现

 好了,经过上面的源码,思路梳理,我们知道了,怎么对接cachecloud了,下面看看代码实现,现在的项目都离不开一个特别牛逼的框架---spring 这个框架能帮我干嘛呢,最常见的就是管理对象,配置bean以standlone为例,实现逻辑如下:1.定义请求cachecloud返回数据model类,叫standloneNodeInfo pulic class standloneNodeInfo {private String standalone;private String password;private Integer status;--get and set 方法区  省略}2.定义请求cachecloud 的方法类 叫cachecloudFactorypublic class CachecloudFactory{/*** api address*/public static String cachecloudDoMainUrl;/*** api appId*/public static String cachecloudAppId;/*** api appType*/public static String cachecloudAppType;public StandloneModel standloneModel;//发送请求得到返回信息private static String getCacheCloudNodesInfo(){//缓存信息获取StringBuilder apiUrl = new StringBuilder();apiUrl.append(cachecloudDoMainUrl);apiUrl.append("/cache/client/redis/");apiUrl.append(cachecloudAppType);apiUrl.append("/");apiUrl.append(cachecloudAppId);apiUrl.append(".json?clientVersion=1.0-SNAPSHOT");logger.info("apiUrl="+apiUrl);Map result = HttpUtil.doGet(apiUrl.toString());logger.info("request apiUrl return result="+JSON.toJSONString(result));return JSON.toJSONString(result);}//如理返回信息public static standloneNodeInfo getJedisStandloneInfo(String infos){logger.info("cachecloud standlone start....");if(standloneNodeInfo==null) {JSONObject json = JSONObject.parseObject(infos);logger.info("cachecloud domain url return = "+json);String standalone = null;JSONObject response = json.getJSONObject("response");if (StringUtils.isNotBlank(response.getString("standalone"))) {standalone = response.getString("standalone");logger.info("cachecloud domain url retrun standalone ="+standalone);}if (standalone != null ) {standloneNodeInfo = new standloneNodeInfo ();logger.info("cachecloud domain url retrun standalone ="+response.getString("password"));standloneNodeInfo.setPassword(response.getString("password"));standloneNodeInfo.setStandalone(standalone);}}return standloneNodeInfo;}----get and set 方法区  省略}3.定义StandlondRedisClient类@Component("standlondRedisClient")public class StandlondRedisClient extends AbstractJedisSupport implements InitializingBean, DisposableBean {private Logger logger = LoggerFactory.getLogger(StandlondRedisClient.class);/*** jedisStandlonelPool*/private JedisPool jedisPool;private GenericObjectPoolConfig poolConfig ;private AtomicBoolean poolInited =new AtomicBoolean(false);/*** 获取缓存连接信息* @return*/protected JedisnStandloneNodeInfo getJediStandloneSentinelNodeInfo(){//连接信息return CacheCloudFactory.getJedisStandloneNodeInfo();}public void afterPropertiesSet() throws Exception {this.init();}//初始化JedisPool private void init() {logger.info("cachecloud standloneSupport starting....");JedisnStandloneNodeInfo nodeInfo = this.getJediStandloneSentinelNodeInfo();String host = nodeInfo.getStandalone().split(":")[0];String port = nodeInfo.getStandalone().split(":")[1];if (StringUtils.isNotBlank(nodeInfo.getPassword())) {jedisPool = new JedisPool(poolConfig,host,Integer.parseInt(port),50000,nodeInfo.getPassword());}else{jedisPool = new JedisPool(poolConfig,host,Integer.parseInt(port),50000);}logger.info("cachecloud standlone end....");this.poolInited.set(true);}public void setPoolInited(AtomicBoolean poolInited) {this.poolInited = poolInited;}public void returnResource(Jedis jedis) {if (jedis != null) {jedis.close();}}/*** 获取jedsi连接*/@Overridepublic Jedis getRedis() {return jedisPool.getResource();}public void destroy() {if (this.jedisPool != null) {this.jedisPool.destroy();}}--get and set 方法区 省略}4.spring 配置poolconfig bean<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"><property name="maxTotal" value="${redis.maxTotal}"></property><property name="maxIdle" value="${redis.maxIdle}"></property><property name="maxWaitMillis" value="${redis.maxWaitMillis}"></property><property name="testOnBorrow" value="${redis.testOnBorrow}"></property><property name="testOnReturn" value="${redis.testOnReturn}"></property></bean>5.spring 配置 cachecloudfactory <bean id="cacheCloudFactory" class="CacheCloudFactory 类路径"><property name="cachecloudDoMainUrl" value="${cache_cloud_domain_url}"/><property name="cachecloudAppId" value="${redis.standalone.appId}"/><property name="cachecloudAppType" value="${redis.standalone.appType}"/></bean>6.spring 配置 standlondRedisClient <bean id="standlondRedisClient" class="StandlondRedisClient 类路径"><property name="poolConfig" ref="poolConfig"/></bean>

Java 接入 cachecloud 入门相关推荐

  1. ELK分布式事务管理——SkyWalking(java接入)

    先看文档:https://www.jianshu.com/p/2fd56627a3cf 这个更好:https://www.freesion.com/article/1850154912/ 一.安装El ...

  2. Java接入支付宝支付超级详细教程——从入门到精通

    ​ Java接入支付宝支付教程 源码下载 源码获取:点击获取源码 本文介绍了"二维码付款"的代码.其他支付方式的代码都在源码中. 一.创建应用 1.登录支付宝开放平台 支付宝开放平 ...

  3. Java 日志从入门到实战

    日志和异常处理结合得当的话,会给项目维护带来非常大的价值. **日志:**就是介绍一个过程和经历的详细记录. **项目日志:**就是项目开发过程的详细记录,一般由项目经理记录. **代码里的日志:** ...

  4. 【JAVA零基础入门系列】Day2 Java集成开发环境IDEA

    [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day ...

  5. 《Java 开发从入门到精通》—— 2.2 编写第一段Java程序

    本节书摘来异步社区<Java 开发从入门到精通>一书中的第2章,第2.2节,作者: 扶松柏 , 陈小玉,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.2 编 ...

  6. java程序员入门先学什么开发者工具

    学习java编程语言,那么开发工具是肯定少不了的,程序员入门基础中开发工具是一定要学会的,可以帮助开发者们提高开发效率.更优雅的写代码.由于开发者涉及的技术领域众多,以后端开发者的视角盘点平时可能用得 ...

  7. Java学习从入门到精通的学习建议

    想要学好java技术,首先打好基础很重要,不论学什么基础都是重中之重,学习Java更是如此.如:基础语法.核心类库.面向对象编程.异常.集合.IO流等基础如果学不好,那么后边更深入的语法也不容易学会. ...

  8. JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署...

    接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...

  9. 《Java并发编程入门与高并发面试》or 《Java并发编程与高并发解决方案》笔记

    <Java并发编程入门与高并发面试>or <Java并发编程与高并发解决方案>笔记 参考文章: (1)<Java并发编程入门与高并发面试>or <Java并发 ...

  10. Java学习从入门到精通-旧版

    为什么80%的码农都做不了架构师?>>>    Java学习从入门到精通-旧版 http://tech.ccidnet.com/art/3737/20051017/465333_1. ...

最新文章

  1. 5G 标准 — R15
  2. C++ const成员Demo - Win32 版本
  3. SD--关于定价过程中的存储顺序的参考结构和参考字段的使用代码跟踪
  4. ARMV7,ARMV8
  5. 一种嵌入式系统的内存分配方案
  6. PowerShell 在 SharePoint 2010 自动化部署中的应用(2)-编译打包
  7. 2020 年,React.js 开发者如何更好地修炼内功?
  8. linux iphone文件,在linux下生成iphone所需要的视频和音频文件的方法总结
  9. Openstack的用户登录流程
  10. matlab肆,matlab入门教程
  11. 类人猿学院--懒人精灵脚本系列教程(最新)
  12. 北大pkuseg分词 和 jieba 分词对比测试,结果出乎意料...
  13. 特征点检测FAST算法
  14. 前端的扁平化是什么意思
  15. 数智经济转型下如何抢占文创发展新机遇?中国移动咪咕聚焦新一代年轻人需求
  16. 如果你还没入职,那么你必须看我的这个入职vlog[教你快速成长为职业人]
  17. 推荐一些IEDA,Eclipse十分好用的插件
  18. 黑群晖私有云NAS:同步百度云盘数据
  19. win10+vs2019配置lite.ai.toolkit预编译库
  20. springboot整合佳博打印机打印条码、二维码

热门文章

  1. 四4层电梯三菱PLC程序带io表接线图
  2. wpsmac和pc版的区别_Mac版WPS Office和微软Office 2019哪个更好?
  3. 对测试开发工程师的理解
  4. 教你在Windows自带的微软拼音输入法中用上小鹤双拼方案
  5. 9.14-hspice使用方法
  6. usb3.0传输速度测试软件,Win10系统如何测试usb3.0设备传输速度
  7. 苹果手机投屏win10电脑
  8. WPF 点击按钮打开新窗口
  9. 省市区json最新数据
  10. 需求分析:5W1H分析法