![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 68
追求逼格的程序员
做一个有思想有内涵有灵魂有逼格的程序员!
展开
-
redis之集群源码分析(一)
redis集群源码分为两个部分来讲,第一部分主要分析一个命令在集群模式下是如何定位到一个server来处理该命令。第二部分主要分析集群故障转移部分的源码。 本篇文章主要包括 1、一个命令请求在集群模式下是如何被处理的 2、集群模式下我们要注意哪些问题? 我们知道在redis集群模式下,每个实例分担了部分的命令请求。比如说我们要查找一个key,那么查找这个key的命令究竟要在哪个示例上被处理呢?说到这里我们有必要先给出redis集群的数据结构。 // 集群模式下节点数据结构 struct clusterNo原创 2021-07-18 12:52:55 · 559 阅读 · 0 评论 -
redis源码之惰性删除策略分析(一)
本文浅显的谈谈redis删除key的源码部分,希望本篇文章对于学习redis并且看源码的你能够起到抛砖引玉的作用,并在此记下自己阅读源码的足迹。 本文主要由以下几个部分组成 一、为什么要删除key? 二、内存淘汰的策略主要有哪些? 三、删除key的时机或者说手段有哪些? 四、删除key的源码整体脉络 五、源码的阅读 ANSWER 一 首先,为什么要删除key呢?这是因为redis是基于内存的数据库,计算机的内存容量是有限的,试想你一直往里面写入数据而没有一定的策略去删除你写的数据,内存早晚会被用完的,所以有原创 2021-06-19 16:52:28 · 491 阅读 · 0 评论 -
redis源码跳表
在这里插入代码片package com.company.structure.skiplist; import java.util.List; /** * @author zhangjw * @date 2021/2/20 0:42 */ public class ZSkipListNode { private String value; private double score; private ZSkipListNode backward; privat原创 2021-03-06 19:05:01 · 413 阅读 · 4 评论 -
2020-10-10
Redis的sds SDS与c字符串的区别 (1)sds可以常数复杂度o(1)获取字符串的长度,因为sds中有len属性 (2)c字符串容易造成缓冲区溢出,比如 strcat。sds的空间分配策略完全杜绝了发生缓冲区溢出的可能性:当sds api需要对sds进行修改时,api会先检查sds的空间是否满足修改所需的要求,如果不满足的话,api会自动将sds的空间扩展至执行修改所需的大小,然后才执行实际的修改操作,所以使用sds既不需要手动修改sds的空间大小,也不会出现前面所说的缓冲区溢出问题。 (3)减少修原创 2020-10-10 17:33:08 · 91 阅读 · 0 评论 -
redis集群模式工作原理(三)
本篇博客聊聊redis集群如何实现故障转移的?也就是集群的高可用性的。 主节点会有自己的从节点,他的从节点保存在 clusterNode的 slaves属性中。那么在集群中是如何发现主节点下线,以及从节点如何被选举为主节点,接替已经下线的主节点的呢? 首先,在集群中集群中的每个节点都会向其他节点发送ping消息,来确定彼此的存在。如果一个节点向(源节点)另一个节点(目标节点)发送ping消息,但是...原创 2020-03-20 22:57:58 · 175 阅读 · 0 评论 -
redis集群模式工作原理(二)
接着上一篇,我们聊聊如何重新分片 所谓的重新分片就是说当集群中添加一个节点时,怎样给这个节点分配相应的槽位。以及在分配槽位的过程中该如何客户端发送过来的命令?本篇博客呢,就围绕这些问题进行展开讨论。 Q1:怎样重新分片,在分片过程中服务器是上进行,还是需要停机处理? 首先,redis在分片过程中是不需要停机处理的,在线上就可以完成分片的工作,也就是集群不需要下线。 所谓的重新分片就是把相应的槽位以...原创 2020-03-20 22:24:21 · 139 阅读 · 0 评论 -
redis集群模式的工作原理(一)
本篇博客主要是用来说明redis集群的工作原理。 Q1.为什么要有redis集群,redis集群解决了哪些问题? A1:redis集群是分布式数据库的解决方案,我个人理解其主要解决了写库的性能瓶颈,也就是横向扩展了写的能力。并且提供了复制功能和故障转移功能。 下面我们就一一来研究他们 一、集群的节点的组成 二、槽指派 三、在集群中命令如何执行的? 四、重新分片 五、master节点宕机后如何实现故...原创 2020-03-18 21:12:50 · 414 阅读 · 0 评论 -
redis之字典数据结构
这篇博客我们就来讲讲redis的字典数据结构。 本节内容主要包括: 1.字典的数据结构 2.字典的扩容机制 Redis字典底层采用的是哈希表的数据结构来实现的。 dictht{ //哈希表数组 dictEntry **table; //哈希表的大小 long size; //哈希表大小掩码,用于计算索引值,总是等于 size-1 long sizemask; //该哈希表中已有节点的数量 long...原创 2020-02-17 23:16:51 · 303 阅读 · 1 评论 -
select模型
select模型 int main(int argc,const char * argv[]) { if(argc <2){ printf(“eg ./a.out.port\n”); exit(1) struct sockaddr_in serv_addr; socklen_t serv_len=sizeof(serv_addr); int port=atoi(argv[1]); //创建套...原创 2019-12-29 15:49:16 · 155 阅读 · 1 评论 -
redis复制的实现
一、复制的意义 为了实现高可用和并且可以减轻主服务器的读压力,实现了横向扩展的读能力。 二、复制的实现 1.文件同步 2.命令传播。 redis复制的实现主要是通过同步数据文件和命令传播另个步骤。 复制的行为在新版和旧版中存在差异。2.8以前的版本只有全复制一种方式,2.8版本以后有全复制和部分复制两种方式。初始复制,即是一个从服务器第一次复制主服务器会用到全复制,当从服务器断电后重连原来的主服务...原创 2019-11-04 13:31:21 · 88 阅读 · 0 评论