一、Redisrehash问题回顾Redis开发规范解析(三)一个Redis最好存多少key一文中详细介绍了Rehash的基本原理和可能产生的问题,这里不做详细介绍。简单回顾下超出key阈值后,需要额外的hash表内存大小:键值个数需要额外的hash表内存大小134,217,7282GB67,108,8641GB33,554,432512.0MB16,777,216256.0MB8,388,608128.0MB4,194,30464.0MB2,097,15232.0MB1,048,57616.0MB524,2888.0MB随着key个数越多,rehash需要的额外内存...
2023-11-02 10:44:17 1691浏览 0点赞 0回复 0收藏
一、问题Redis臭名昭著的神坑配置save,可以自动完成持久化。save360013001006010000但对持久化了解的人也知道,它是性能杀手,所以一般情况下,我们在线上不会用这个功能的,具体两种方法:不添加这个配置显示配置save""在Redis6.2以前,上述两种方法都可以实现。但如果你用Redis6.2、Redis7就会发现使用第一种方法的话,会默认加上这个配置:127.0.0.1:6380>configgetsave1)"save"2)"360013001006010000"二、原因before6.2(6....
2023-10-31 14:52:15 2296浏览 0点赞 0回复 0收藏
canal是阿里知名的开源项目,主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费。这篇文章,我们手把手向同学们展示使用canal将MySQL增量数据同步到ES。1集群模式图中server对应一个canal运行实例,对应一个JVM。server中包含1..n个instance,我们可以将instance理解为配置任务。instance包含如下模块:eventParser数据源接入,模拟slave协议和master进行交互,协议解析eventSinkParser和Store链接器,进行数据过...
2023-09-07 11:54:41 1960浏览 0点赞 0回复 0收藏
Elasticsearch是一个分布式的、面向生产规模工作负载优化的搜索引擎。Kibana可以将Elasticsearch中的数据转化为直观的图表、图形和仪表盘。这篇文章,您将学习本地安装Elasticsearch和Kibana,以及使用开发工具JavaSDK创建索引和搜索数据。1本地安装1.1创建网络我们需要创建一个供Elasticsearch和Kibana使用的network。这个network将被用于Elasticsearch和Kibana之间的通信。dockernetworkcreateelastic1.2安装ES拉取Elasticsea...
2023-09-07 11:54:15 2790浏览 0点赞 0回复 0收藏
NameServer是专为RocketMQ设计的轻量级名字服务,它的源码非常精简,八个类,少于1000行代码。这篇文章,笔者会从基础概念、Broker发送心跳包、NameServer维护路由、ZookeepervsNameServer四个模块揭秘名字服务的设计精髓。1基础概念NameServer是一个非常简单的Topic路由注册中心,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现。RocketMQ集群工作流程:1、NameServer启动服务,监听TCP端口,集群多节点之间无任何...
2023-09-07 11:53:50 1866浏览 0点赞 0回复 0收藏
事务消息是RocketMQ的高级特性之一。这篇文章,笔者会从应用场景、功能原理、实战例子三个模块慢慢为你揭开事务消息的神秘面纱。1应用场景举一个电商场景的例子:用户购物车结算时,系统会创建支付订单。用户支付成功后支付订单的状态会由未支付修改为支付成功,然后系统给用户增加积分。通常我们会使用普通消费方案,该方案能够发挥MQ的优势:异步和解耦,同时架构设计非常简单。用户购物车结算时,系统创建支付订单;支付成功...
2023-09-07 11:53:24 2102浏览 0点赞 0回复 0收藏
RocketMQ主从复制是RocketMQ高可用机制之一,数据可以从主节点复制到一个或多个从节点。这篇文章,我们聊聊RocketMQ的主从复制,希望大家读完之后,能够理解主从复制的精髓。1同步与异步在RocketMQ的集群模式中,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic信息到所有NameServer。Master节点负责接收客户端的写...
2023-09-07 11:53:01 2396浏览 0点赞 0回复 0收藏
这篇文章,笔者想聊聊那些在业务系统中较少被使用,但却活跃于中间件或者框架里,强大却又低调的缓存,笔者愿称他们为缓存世界的扫地僧。1HashMapConcurrentHashMap配置缓存HashMap是一种基于哈希表的集合类,它提供了快速的插入、查找和删除操作。HashMap是很多程序员接触的第一种缓存,因为现实业务场景里,我们可能需要给缓存添加缓存统计、过期失效、淘汰策略等功能,HashMap的功能就显得孱弱,所以HashMap在业务系统中使用...
2023-09-07 11:52:29 2023浏览 0点赞 0回复 0收藏
看到这个知乎问题时,我的思绪纷飞,往事一幕幕闪现在脑海里,等平静下来,内心变得很笃定。于是,我做了如下的回答:非常有必要。1997年,乔布斯刚刚回归苹果不久,在开发者大会上,一名程序员当众质疑乔布斯不懂技术。乔布斯,你是一个聪明又有影响力的人。但是很遗憾也很明显,很多时候你根本不知道自己在做什么。我希望你能用清楚的语言解释一下Java编程语言以及其变种是如何阐述OpenDoc(开源技文档)内置的一些想法。等你...
2023-09-07 11:33:23 1405浏览 0点赞 0回复 0收藏
大家好,我是小楼。在之前的文章《一言不合就重构》中介绍了我重构的一个服务健康检查系统,这个系统自上线开始就有一个问题:健康检查耗时有点高。但一直拖着没解决,究其原因只能拿出下面这张图。背景介绍在开始本文前,让大家快速进入状态,我们提取最简单的背景。健康检查系统每隔一段时间会向目标服务器发送健康检查请求,当失败达到一定条件(例如连续3次失败),则将该目标从注册中心中摘除。我们遇到一个问题:...
2023-06-21 11:55:56 1724浏览 0点赞 0回复 0收藏
大家好呀,我是小楼。本文是上篇文章《使用增强版singleflight合并事件推送,效果炸裂!》的续集,没看过前文必须要先看完才能看本文,实在不想看,拉到文章末尾,给我点个赞再退出吧Doge上篇文章发出后,有一位读者朋友给我发私信,写了一大段话:一开始,没太看懂,于是就细问了一下在看了解释之后,感觉好像有点懂了,再三思考后,确认了,这里面有BUG。理想状态为了描述简单,这里我用字母本身表示事件发生,如...
2023-06-21 11:55:16 2009浏览 0点赞 0回复 0收藏
hello,大家好啊,我是小楼。最近在工作中对Go的singleflight包做了下增强,解决了一个性能问题,这里记录下,希望对你也有所帮助。singleflight是什么singleflight直接翻译为"单(次)飞(行)",它是对同一种请求的抑制,保证同一时刻相同的请求只有一个在执行,且在它执行期间的相同请求都会Hold直到执行完成,这些Hold的请求也使用这次执行的结果。举个例子,当程序中有读(如Redis、MySQL、Http、RPC等)请求,且并发非常...
2023-06-21 11:54:32 1601浏览 0点赞 0回复 0收藏
一、介绍每场后端面试,似乎都少不了关于redis的话题,比如项目使用过哪些分布式缓存服务,为什么要使用redis,有没有碰到过缓存失效、缓存穿透、缓存雪崩等问题。在前几篇关于redis的介绍文章中,我们说到项目中之所以会引入分布式缓存服务,主要是为了解决集群环境下,内存数据不共享的问题,比如session会话,以及一些字典缓存等等,在当前服务器的内存中存储,在另一台服务器中难以获取查询的问题,通过引入缓存服务,将缓...
2023-03-09 15:10:28 2651浏览 0点赞 0回复 0收藏
一、摘要在前几篇文章中,我们详细介绍了redis的一些功能特性以及主流的java客户端api使用方法。在当前流行的微服务以及分布式集群环境下,Redis的使用场景可以说非常的广泛,能解决集群环境下系统中遇到的不少技术问题,在此列举几个使用redis经常用到的功能!分布式缓存:在分布式的集群架构中,将缓存存储在内存中会出现很多的问题,比如用户回话信息,因为这部分信息需要与其他机器共享,此时利用Redis可以很好的解决机器之...
2023-03-09 15:09:48 5556浏览 0点赞 0回复 0收藏
一、摘要相对于其他的分布式中间件,Redis支持的客户端种类非常繁多,涵盖更加全面,除了支持比较流行的c、c++、java、C、php、Python等语言以外,还支持ObjectiveC、Swift、Node.js等等,以下是来自于Redis支持的按语言分类的客户端截图。站在java开发语言的角度,虽然可供选择的客户端非常多,但是官方主要推荐使用以下三种客户端,原因大概是它们对redis提供的支持更加全面、api操作更佳丰富。JedisLettuceRedisson在前几篇...
2023-03-09 15:07:06 2544浏览 0点赞 0回复 0收藏
我们都知道,在日常开发中我们经常遇到在钉钉群或者在业务群中会出现各种各样的慢业务的接口,比如某个接口在钉钉群疯狂出现,然后就有某些领导艾特你来解决这个慢业务问题,今天阿粉就来说说如何通过各种手段来定位慢业务问题,以及如何解决慢业务的问题。定位慢业务问题首先我们先来说这么慢业务问题,一般的慢业务问题,总归就那么几种,SQL问题,代码业务问题,前端解析问题,前端的解析问题我们就不说了,为什么呢?因为如...
2023-03-09 15:02:21 2455浏览 0点赞 0回复 0收藏
如果问你在日常开发中用到的最多的一个Java类是什么,阿粉敢打赌绝对是String.class。说到String大家都知道String是一个不可变的类;虽然用的很多,那不知道小伙伴们有没有想过怎么样创建一个自己的不可变的类呢?这篇文章阿粉就带大家来实践一下,创建一个自己的不可变的类。特性在手动编写代码之前,我们先了解一下不可变类都有哪些特性,定义类的时候需要使用final关键字进...
2023-01-16 16:57:32 3113浏览 0点赞 0回复 0收藏
前面的文章给大家介绍了如何自定义一个不可变类,没看过的小伙伴建议去看一下,这节课给大家介绍一个Java中的一个关键字Record,那Record关键字跟不可变类有什么关系呢?看完今天的文章你就知道了。友情提示Record关键字在Java14过后才支持的,所以是不是被阿粉说中了,还在使用Java8的你一定没用过!不可变类我们先看一下之前定义的不可变类,代码如下。packagecom...
2023-01-16 16:56:51 2855浏览 0点赞 0回复 0收藏
大家都知道我们常用的SpringBoot项目最终在线上运行的时候都是通过启动javajarxxx.jar命令来运行的。那你有没有想过一个问题,那就是当我们执行javajar命令后,到底底层做了什么就启动了我们的SpringBoot应用呢?或者说一个SpringBoot的应用到底是如何运行起来的呢?今天阿粉就带大家来看下。认识jar在介绍javajar运行原理之前我们先看一下jar包里面都包含了...
2023-01-16 16:52:48 3328浏览 0点赞 0回复 0收藏
一、摘要在上一篇文章中,我们详细的介绍了redis的安装和常见的操作命令,以及可视化工具的介绍。刚知道服务端的操作知识,还是远远不够的,如果想要真正在项目中得到应用,我们还需要一个redis的客户端,然后将其集成到项目中,让程序自动根据我们的业务需要自动处理。基于redis开放的通信协议,大神们纷纷开发了各种语言的redis客户端,有c、c++、java、python、php、nodeJs等等开发语言的客户端,准确来说其实这些客户端都是...
2023-01-16 16:52:04 3953浏览 0点赞 0回复 0收藏