
Redis
文章平均质量分 67
molaifeng
道阻且长,行则将至;行而不辍,未来可期。
展开
-
解决 Redis 启动 Creating Server TCP listening socket *:6379: unable to bind socket
1、redis 3 那个版本,如果 bind 没开启,先绑定 ipv6,ipv6 绑定失败就报错了,绑定成功了,再绑定 ipv4,咱们开发机不支持 ipv6;2、redis 5 ,如果 bind 没开启,则先尝试绑定 ipv6,ipv6 绑定失败就打印个日志,再去尝试绑定 ipv4,成功了就继续往下走。看了下代码才发现,更改了连接的判断,先尝试连接 ipv6,再尝试连接 ipv4,这样即使本机没有开启 ipv6 也能成功。同时呢,代码注释中也写的很清楚,如果没有打开 bind,那么默认会连到。原创 2023-07-26 22:25:23 · 1364 阅读 · 0 评论 -
Redis 是如何回复命令的
文章目录缘由数据存放位置发送时机结语缘由这篇博文源于群里一个群友的提问在 redis 里面存放了一个 1000w 长度的 list,然后使用 lrange 0 -1 全取出来,这会用很久。这时候我新建个连接,继续其他 key 的读写操作都是可以的。不应该是阻塞吗?那么接下来就来分析为什么会这样,也就是对应标题中 Redis 是如何回复命令的。注:本文中 Redis 版本为 6.2.4数据存放位置Redis 执行完命令后,会把回复的内存写入到当前客户端的两个地方 buf 和 reply,原创 2021-06-06 18:58:49 · 633 阅读 · 0 评论 -
gdb 调试 redis-cli 命令发送接收流程
文章目录前言redis-cli前言在 Redis 中输入 set name molaifeng ,意思很简单,写入一个 name 字符串键,值为 molaifeng,今天就以 gdb 调试的形式来探讨下其在 Redis 中的流程。注,本文中 Redis 版本为 6.2.4redis-cli先从 redis-cli 说起,在 cliSendCommand 处打个断点,接下来就追踪下代码流程。# gdb ./src/redis-cli GNU gdb (GDB) 7.6.1Copyright原创 2021-06-06 11:35:47 · 569 阅读 · 1 评论 -
Redis 事务执行流程源码分析
一般事务执行流程为# ./src/redis-cli 127.0.0.1:6379> MULTIOK127.0.0.1:6379(TX)> set name molaifengQUEUED127.0.0.1:6379(TX)> set hobby codingQUEUED127.0.0.1:6379(TX)> EXEC1) OK2) OK结合源码分析如下第一步 MULTI就是给当前的客户端加上 CLIENT_MULTI 状态,当然了,如果当前客户端状态原创 2021-06-05 11:23:28 · 147 阅读 · 0 评论 -
Linux 中 gdb 调试 Redis
这月开启实战 gdb 调试 Redis 源码系列,以目前官网上最新的稳定版本 6.2.4 来调式。首先,下载源码。wget https://download.redis.io/releases/redis-6.2.4.tar.gztar xf redis-6.2.4.tar.gzcd redis-6.2.4其次,解压并编译 make CFLAGS="-g -O0",不用 make install。最后,使用 gdb src/redis-server 进行调试。# gdb src/redis-原创 2021-06-05 10:37:24 · 337 阅读 · 0 评论 -
Redis 之 Stream(上)
Stream 为 Redis 5.0 的一大亮点,可以功能完善的支持消息队列,是异步处理、应用解耦、限流削峰的一大利器。由于 Stream 涉及的知识点较多且出来的时间也不算长( 2018/10/17 正式 release),直接上来讲源码大家看着可能有些懵,于是把这一主题分为上、下两篇:上篇主要介绍 Stream 的应用,让大家对 Redis 的 Stream 作为消息队列有所了解;下篇就深入到...原创 2020-04-26 22:47:21 · 1171 阅读 · 0 评论 -
Redis 之快速列表
快速列表(quicklist)是在 Redis 3.2 版本中引入的,之前版本用的是 listNode 组成的无环双链表实现的。// adlist.htypedef struct listNode { struct listNode *prev; /* 前置节点 */ struct listNode *next; /* 后置节点 */ void *value; /* 节点的值 */}...原创 2020-04-16 23:24:41 · 708 阅读 · 0 评论 -
Redis 之整数集合
在 Redis 中,字典和整数集合是集合的两种实现方式。原创 2020-04-12 00:29:45 · 330 阅读 · 0 评论 -
Redis 之跳表
跳表,又称跳跃表,在 Redis 中表现为 skiplist,是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。在正式介绍跳表前,先来看看 Redis 中的有序集合。zadd class 87.5 alice 87.5 fred 65.5 charles 94.5 emily向 class 有序集合里插入 4 条数据,查看下底层编码实现。1...原创 2020-04-09 20:14:38 · 1216 阅读 · 0 评论 -
Redis 之压缩列表
Redis 中的五种类型,在底层存储上并不是唯一的,而是依据 redisObject 中 encoding 来选择更适合的编码方式。比如上一篇介绍的字符串,就有 int、embstr、raw 三种,而且在不同的场景是动态变动的,比如 embstr 进行 append 操作后 encoding 就改成了 raw。127.0.0.1:6379> hmset person name molaif...原创 2020-04-06 19:27:06 · 1236 阅读 · 0 评论 -
Redis 之简单动态字符串
介绍完字典,今天再来谈谈 Redis 中另一个广泛使用的数据结构 SDS,也被称为简单动态字符串。在看 Redis 各版本特性时,发现 SDS 结构是在 3.2 版本上做了速度和节省空间上的优化。下面是 3.2 版本之前的结构。// sds.hstruct sdshdr { int len; /* buf 数组已占用的字节数 */ int free; /* buf 数组中可用的字节数...原创 2020-04-04 01:23:08 · 388 阅读 · 0 评论 -
Redis 之字典
在前面 浅谈 Redis 简单介绍过字典,是用来存储数据库所有 key-value 的,同时如果指定 key 为 哈希时,字典也是其 value 的底层实现之一,今天就来聊聊字典。字典的数据结构主要由三部分组成:dict(字典)、dictht(哈希表)、dictEntry(哈希表节点)。接下来分别介绍下这三种结构。// dict.htypedef struct dict { dic...原创 2020-03-29 22:40:45 · 373 阅读 · 0 评论 -
浅谈 Redis
前言Redis 作为一个高性能的内存数据库,其读效率达到 10w qps/s,写也能到达 4-5w qps/s。今天就来简单的聊下其底层的实现,达到知其然并知其所以然。redisServerRedis 作为典型的 C/S 模式,客户端连接到服务端,然后进行交互。那么就来看看服务端的数据结构// server.hstruct redisServer { …… redisDb *db;...原创 2020-03-20 19:13:07 · 399 阅读 · 1 评论 -
Redis 管理工具 RedisInsight
Redis 安装好并运行一段时间后,如何清晰的看到 Redis 占了多大内存,有多少个 KEY,所占的网络如何,这个在 RedisInsight 下就是一目了然了,特别方便。下载也特别简单,到此网站下载你想要的版本就行。...原创 2020-03-16 19:14:43 · 9913 阅读 · 8 评论 -
测试环境搭建 redis-cluster
Linux 版本2.6.32-431.el6.x86_64Redis 版本redis-5.0.7安装见此博客集群搭建创建目录创建 redis-cluster 目录,并在里面创建如下目录mkdir -p /usr/local/redis-cluster/cd /usr/local/redis-cluster/mkdir 7001 7002 7003 7004 7005 70...原创 2020-03-16 19:09:39 · 517 阅读 · 0 评论