一文彻底理解Redis序列化协议,你也可以编写Redis客户端

前提

最近学习Netty的时候想做一个基于Redis服务协议的编码解码模块,过程中顺便阅读了Redis服务序列化协议RESP,结合自己的理解对文档进行了翻译并且简单实现了RESP基于Java语言的解析。编写本文的使用使用的JDK版本为[8+]

阅读更多
Redis5.x哨兵搭建手记

前提

Redis5.x之后,单机、哨兵、集群搭建的难度已经简化。鉴于目前看到太多文章都是复制粘贴以往一些3.x版本的一些内容,所以打算基于当前Redis的最新版本做一次单机、哨兵和集群的搭建,记录一下过程步骤和遇到的问题。编写本文的时间是2019年10月6日(国庆假期…..),当前Redis的最新版本为5.0.5。操作系统用的是虚拟机里面安装的CentOS 7。先确定已经安装好Redis服务,可以参考笔者写的前一篇文章:《Redis5.x单机服务搭建手记》。出于书写习惯,本文有可能把哨兵称为SentinelRedis Sentinel、哨兵或者Redis哨兵,这四个名词是等价的。

阅读更多
Redis5.x单机服务搭建手记

Redis5.x之后,单机、哨兵、集群搭建的难度已经简化。鉴于目前看到太多文章都是复制粘贴以往一些3.x版本的一些内容,所以打算基于当前Redis的最新版本做一次单机、哨兵和集群的搭建,记录一下过程步骤和遇到的问题。编写本文的时间是2019年10月5日(国庆假期…..),当前Redis的最新版本为5.0.5。操作系统用的是虚拟机里面安装的CentOS 7

阅读更多
钢铁宅的国庆老广州小食之旅

背景

国庆长假算是过半,宅了两天感觉没什么作为,天天睡到中午,然后吃午饭(不出门,吃外卖),午饭后又睡到晚餐时间吃第二顿外卖。心里感觉有点咸鱼。

想了下,这样下去不行,必须出去走走,做一条活动的不那么咸的咸鱼。于是2019年10月2日凌晨找了一些老广州小食攻略,从里面挑出一些想吃的或者新奇的东东(咸鱼对玩的和看的提不起兴趣,而对吃的兴趣比较大)。参考了下面两个帖子:

整理了几个突然想去试试的店:

早上起来临时写的备忘录,准备了一下就随缘出发。

阅读更多
一个低级错误引发Netty编码解码中文异常

前言

最近在调研Netty的使用,在编写编码解码模块的时候遇到了一个中文字符串编码和解码异常的情况,后来发现是笔者犯了个低级错误。这里做一个小小的回顾。

阅读更多
Redis高级客户端Lettuce详解

前提

Lettuce是一个RedisJava驱动包,初识她的时候是使用RedisTemplate的时候遇到点问题Debug到底层的一些源码,发现spring-data-redis的驱动包在某个版本之后替换为LettuceLettuce翻译为生菜,没错,就是吃的那种生菜,所以它的Logo长这样:

m-r-c-l-1

既然能被Spring生态所认可,Lettuce想必有过人之处,于是笔者花时间阅读她的官方文档,整理测试示例,写下这篇文章。编写本文时所使用的版本为Lettuce 5.1.8.RELEASESpringBoot 2.1.8.RELEASEJDK [8,11]超长警告:这篇文章断断续续花了两周完成,超过4万字…..

阅读更多
使用Redis实现延时任务(二)

前提

前一篇文章通过Redis的有序集合Sorted Set和调度框架Quartz实例一版简单的延时任务,但是有两个相对重要的问题没有解决:

  1. 分片。
  2. 监控。

这篇文章的内容就是要完善这两个方面的功能。前置文章:使用Redis实现延时任务(一)

阅读更多
使用Redis实现延时任务(一)

前提

最近在生产环境刚好遇到了延时任务的场景,调研了一下目前主流的方案,分析了一下优劣并且敲定了最终的方案。这篇文章记录了调研的过程,以及初步方案的实现。

阅读更多
Redis的复合SET命令和简易的分布式锁优化

前提

最近在跟进一个比较老的系统的时候,发现了所有调度任务使用了spring-context里面的@Scheduled注解和自行基于Redis封装的简易分布式锁控制任务不并发执行。为了不引入其他框架的情况下做一些简单优化,笔者花点时间去研读了一下RedisSET命令的相关文档。

阅读更多
使用Redis的HSCAN命令遇到的一个问题

前提

笔者最近在做一个项目时候使用Redis存放客户端展示的订单列表,列表需要进行分页。由于笔者先前对Redis的各种数据类型的使用场景并不是十分熟悉,于是先入为主地看到Hash类型:

USER_ID:1
ORDER_ID:ORDER_XX: {"amount": "100","orderId":"ORDER_XX"}
ORDER_ID:ORDER_YY: {"amount": "200","orderId":"ORDER_YY"}

感觉Hash类型完全满足需求实现的场景。然后想当然地考虑使用HSCAN命令进行分页,引发了后面遇到的问题。

阅读更多