
Redis
文章平均质量分 79
pianozcl
这个作者很懒,什么都没留下…
展开
-
Redis源码解析-skiplist跳跃表
前言跳跃表是一种有序数据结构,查找和插入操作的平均时间复杂度都是O(log n)。与常用的自平衡搜索树相比,例如红黑树,跳跃表通过多层链表实现,其结构简单易于实现,其查询删除效率通常堪比红黑树。本篇文章会对跳跃表简要说明,并重点分析Redis跳跃表核心源码其他文章:Redis简单动态字符串SDS源码解析正文1. 跳跃表跳跃表是通过多层有序链表实现的。如下图的有序链表,假设需要查找等于7的元素,必须从头结点(元素为1)依次遍历链表,共经过7次查询比较,找出目标结点。也就是其查询时间复杂度为O(1原创 2020-12-28 23:48:21 · 1631 阅读 · 0 评论 -
Visual Studio Code debug Redis
前言阅读Redis源码避免不了debug,直接使用GDB调试很不方便。本文分享使用Visual Studio Code调试Redis的方式。环境:MacOSX,Redis5.0正文1. 插件市场安装所需编译器我这里导入源码后到目录结构如下图。首次下载记得进入根目录编译cd redis-5.0.0make2. 添加debug所需配置注意 上图选中redis-server是可执行文件路径,编译后才会有贴出我的配置{ "version": "0.2.0", "co原创 2020-11-27 00:12:26 · 826 阅读 · 4 评论 -
Redis源码解析-SDS简单动态字符串
前言SDS是Redis基础数据结构之一,不同于C字符串(以/0结尾,无法保证二进制安全),SDS为Redis定义的一种抽象类型,该类型有诸多优点如获取字符串长度时间复杂度O(1)高效的扩容机制,还能杜绝缓冲区溢出惰性释放空间,减少内存重分配次数以提高性能二进制安全兼容部分C字符串函数正文1. 获取源码自行官网获取,SDS字符串源码主要在sds.c中如下图2. SDS数据结构以下代码是数据结构的定义,可以看到字符串有五种定义。只有第一种结构不一样,下面四种结构类似//sds数原创 2020-11-20 22:34:02 · 2659 阅读 · 0 评论 -
【Redis运维篇】Redis高可用之哨兵模式
前言Redis主从复制模式下,一旦主节点发生故障,需要人工干预进行故障转移,故障转移的实时性与准确性都无法保障。Redis2.6版本以上提供了Redis Sentinel(哨兵)来自动发现和转移故障,实现高可用相关文章启动多个Redis实例Redis搭建主从复制Redis Sentinel配置文件包含一个主结点,两个从结点,三个Sentinel结点的配置文件,已上传至GitHub正文1.Redis Sentinel概述Redis Sentinel包含若干个Sentinel节点和Re原创 2020-10-16 19:41:44 · 2044 阅读 · 0 评论 -
【Redis运维篇】Redis结点间的主从复制
前置条件在生产环境,Redis结点通常是单独部署在不同的物理机器上。想要在一台机器上模拟多节点,可以参考这篇文章同一台机器上启动多个Redis实例Redis结点的主从复制Redis实例可划分为主结点(master)和从结点(slave)一个主结点可以有多个从结点,一个从结点只能有一个主结点默认1.启动redis实例这里我启动两个实例,端口分别是6379和63802.建立主从关系1.指定端口连接实例redis-cli -p 63802.在6380示例执行以下命令,代表6380原创 2020-10-15 16:59:31 · 956 阅读 · 1 评论 -
【Redis运维篇】同一台机器上启动多个Redis实例
启动多个Redis实例如果不了解redis的基本配置,可以参考这篇文章Redis的基本配置首先拷贝并修改redis配置文件找到redis.conf所在目录,可通过find命令查找find / -name redis.conf进入该目录并拷贝一份redis.conf,并编辑cp redis.conf redis2.confvim redis2.conf端口port,不要跟其他端口冲突,这里我改成6380进程文件pidfile,redis启动时会自动分配进程号并写入文件,以下配置为了指定原创 2020-10-14 20:46:58 · 3850 阅读 · 0 评论 -
【Redis运维篇】Redis的安装与配置
Redis的几种安装方式(Linux)yum和rpmyum本质上是下载rpm包到当前机器,并安装。因此两种安装方式有相同的特点:都会自动添加环境变量,也就是如redis-server,redis-cli之类的命令直接可以执行yum install redisrpm -ivh redis.rpm //进入到rpm包所在目录,指定包名执行源码编译安装需下载源码编译,它的特点是:不会自动添加环境变量,执行redis-server,redis-cli需要到该命令下(命令就是可执行文件呢原创 2020-10-14 20:40:14 · 884 阅读 · 0 评论 -
Redis字符串SDS(simple dynamic string)
Redis字符串SDS(simple dynamic string)一 SDS结构定义struct { int len; //记录buf中已使用的字节数量 int free; //buf中未使用的字节数量 char buf[]; //字节数组}二 SDS与C字符串的区别C字符串获取字符串长度需要遍历字节数组,时间复杂度O(N)。SDS设置和更新长度在API执行时完成,获取长度时间复杂度O(1)由于C字符串扩容可能导致buffer overflow,缩减字符串会导致内存泄漏。原创 2020-08-01 19:36:09 · 780 阅读 · 0 评论