6 老马啸西风

尚未进行身份认证

我要认证

Github: https://github.com/houbb 邮箱:1060732496@qq.com

等级
TA的排名 137

java 从零实现属于你的 redis 分布式锁

点赞再看,已成习惯。为什么需要分布式锁在 jdk 中为我们提供了加锁的方式:(1)synchronized 关键字(2)volatile + CAS 实现的乐观锁(3)ReadWriteLock 读写锁(4)ReenTrantLock 可重入锁等等,这些锁为我们变成提供极大的便利性,保证在多线程的情况下,保证线程安全。但是在分布式系统中,上面的锁就统统没用了。我们想要解决分布式系统中的并发问题,就需要引入分布式锁的概念。上一节我们已经对分布式锁原理进行了详细讲解,参见:red.

2020-10-17 21:24:42

3天时间,我是如何解决redis bigkey删除问题的?

问题的出现一个平坦无奇的工作日,领导到我工位和我说,“有一个 redis 慢操作,你这几天有时间帮忙解决一下。”“好的。”,管他什么问题,既然让我做,我自然觉得自己能搞定。然后我收到一封 redis 慢操作的 excel 文件,这个还挺好,每个操作的耗时都给出来了,看了下我们系统有几个操作耗时几秒钟。好家伙,对于单线程的 redis 来说,一个操作几秒钟确实是挺致命的,不过都是在凌晨左右,还好。慢操作分析redis 的慢操作已经有了,如果没有,我们可以自己去 redis 服务器查看历史的慢日.

2020-10-17 14:58:24

java 手写并发框架(二)异步转同步框架封装锁策略

序言上一节我们学习了异步查询转同步的 7 种实现方式,今天我们就来学习一下,如何对其进行封装,使其成为一个更加便于使用的工具。思维导图如下:拓展阅读java 手写并发框架(1)异步查询转同步的 7 种实现方式异步转同步的便利性实现方式循环等待wait & notify使用条件锁使用 CountDownLatch使用 CyclicBarrierFutureSpring EventListener上一节我们已经对上面的 7 种实现方式进行了详

2020-10-12 21:51:04

从零手写缓存框架(14)redis渐进式rehash详解

redis 的 rehash 设计本文思维导图如下:HashMap 的 rehash 回顾读过 HashMap 源码的同学,应该都知道 map 在扩容的时候,有一个 rehash 的过程。没有读过也没有关系,可以花时间阅读下 从零开始手写 redis(13) HashMap源码详解 简单了解下整个过程即可。HashMap 的扩容简介这里简单介绍下:扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组

2020-10-11 21:50:50

从零开始手写缓存框架 redis(13)HashMap 源码原理详解

为什么学习 HashMap 源码?作为一名 java 开发,基本上最常用的数据结构就是 HashMap 和 List,jdk 的 HashMap 设计还是非常值得深入学习的。无论是在面试还是工作中,知道原理都对会我们有很大的帮助。本篇的内容较长,建议先收藏,再细细品味。不同于网上简单的源码分析,更多的是实现背后的设计思想。涉及的内容比较广泛,从统计学中的泊松分布,到计算机基础的位运算,经典的红黑树、链表、数组等数据结构,也谈到了 Hash 函数的相关介绍,文末也引入了美团对于 HashMap 的源

2020-10-10 21:39:03

java 手写并发框架(一)异步查询转同步的 7 种实现方式

序言本节将学习一下如何实现异步查询转同步的方式,共计介绍了 7 种常见的实现方式。思维导图如下:异步转同步业务需求有些接口查询反馈结果是异步返回的,无法立刻获取查询结果。比如业务开发中我们调用其他系统,但是结果的返回确实通知的。或者 rpc 实现中,client 调用 server 端,结果也是异步返回的,那么如何同步获取调用结果呢?正常处理逻辑触发异步操作,然后传递一个唯一标识。等到异步结果返回,根据传入的唯一标识,匹配此次结果。如何转换为同步正常的应用场景很多,但是有时

2020-10-09 21:12:08

从零开始手写缓存框架(12)redis expire 过期的随机特性详解及实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(二)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现java从零开始手写redis(七)LRU 缓存淘汰策略详解java从零开始手写redis(八)朴素 LRU 淘汰算法性能优化第二

2020-10-08 14:32:56

java 从零开始手写 redis(11)clock时钟淘汰算法详解及实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现java从零开始手写 redis(七)LRU 缓存淘汰策略详解前面我们实现了 FIFO/LRU/LFU 等常见的淘汰策略,不过在操作

2020-10-07 19:20:42

java 从零开始手写 redis(十)缓存淘汰算法 LFU 最少使用频次

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现java从零手写实现redis(七)LRU 缓存淘汰策略详解从零开始手写 redis(八)朴素 LRU 淘汰算法性能优化本节一起来

2020-10-06 21:56:18

从零开始手写 redis(八)朴素 LRU 淘汰算法性能优化

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现我们前面简单实现了 redis 的几个特性,java从零手写实现redis(一)如何实现固定大小的缓存? 中实现了先进先出的驱除策略。

2020-10-04 18:12:36

从零开始手写 redis(七)LRU 缓存淘汰策略详解

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF 持久化原理详解及实现我们前面简单实现了 redis 的几个特性,java从零手写实现redis(一)如何实现固定大小的缓存? 中实现了先进先出的驱除策略。

2020-10-03 21:50:45

java 从零开始手写 redis(六)redis AOF 持久化原理详解及实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路我们前面简单实现了 redis 的几个特性,java从零手写实现redis(三)内存数据如何重启不丢失? 中实现了类似 redis 的 RDB 模式。redis aof 基础Redis AOF 持

2020-10-02 12:59:32

java 从零开始手写 redis(五)过期策略的另一种实现思路

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器前面实现了 redis 的几个基本特性,其中在 expire 过期原理时,提到了另外一种实现方式。这里将其记录下来,可以拓展一下自己的思路。以前的实现方式核心思路原来的实现方式见:java从零手写实现redis(三)redis expire 过期原理

2020-10-01 22:18:39

从零开始手写 redis(四)监听器的实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redis expire 过期原理java从零手写实现redis(三)内存数据如何重启不丢失?本节,让我们来一起学习一下如何实现类似 guava-cache 中的 removeListener 删除监听器,和类似 redis 中的慢日志监控的 slowListener。删除监听器说明我们在两种场景下删除数据是对用户透明的:(1)size 满了之后,进行数据淘汰。(2)expire 过期时,清

2020-09-30 19:56:08

从零手写 cache 之 redis expire 过期实现原理

前言我们在 从零手写 cache 框架(一)实现固定大小的缓存 中已经初步实现了我们的 cache。本节,让我们来一起学习一下如何实现类似 redis 中的 expire 过期功能。过期是一个非常有用的特性,比如我希望登录信息放到 redis 中,30min 之后失效;或者单日的累计信息放在 redis 中,在每天的凌晨自动清空。代码实现接口我们首先来定义一下接口。主要有两个:一个是多久之后过期,一个是在什么时候过期。public interface ICache<K, V>

2020-09-28 20:11:15

从零开始手写缓存之如何实现固定缓存大小

程序员的三高前段时间有一位同事体检,体检医生说他三高。我打趣道,程序员三高不是高性能、高并发、高可用吗?你是哪三高?每一个追求性能的开发者,都对高性能孜孜不倦地追求着,而缓存是我们踏上这条高性能大道的必经之路。小到 cpu 设计,大到服务分布式缓存,我们每时每刻都在接触缓存,今天我们就一起学习下缓存的发展之路,以及如何如何手写一个可以指定大小的 cache。cache 发展之路古代社会 - HashMap当我们应用有一定流量之后或者查询数据库特别频繁,这个时候就可以祭出我们的java中自带的H

2020-09-27 23:17:25

18次版本迭代,从零到一实现 java web 权限管理控台(文末福利)

​privilege-adminprivilege-admin 是一款为 java 设计的权限管理控台。特性用户,角色,权限的管理黑白名单管理登入/登出日志审计基于 auto-log 的统一日志输出创作目的权限作为 web 开发可以说是最基础,但同时也是最重要的一个环节。前端时间写了 https://github.com/houbb/privilege 权限管理框架,但是没有控台配置,总觉的是残缺的,于是花时间从零实现了一个权限管理控台。多年不接触前端,前端技术变化也

2020-09-26 22:38:29

java 注解结合 spring aop 自动输出日志新增拦截器与过滤器

auto-logauto-log 是一款为 java 设计的自动日志监控框架。前面已经写过了两篇:java 注解结合 spring aop 实现自动输出日志java 注解结合 spring aop 实现日志 traceId 唯一标识经过前面2篇的代码实现,发现依然存在下列问题:(1)注解的使用依然不够便捷。如果每一个方法上都指定 @AutoLog,依然会比较麻烦。个人在使用的时候也不想这么麻烦。于是想添加基于类的注解。后期考虑是否可以基于包,动态指定 AOP 的扫描包范围。(2)对于日志

2020-09-26 12:24:03

如何从零开始设计权限管理系统

背景说明近期写代码又开始重新接触了一点控台应用,接触到的项目年代久远,所有的权限管理用起来感觉不是很得心应手。于是想着自己能否从零设计一个,梳理一下思路,当然实际用不用也无所谓。权限管理主要是为了安全,项目中的权限管理是全部放在前端控制的,感觉这一点非常不安全。前端防君子,不防小人。当然本次造轮子主要也是为了打造一款自己满意的权限控制框架,所以设计采用 MVP 模式,采用渐进式的方式开发。可以一起学习一下权限控制的设计和实现思路。如果生产想直接使用,也推荐目前比较成熟的框架:spring-

2020-09-17 23:24:15

税后收入

税后收入我们每个在生活的跌打滚爬的人,都渴望着财富自由。因为我们知道,有钱不是万能的,没有钱是万万不能的。没有钱,连远方的车票都买不到。很多人都渴望暴富,在当前高房价的压力之下难以喘息。对投资一窍不通的,也天天跑去投资理财,怕手中的钱跑不过通胀。随处可见的自主创业心灵鸡汤,幸存者效应让我们看不到那些创业路上的失败者。我们抬起头看着天上的浮云,却少有人看清脚下的路。不论是在公司上班也好,自主创业也罢,我们每个挣钱的人都要面临一个问题,那就是纳税。这件事情基本每一个月都会发生,只是有时候我们习以为常

2020-09-16 21:37:20

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。