在很早很早之前,写过一篇文章介绍过Redis
中的red lock
的实现,但是在生产环境中,笔者所负责的项目使用的分布式锁组件一直是Redisson
。Redisson
是具备多种内存数据网格特性的基于Java
编写的Redis
客户端框架(Redis Java Client with features of In-Memory Data Grid
),基于Redis
的基本数据类型扩展出很多种实现的高级数据结构,具体见其官方的简介图:
本文要分析的R(ed)Lock
实现,只是其中一个很小的模块,其他高级特性可以按需选用。下面会从基本原理、源码分析和基于Jedis
仿实现等内容进行展开。本文分析的Redisson
源码是2020-01
左右Redisson
项目的main
分支源码,对应版本是3.14.1
。
未来一段时间开发的项目或者需求会大量使用到Redis
,趁着这段时间业务并不太繁忙,抽点时间预习和复习Redis
的相关内容。刚好看到博客下面的UV
和PV
统计,想到了最近看书里面提到的HyperLogLog
数据类型,于是花点时间分析一下它的使用方式和使用场景(暂时不探究HyperLogLog
的实现原理)。Redis
中HyperLogLog
数据类型是Redid 2.8.9
引入的,使用的时候确保Redis
版本>= 2.8.9
。
最近忙于业务开发、交接和游戏,加上碰上了不定时出现的犹豫期和困惑期,荒废学业了一段时间。天冷了,要重新拾起开始下阶段的学习了。之前接触到的一些数据搜索项目,涉及到请求模拟,基于反爬需要使用随机的User Agent
,于是使用Redis
实现了一个十分简易的UA
池。
最近学习Netty
的时候想做一个基于Redis
服务协议的编码解码模块,过程中顺便阅读了Redis
服务序列化协议RESP
,结合自己的理解对文档进行了翻译并且简单实现了RESP
基于Java
语言的解析。编写本文的使用使用的JDK
版本为[8+]
。
Redis5.x
之后,单机、哨兵、集群搭建的难度已经简化。鉴于目前看到太多文章都是复制粘贴以往一些3.x
版本的一些内容,所以打算基于当前Redis
的最新版本做一次单机、哨兵和集群的搭建,记录一下过程步骤和遇到的问题。编写本文的时间是2019年10月6日(国庆假期…),当前Redis
的最新版本为5.0.5。操作系统用的是虚拟机里面安装的CentOS 7
。先确定已经安装好Redis
服务,可以参考笔者写的前一篇文章:《Redis5.x单机服务搭建手记》。出于书写习惯,本文有可能把哨兵称为Sentinel
、Redis Sentinel
、哨兵或者Redis
哨兵,这四个名词是等价的。
Redis5.x
之后,单机、哨兵、集群搭建的难度已经简化。鉴于目前看到太多文章都是复制粘贴以往一些3.x
版本的一些内容,所以打算基于当前Redis
的最新版本做一次单机、哨兵和集群的搭建,记录一下过程步骤和遇到的问题。编写本文的时间是2019年10月5日(国庆假期…),当前Redis
的最新版本为5.0.5。操作系统用的是虚拟机里面安装的CentOS 7
。
Lettuce
是一个Redis
的Java
驱动包,初识她的时候是使用RedisTemplate
的时候遇到点问题Debug
到底层的一些源码,发现spring-data-redis
的驱动包在某个版本之后替换为Lettuce
。Lettuce
翻译为生菜,没错,就是吃的那种生菜,所以它的Logo
长这样:
既然能被Spring
生态所认可,Lettuce
想必有过人之处,于是笔者花时间阅读她的官方文档,整理测试示例,写下这篇文章。编写本文时所使用的版本为Lettuce 5.1.8.RELEASE
,SpringBoot 2.1.8.RELEASE
,JDK [8,11]
。超长警告:这篇文章断断续续花了两周完成,超过4万字…
前一篇文章通过Redis
的有序集合Sorted Set
和调度框架Quartz
实例一版简单的延时任务,但是有两个相对重要的问题没有解决:
这篇文章的内容就是要完善这两个方面的功能。前置文章:使用Redis实现延时任务(一)。
最近在生产环境刚好遇到了延时任务的场景,调研了一下目前主流的方案,分析了一下优劣并且敲定了最终的方案。这篇文章记录了调研的过程,以及初步方案的实现。
最近在跟进一个比较老的系统的时候,发现了所有调度任务使用了spring-context
里面的@Scheduled
注解和自行基于Redis
封装的简易分布式锁控制任务不并发执行。为了不引入其他框架的情况下做一些简单优化,笔者花点时间去研读了一下Redis
的SET
命令的相关文档。
1 / 2