lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1846 随笔 :: 0 文章 :: 109 评论 :: 288万 阅读

05 2021 档案

摘要:一、I/O 概念 1.1 缓冲区 缓冲区是所有 I/O 的基础,I/O 讲的无非就是把数据移进或移出缓冲区;进程执行 I/O 操作,就是向操作系统发出请求,让它要么把缓冲区的数据排干(写),要么填充缓冲区(读)。 Java 进程发起 Read 请求加载数据大致的流程图 进程发起 Read 请求之后, 阅读全文
posted @ 2021-05-31 19:01 白露~ 阅读(215) 评论(0) 推荐(0) 编辑

摘要:在谈论Kafka高性能时不得不提到零拷贝。Kafka通过采用零拷贝大大提供了应用性能,减少了内核和用户模式之间的上下文切换次数。那么什么是零拷贝,如何实现零拷贝呢? 什么是零拷贝 WIKI中对其有如下定义: "Zero-copy" describes computer operations in w 阅读全文
posted @ 2021-05-31 18:58 白露~ 阅读(516) 评论(0) 推荐(0) 编辑

摘要:- 前言 - 零拷贝(Zero-Copy)是一个大家耳熟能详的概念,那么,具体有哪些框架会使用到零拷贝呢?在思考这个问题之前,让我们先一起探寻一下零拷贝机制的底层原理。 - 概念篇 - 1、零拷贝是什么? "零拷贝"中的"拷贝"是指操作系统在I/O操作中,将数据从一个内存区域复制到另外一个内存区域, 阅读全文
posted @ 2021-05-31 18:41 白露~ 阅读(726) 评论(0) 推荐(0) 编辑

摘要:前言 磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。 这次,我们就以「文件传输」作为切入点, 阅读全文
posted @ 2021-05-31 18:39 白露~ 阅读(96) 评论(0) 推荐(0) 编辑

摘要:正文如下: 前言 从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能;这个词我们也经常在java nio,netty,kafka,RocketMQ等框架中听到,经常作为其提升性能的一大亮点;下面从I/O的几个概念开始,进而在分析零拷贝。 I/O概念 1.缓冲区 缓冲区是所有I/O的基础,I 阅读全文
posted @ 2021-05-31 18:37 白露~ 阅读(103) 评论(0) 推荐(0) 编辑

摘要:前言 从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能;这个词我们也经常在java nio,netty,kafka,RocketMQ 等框架中听到,经常作为其提升性能的一大亮点; 下面从I/O的几个概念开始,进而在分析零拷贝。 I/O概念 1.缓冲区缓冲区是所有I/O的基础,I/O讲的无 阅读全文
posted @ 2021-05-31 18:29 白露~ 阅读(363) 评论(0) 推荐(0) 编辑

摘要:1|0何为热点key问题 从名字上可以理解,Redis中的热key就是在Redis中频繁被访问的数据,例如热点新闻,热点评论,双十一商品等等。当某一热key的请求到Server主机时,这样会造成流量过于集中,达到物理网卡上限,从而导致这台redis的主机资源不足,甚至宕机。那接下来这个key的请求, 阅读全文
posted @ 2021-05-31 18:10 白露~ 阅读(287) 评论(0) 推荐(0) 编辑

摘要:前言 最近在学习Redis相关知识,看了阿里的redis开发规范,以及Redis开发与运维这本书。分使用规范、有坑的命令、项目实战操作、运维配置四个方向。整理了使用Redis的21个注意点,希望对大家有帮助,一起学习哈 1、Redis的使用规范 1.1、 key的规范要点 我们设计Redis的key 阅读全文
posted @ 2021-05-31 17:56 白露~ 阅读(513) 评论(0) 推荐(0) 编辑

摘要:一、Redis 基础数据结构 1. StringRedis 里的字符串是动态字符串,会根据实际情况动态调整。类似于 Go 里面的切片-slice,如果长度不够则自动扩容。至于如何扩容,方法大致如下:当 length 小于 1M 的时候,扩容规则将目前的字符串翻倍;如果 length 大于 1M 的话 阅读全文
posted @ 2021-05-31 17:55 白露~ 阅读(559) 评论(0) 推荐(0) 编辑

摘要:前言 如果你是一名后端人员,对于 Redis 应该都不会陌生,Redis实战笔记,现在大部分的项目都已经运用到了 Redis 作为缓存层的搭建。面试过程中也越来越爱问关于 Redis 相关中的知识。今天我们一起来聊聊 Redis 集群中那些爱考,并且都需要知道的相关知识。 1、什么是Redis,Re 阅读全文
posted @ 2021-05-31 17:36 白露~ 阅读(852) 评论(0) 推荐(0) 编辑

摘要:本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内 阅读全文
posted @ 2021-05-31 17:32 白露~ 阅读(77) 评论(0) 推荐(0) 编辑

摘要:单线程为什么能支持10w+的QPS? 我们经常听到Redis是一个单线程程序。准确的说Redis是一个多线程程序,只不过请求处理的部分是用一个线程来实现的。 阿里云对Redis QPS的测试结果如下所示 「Redis是如何用单线程来实现每秒10w+的QPS的呢?」 使用IO多路复用 非CPU密集型任 阅读全文
posted @ 2021-05-31 17:28 白露~ 阅读(1006) 评论(0) 推荐(0) 编辑

摘要:Redis 大key Redis使用过程中经常会有各种大key的情况, 比如: 单个简单的key存储的value很大 hash, set,zset,list 中存储过多的元素(以万为单位) 由于redis是单线程运行的,如果一次操作的value很大会对整个redis的响应时间造成负面影响,所以,业务 阅读全文
posted @ 2021-05-31 17:25 白露~ 阅读(284) 评论(0) 推荐(0) 编辑

摘要:redis作为一个高性能内存数据库,在实际业务中应用的非常广泛,虽然redis的性能很好,但是在实际使用过程中,如果使用不当,也会造成一些性能问题,比如数据中存在大key。什么是大key?顾名思义就是单个key中的数据比较大,通常来说,单个key的value值不会很大,这种情况下,key的读取,删除 阅读全文
posted @ 2021-05-31 17:21 白露~ 阅读(5900) 评论(1) 推荐(0) 编辑

摘要:什么是 Redis 大 key单个key 存储的 value 很大hash, set,zset,list 结构中存储过多的元素可能存在 Redis 大 key 的业务场景1.配送范围特别大的门店2.促销活动特别多的门店、商家等3.高频用户下的订单列表... Redis 大 key 的危害OPS 低也 阅读全文
posted @ 2021-05-31 17:18 白露~ 阅读(1590) 评论(0) 推荐(0) 编辑

摘要:Redission 1、原理 2、源码中加锁lua代码 if (redis.call('exists', KEYS[1]) == 0) then redis.call('hset', KEYS[1], ARGV[2], 1); redis.call('pexpire', KEYS[1], ARGV[ 阅读全文
posted @ 2021-05-14 18:15 白露~ 阅读(1416) 评论(0) 推荐(0) 编辑

摘要:普通实现 说道Redis分布式锁大部分人都会想到:setnx+lua,或者知道set key value px milliseconds nx。后一种方式的核心实现命令如下: - 获取锁(unique_value可以是UUID等) SET resource_name unique_value NX 阅读全文
posted @ 2021-05-14 18:08 白露~ 阅读(903) 评论(0) 推荐(0) 编辑

摘要:为什么需要分布式锁 引入经典的秒杀情景,100件商品供客户抢。如果是单机版的话,我们使用synchronized 或者 lock 都可以实现线程安全。但是如果多个服务器的话,synchronized 和 lock 就不管用了(废话,怎么可能管用,都不在同一段代码了)。 分布式锁就是被设计出来实现多个 阅读全文
posted @ 2021-05-14 13:42 白露~ 阅读(136) 评论(0) 推荐(0) 编辑

摘要:1. 本地锁 常用的即 synchronize 或 Lock 等 JDK 自带的锁,只能锁住当前进程,仅适用于单体架构服务。 而在分布式多服务实例场景下必须使用分布式锁 哦哟!才知道,原来大厂的Redis分布式锁都这么设计 2 分布式锁 2.1 分布式锁的原理 厕所占坑理论 可同时去一个地方“占坑” 阅读全文
posted @ 2021-05-14 13:41 白露~ 阅读(307) 评论(0) 推荐(0) 编辑

摘要:什么是分布式锁 说到Redis,我们第一想到的功能就是可以缓存数据,除此之外,Redis因为单进程、性能高的特点,它还经常被用于做分布式锁。 锁我们都知道,在程序中的作用就是同步工具,保证共享资源在同一时刻只能被一个线程访问,Java中的锁我们都很熟悉了,像synchronized 、Lock都是我 阅读全文
posted @ 2021-05-14 13:40 白露~ 阅读(442) 评论(0) 推荐(0) 编辑

摘要:Databus和canal都能够提供实时从数据库获取变更,并提供给下游的实时消费流的功能。 本文针对两个系统实现和应用上的不同点,做了一个简单的对比: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 阅读全文
posted @ 2021-05-14 11:38 白露~ 阅读(1014) 评论(1) 推荐(0) 编辑

摘要:写在前面 数据同步 是一个脏活,而且是个高风险的活 大多数情况下,应用架构设计不好,引入什么新存储,引入什么DDD,治标不治本,都是扯淡。 但万一灵验呢?这就是数据同步的需求基础。且看下面需求场景。 应用场景 业务数据发展到一定水平,需要将大部分冷热数据从熟悉的DB迁移到其他存储进行复杂查询和分析 阅读全文
posted @ 2021-05-14 11:34 白露~ 阅读(221) 评论(0) 推荐(0) 编辑

摘要:社区wiki主页:https://github.com/linkedin/Databus/wiki 背景 一个大型分布式系统往往存在多种的存储系统,mysql,tair,redis,memcache,hbase等等。一些重要的或者需要事务支持的数据操作,通常都会放到mysql处理。但是,为了满足高性 阅读全文
posted @ 2021-05-14 11:23 白露~ 阅读(383) 评论(0) 推荐(0) 编辑

摘要:1:hash算法,假如有三台服务,根据key得到hashCode,除以3得到余数,0,1,2 分别对应三台服务 2:hash一致性算法,假如有三台服务,服务生产hashCode,存放到hashCode圆环上,然后根据key生成hashCode,然后顺时针找到最近的服务。由于这样,不均衡,可以给三台服 阅读全文
posted @ 2021-05-13 18:48 白露~ 阅读(243) 评论(0) 推荐(0) 编辑

摘要:堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,如下图所示: 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为Major GC,而Full GC是对整个堆来说的,在最近几个版本的JDK里默认包括了对永生带即方法区 阅读全文
posted @ 2021-05-12 20:56 白露~ 阅读(671) 评论(0) 推荐(0) 编辑

摘要:题目:有两个有序数组a[]和b[],将它们合并成数组c[],需要c[]也是有序数组。 思路:新建一个以两个集合长度之和为长度的新数组,从两数组最左边开始比起,把小的放入新集合,并用变量标记后一位置, public class MyClass { public static void main(Str 阅读全文
posted @ 2021-05-12 20:34 白露~ 阅读(547) 评论(0) 推荐(0) 编辑

摘要:最近用java抓取数据的时候,遇到了需要对拿到的List集合按照多个字段进行排序。首先得让排序的实体类实现Comparable类并且重写它的compareTo方法,在compareTo中你可以自定义排序的规则。如果前者大于后者,则返回1,若果相等则返回0,若果前者小于后者,则返回-1;String字 阅读全文
posted @ 2021-05-12 19:43 白露~ 阅读(2327) 评论(0) 推荐(0) 编辑

摘要:目录 21_合并两个有序链表 描述 解法一:迭代 思路 Java 实现 Python 实现 解法二:递归 思路 Java 实现 Python 实现 描述 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出 阅读全文
posted @ 2021-05-12 19:36 白露~ 阅读(115) 评论(0) 推荐(0) 编辑

摘要:题目: 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4看到这个题,让我想起上次写的博客,合并两个有序的数组。这个题,是链表的合并,这就比较好移动,可以用递归实现链表的 阅读全文
posted @ 2021-05-12 19:23 白露~ 阅读(733) 评论(0) 推荐(0) 编辑

摘要:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例: 输入:1->2->4, 1->3->4输出:1->1->2->3->4->412思想: 从两个有序链表的第一个结点开始比较,val值小的结点尾插入结果链表。具体实现: 定义变量(1)定义变量 cur1 阅读全文
posted @ 2021-05-12 19:08 白露~ 阅读(533) 评论(0) 推荐(0) 编辑

摘要:这边博文介绍Rocketmq的延迟消息的实现管理。文章直接将不会介绍RocketMq的组件,后续将会补上。 首先上图: 定义用户topic为study_rocketmq_topic。流程如下: 1.消息消费者将message投递到broker的commitLog服务 2.commitLog服务判断m 阅读全文
posted @ 2021-05-12 18:36 白露~ 阅读(2287) 评论(0) 推荐(0) 编辑

摘要:RocketMQ简介 RocketMQ是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠、万亿级容量、灵活可伸缩的消息发布与订阅服务。 它前身是MetaQ,是阿里基于Kafka的设计使用Java进行自主研发的。在2012年,阿里将其开源, 在2016年,阿里将其捐献给Apac 阅读全文
posted @ 2021-05-12 18:34 白露~ 阅读(650) 评论(0) 推荐(0) 编辑

摘要:Sentinel 是阿里中间件团队研发的面向分布式服务架构的轻量级高可用流量控制组件,于 2018 年 7 月正式开源。Sentinel 主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户提升服务的稳定性。大家可能会问:Sentinel 和之前经常用到的熔断降级库 Netfl 阅读全文
posted @ 2021-05-12 18:01 白露~ 阅读(108) 评论(0) 推荐(0) 编辑

摘要:小灰的答题策略,是遇到难题不断思考、不断思考,一直到考试结束为止。可以用下面这张图流程图来表示: 大黄的答题策略,是遇到难题先尝试几次思考,如果尝试一定次数不成功,则果断放弃,继续回答别的题目。等别的题目回答完毕,再回过头来重新思考那道难题。可以用下面这张图流程图来表示: 什么是服务熔断? 熔断这一 阅读全文
posted @ 2021-05-12 17:56 白露~ 阅读(309) 评论(0) 推荐(0) 编辑

摘要:1. 熔断1.1 熔断来源我们家用电闸上都有保险丝模块,当电压出现短路问题时,自动跳闸,此刻电路主动断开,我们的电器就会收到保护。否则,不能断开,后果不堪设想。保险丝就是一个自我保护装置,保护整个电路。1.2 分布式系统中的熔断在分布式系统中,我们往往需要依赖下游服务,不管是内部系统还是第三方服务, 阅读全文
posted @ 2021-05-12 17:52 白露~ 阅读(1118) 评论(0) 推荐(0) 编辑

摘要:常用限流算法的应用场景和实现原理 降级-熔断-限流-傻傻分不清楚 什么是服务熔断? 阅读全文
posted @ 2021-05-12 17:43 白露~ 阅读(376) 评论(0) 推荐(0) 编辑

摘要:java-分布式-分布式事务 阅读全文
posted @ 2021-05-12 17:41 白露~ 阅读(56) 评论(0) 推荐(0) 编辑

摘要:在高并发业务场景下,保护系统时,常用的"三板斧"有:"熔断、降级和限流"。今天和大家谈谈常用的限流算法的几种实现方式,这里所说的限流并非是网关层面的限流,而是业务代码中的逻辑限流。 限流算法常用的几种实现方式有如下四种: 计数器 滑动窗口 漏桶 令牌桶 下面会展开说每种算法的实现原理和他们自身的缺陷 阅读全文
posted @ 2021-05-12 17:23 白露~ 阅读(412) 评论(0) 推荐(0) 编辑

摘要:Redis实现分布式锁 最近看分布式锁的过程中看到一篇不错的文章,特地的加工一番自己的理解: Redis分布式锁实现的三个核心要素: 1.加锁 最简单的方法是使用setnx命令。key是锁的唯一标识,按业务来决定命名,value为当前线程的线程ID。 比如想要给一种商品的秒杀活动加锁,可以给key命 阅读全文
posted @ 2021-05-12 15:23 白露~ 阅读(292) 评论(0) 推荐(0) 编辑

摘要:1.限流2.限流算法 2.1计数器 2.2 漏桶算法 2.3 令牌桶算法 2.4、滑动时间窗 2.5、三色速率标记法三、限流实现 3.1 RateLimiter简介(guava的令牌桶实现) 3.2 基于 redis 的分布式限流 3.3 Spring Cloud GateWay整合redis内置R 阅读全文
posted @ 2021-05-12 14:23 白露~ 阅读(2291) 评论(0) 推荐(0) 编辑

摘要:我们知道,布隆过滤器是不可变的,但如果布隆过滤器容量确实不够了,该怎么办呢?或者如果要每个月都删除几个月前的去重数据,该如何处理呢?这边要记录一种布隆过滤器的巧用,多个布隆过滤器组成的循环布隆过滤器。 布隆过滤器 布隆过滤器的细节这边不做赘述,他在创建的时候就确定了容量以及错误率(false pos 阅读全文
posted @ 2021-05-12 13:59 白露~ 阅读(983) 评论(0) 推荐(0) 编辑

摘要:《玩转Redis》系列文章主要讲述Redis的基础及中高级应用。本文是《玩转Redis》系列第【11】篇,最新系列文章请前往公众号“zxiaofan”查看,或百度搜索“玩转Redis zxiaofan”即可。 往期精选:《玩转Redis-HyperLogLog原理探索》 本文关键字:玩转Redis、 阅读全文
posted @ 2021-05-12 13:45 白露~ 阅读(1371) 评论(0) 推荐(0) 编辑

摘要:如何查看一个东西是否在有大量数据的池子里面? Bloom Filter(布隆过滤器)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素 阅读全文
posted @ 2021-05-12 13:32 白露~ 阅读(863) 评论(0) 推荐(0) 编辑

摘要:最近对 RocketMQ 的存储结构学习了一下,写一篇总结记录一下自己对其的一个研究和理解。先简单说一下 RocketMQ 的总体架构。 RocketMQ 的总体架构 RocketMQ由四个组件构成,分别是Producer、Consumer、Broker 和 NameServer。 Producer 阅读全文
posted @ 2021-05-07 20:21 白露~ 阅读(457) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示