redis
文章平均质量分 93
wangxiaoangg
这个作者很懒,什么都没留下…
展开
-
布隆过滤器原理与golang实现
维基百科布隆过滤器实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中当一个元素被加入集合时,通过 K 个散列函数将这个元素映射成一个位数组中的 K 个点位(offset),把它们置为 1。判断是否存在时,只要看这些点是不是都是 1。如果这些点有任何一个 0,则被检元素不在;如果都是 1,则被检元素很在。这就是布隆过滤器的基本思想。//todo。原创 2022-10-19 20:48:53 · 773 阅读 · 0 评论 -
redis源码浅析--二十二.监视器的实现
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation如有错误欢迎指正参考书籍:《redis的设计与实现》redis 可以通过monitor命令,客户端可以将自己变成一个监视器,实时的接受并打印服务器当前处理的命令;一 成为监视者二 向监视器发送命令信息...原创 2021-04-20 19:33:40 · 320 阅读 · 0 评论 -
redis源码浅析--二十一.慢查询日志的实现
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation如有错误欢迎指正参考书籍:《redis的设计与实现》redis的慢查询日志用于记录执行时间查过给定时长的命令请求;我们可以用慢查询日志来监视和优化查询速度;相关配置项:slowlog-log-slower-than执行时间超过slowlog-log-slower-than微秒的命令会记录到慢查询日志中 s...原创 2021-04-16 18:49:43 · 288 阅读 · 0 评论 -
redis源码浅析--二十.BIT MAP的实现
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation如有错误欢迎指正参考书籍:《redis的设计与实现》推荐阅读:redis-Bitmaps 基础概念redis提供了SETBIT、GETBIT、BITCOUNT、BITOP 、BITFIELD(起始版本3.2.0)四个命令处理二进制位数组;一 位数组的表示redis使用字符串对象来表示位数组;因为SDS是二进制安全...原创 2021-04-13 20:05:40 · 500 阅读 · 0 评论 -
redis源码浅析--十九.排序的实现
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation如有错误欢迎指正参考书籍:《redis的设计与实现》原创 2021-03-26 18:56:08 · 435 阅读 · 0 评论 -
redis源码浅析--十八.事务的实现
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation如有错误欢迎指正参考书籍:《redis的设计与实现》Redis通过MULTI、EXEC、WATCH等命令实现事务。Redis事务将多个命令打包,然后一次性、按照顺序执行命令请求;在事务执行期间,服务器不会中断事务而去执行其他客户端请求;一 事务的实现1.1事务开始1.2命令入队1.3事务队列...原创 2021-03-19 17:23:05 · 450 阅读 · 0 评论 -
redis源码浅析--十七.发布与订阅的实现
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation如有错误欢迎指正参考书籍:《redis的设计与实现》目录一 频道的订阅与退订1.1订阅频道1.2 取消订阅二 模式的订阅与退订2.1订约模式2.2取消订约模式三 发送消息四 查看订阅信息Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) .原创 2021-03-11 18:40:03 · 331 阅读 · 0 评论 -
redis源码浅析--十六.cluster集群的设计与实现
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation如有错误欢迎指正参考书籍:《redis的设计与实现》原创 2021-03-01 18:54:05 · 353 阅读 · 1 评论 -
redis集群简介
redis3.0推出了分布式解决方案 redis Cluster;当单机遇到了内存、并发、流量等瓶颈时,可以采用Cluster架构方案来达到负载均衡目的。一 理论基础分布式数据库首先要解决如何把整个数据集按照分区规则映射到多个节点上,每个节点负责整体数据的一个子集。常见的分区规则有哈希分区和顺序分区两种。下面介绍集中常见的哈希分区规则;节点取余分区 使用特定的数据,如Redis的键或用户ID,再根据节点数量N使用公式: hash(key)%N计算出哈希值,用来决定数据映射到哪一个节原创 2021-01-28 18:17:26 · 483 阅读 · 0 评论 -
redis源码浅析--十五.哨兵sentinel的设计与实现
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation如有错误欢迎指正参考书籍:《redis的设计与实现》推荐阅读 哨兵的的搭建:https://blog.csdn.net/qq_16399991/article/details/99968357...原创 2021-01-25 19:53:53 · 245 阅读 · 0 评论 -
redis源码浅析--十四.多机数据库的实现(二)--复制的实现SLAVEOF、PSYNY
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation如有错误欢迎指正参考书籍:《redis的设计与实现》推荐阅读 复制的搭建:https://blog.csdn.net/qq_16399991/article/details/99881319 复制的实现原理:https://blog.csdn.net/qq_16399991/article/details/109748991...原创 2020-12-26 17:25:20 · 302 阅读 · 1 评论 -
redis源码浅析--十四.多机数据库的实现(一)--新老版本复制功能的区别与实现原理
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation如有错误欢迎指正参考书籍:《redis的设计与实现》复制功能相关概念 搭建方法可以参考:https://blog.csdn.net/qq_16399991/article/details/99881319...原创 2020-11-19 20:13:34 · 325 阅读 · 0 评论 -
浅谈tcp socket的backlog参数
最近看redis源码,redis服务在初始化的时候,会设置 tcp_backlog参数;该参数是用于设置底层tcp socket的backlog参数;backlog参数主要用于底层方法int listen(int sockfd, int backlog), 在理解backlog参数之前,先了解下tcp在内核的请求过程,tcp的三次握手:client发送SYN到server,将状态修改为SYN_SEND,如果server收到请求,则将状态修改为SYN_RCVD,并把该请求放到syns queu.原创 2020-10-30 18:02:51 · 559 阅读 · 0 评论 -
redis源码浅析--十三.单机数据库的实现-服务端 - 时间事件
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation如有错误欢迎指正参考书籍:《redis的设计与实现》相关推荐:redis中的时间事件https://blog.csdn.net/qq_16399991/article/details/107850466目录serverCron时间事件一.更新服务器时间缓存二.更新LRU时钟三.增加操作采样信息四.更新服务..原创 2020-10-30 14:01:59 · 310 阅读 · 0 评论 -
redis源码浅析--十三.单机数据库的实现-服务端 - redis一条命令的执行过程
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》一.命令请求的执行过程一个命令请求从发送到获得回复的过程中,客户端和服务器需要完成一系列操作。举个例子:1) 客户端向服务器发送命令请求SET KEY VALUE。2)服务器接收并处理客户端发来的命令请求SETKEYVALUE,在数据库中进行设置操作,并产生命令回复OK。3)..原创 2020-10-16 18:51:26 · 341 阅读 · 0 评论 -
redis源码浅析--十二.单机数据库的实现-客户端
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》Redis服务器是典型的一对多服务器程序:一个服务器可以与多个客户端建立网络连接,接受、处理、回复每个客户端发送命令请求。 通过使用由I/O多路复用技术实现的文件事件处理器,Redis服务器使用单线程单进程的方式来处理命令请求,并与多个客户端进行网络通信。 服务器都为客户端建立...原创 2020-08-11 20:52:39 · 458 阅读 · 0 评论 -
redis源码浅析--十一.事件(下)时间事件
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》一 时间事件redis的时间事件分为两大类定时事件:让程序在指定时间只执行一次; 周期事件:让程序每间隔一段时间执行一次;...原创 2020-08-10 20:54:02 · 445 阅读 · 0 评论 -
redis源码浅析--十一.事件(上)文件事件
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》redis服务器是一个事件驱动程序,服务器需要处理一下两类事件:文件事件 redis服务器通过套接字与客户端(或者其他redis服务器)进行链接,而文件事件就是对操作套接字的抽象。 服务器与客户端的通信会产生相应的文件事件,服务器通过监听并处理这些事件完成一系列网络操作。 时间事件 服务.原创 2020-07-29 18:05:47 · 319 阅读 · 0 评论 -
redis源码浅析--十-AOF(append only file)持久化
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》除了RDB持久化功能外,redis还提供了AOF持久化功能;RDB持计划功能是将键值编码后保存到RDB文件键中,而AOF是将执行的命令保存到AOF文件中;一.AOF功能的实现aof功能可以分为 命令写入(append)、文件同步(sync)、文件重写(rewrite)、重启加载(loa..原创 2020-07-23 20:43:02 · 644 阅读 · 0 评论 -
redis源码浅析--九-RDB持久化
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》RDB是什么,解决了什么问题,是如何实现的因为redis是内存数据库,一旦服务器进程意外退出,数据库中数据也会丢失;RDB就是为了解决这个问题,提供的数据持久化功能;RDB是将某个时间点的数据库保存到一个RDB文件中,RDB文件是一个经过压缩了的二进制文件,通过该文件可以还原数据库状态;.原创 2020-07-20 21:35:03 · 287 阅读 · 0 评论 -
redis源码浅析--八-数据库的实现
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》一 服务器中的数据库redis服务器将所有的数据库都保存在server.h/redisServer结构的db数组中;数组的每一项都是一个server.h/redisDb结构,每个结构代表一个数据库;struct redisServer { /* General */ ....原创 2020-07-16 15:00:52 · 370 阅读 · 0 评论 -
redis源码浅析--七-redisObject对象(下)(内存回收、共享)
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》原创 2020-07-15 14:21:00 · 321 阅读 · 0 评论 -
redis源码浅析--七-redisObject对象(上)(对象的类型与编码)
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》redis提供5种数据类型:字符串、列表、哈希、集合、有序集合;实际上每种数据类型都有自己底层的内部编码实现;如list数据结构的底层编码方式有 压缩列表、跳表这样做的好处就是1.可以针对不通的场景使用不同编码方式,不同的编码能够在各自场景下发挥优势;2.当开发更优的编码方式时,可以..原创 2020-06-15 21:48:00 · 214 阅读 · 0 评论 -
redis源码浅析--六-压缩列表
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》一.数据结构1.压缩列表的构成以ziplistNew(创建一个空的压缩列表)接口为入口,可以更容易的理解压缩列表的构成//压缩列表的头部大小 = 一个uint32(记录列表总长度) + 一个uint32(到表尾节点需要偏移的字节数) + uint16(记录总节点数量)/* Th.原创 2020-06-10 20:55:18 · 279 阅读 · 0 评论 -
redis源码浅析--五-整数集合的实现
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》相关推荐:字节序前言intset是集合数据类型的底层实现之一,当结合中只包含整数元素,并且元素个数不多时,redis就会使用intset做为集合的底层实现。一.数据结构...原创 2020-03-19 21:32:16 · 270 阅读 · 0 评论 -
redis源码浅析--四-redis跳跃表的实现
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》原创 2020-03-17 21:18:27 · 296 阅读 · 0 评论 -
redis源码阅读--二-链表
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》一 数据结构的定义/* Node, List, and Iterator are the only data structures used currently. */type...原创 2020-02-21 18:56:28 · 273 阅读 · 0 评论 -
redis源码阅读-一--sds简单动态字符串
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》一.SDS是什么redis没有直接使用c语言中的传统字符串;SDS(simple dynamic string)是redis自己构建抽象类型,是对c传统字符串的一层封装;实现的源码主...原创 2020-01-13 21:56:04 · 377 阅读 · 0 评论 -
redis源码阅读--三-redis散列表的实现
环境说明:redis源码版本 5.0.3;我在阅读源码过程做了注释,git地址:https://gitee.com/xiaoangg/redis_annotation参考书籍:《redis的设计与实现》redis dict实现源码主要位于dict.c和dict.h中;一.dict主要结构体dich.h/dictEntry结构体用于存储一个键值对;属性key键名称;val是联合体...原创 2019-12-04 17:26:05 · 944 阅读 · 0 评论 -
redis 哨兵(sentinel)安装部署
一 简介Redis Sentinel是一个分布式架构, 其中包含若干个Sentinel节点和Redis数据节点, 每个Sentinel节点会对数据节点和其余Sentinel节点进行监控, 当它发现节点不可达时, 会对节点做下线标识。 如果被标识的是主节点, 它还会和其他Sentinel节点进行“协商”, 当大多数Sentinel节点都认为主节点不可达时, 它们会选举出一个Sentinel节点来...原创 2019-08-21 22:02:58 · 745 阅读 · 0 评论 -
redis主从复制
一.配置1.建立复制配置复制的方式三种:在配置文件中加入slaveof{masterHost}{masterPort}随Redis启动生效。 在redis-server启动命令后加入--slaveof{masterHost}{masterPort}生效 直接使用命令: slaveof{masterHost}{masterPort}生效。2.断开复制在从节点执行slav...原创 2019-08-20 21:27:02 · 356 阅读 · 0 评论 -
redis-HyperLogLog 基础概念
一.基本概念HyperLogLog并不是一种新的数据结构(实际类型为字符串类型) , 而是一种基数算法, 通过HyperLogLog可以利用极小的内存空间完成独立总数的统计, 数据集可以是IP、 Email、 ID等。 HyperLogLog提供了3个命令:pfadd、 pfcount、 pfmerge。例如2016-03-06的访问用户是uuid-1、 uuid-2、uuid-3、 uu...原创 2019-06-18 21:00:54 · 282 阅读 · 0 评论 -
Redis---quickList(快速列表)
正文1. 概述 考虑到链表的附加空间相对太高,prev 和 next 指针就要占去 16 个字节 (64bit 系统的指针是 8 个字节),另外每个节点的内存都是单独分配,会加剧内存的碎片化,影响内存管理效率。 后续版本对列表数据结构进行了改造,使用 quicklist 代替了 ziplist 和 linkedlist.2. 基本结构 quickList 是 ...转载 2019-06-01 14:33:01 · 4007 阅读 · 0 评论 -
redis-API的理解和使用
目录一.前言二.预备2.1全局命令2.2 数据结构和编码2.3单线程架构三.字符串3.1 命令3.2 内部编码3.3典型使用场景四.哈希4.1命令4.2内部编码五.列表5.1命令5.2内部编码5.3使用场景六. 集合6.1命令6.2内部编码6.3使用场景七.有序集合7.1命令7.2内部编码...原创 2019-01-21 23:14:37 · 761 阅读 · 0 评论 -
记一次Redis bitmap导致的miss问题
redis-Bitmaps 基础概念:https://blog.csdn.net/qq_16399991/article/details/83512937Redis 内存淘汰机制:https://blog.csdn.net/qq_16399991/article/details/83547286背景描述大致需求:脚本批量导入用户数据到redis中,使用bitmap标记用户是否在导入的白...原创 2018-10-30 21:27:33 · 1365 阅读 · 1 评论 -
Redis 内存淘汰机制
参考:http://blog.jobbole.com/105335/简介Redis内存淘汰指的是用户存储的一些键被可以被Redis主动地从实例中删除,从而产生读miss的情况,那么Redis为什么要有这种功能?这就是我们需要探究的设计初衷。Redis最常见的两种应用场景为缓存和持久存储,首先要明确的一个问题是内存淘汰策略更适合于那种场景?是持久存储还是缓存?假设我们有一个Redi...转载 2018-10-30 19:47:08 · 1147 阅读 · 1 评论 -
redis-Bitmaps 基础概念
整理自《redis开发与运维》3.5 Bitmaps3.5.1 数据结构模型现代计算机用二进制(位) 作为信息的基础单位, 1个字节等于8位, 例如“big”字符串是由3个字节组成, 但实际在计算机存储时将其用二进制表示, “big”分别对应的ASCII码分别是98、 105、 103, 对应的二进制分别是01100010、 01101001和01100111, 如图3-9所示。...原创 2018-10-30 09:43:01 · 2909 阅读 · 0 评论