redis
易方达蓝筹
一蓑烟雨任平生
展开
-
用最简单的linux命令学习测试redis请求协议
redis请求协议,支持两种类型:PROTO_REQ_INLINE(内联型)、PROTO_REQ_MULTIBULK(批量回复协议型)。redis服务器通信中,用的都是协议型请求类型,同时也支持内联型请求类型(没有严格的协议封装,支持简单的请求方式接入)。1、批量回复协议型(支持批量命令)请求格式:*<参数数量> \r\n$<参数 1 的字节数量> \r\n<参数 1 的数据> \r\n...$<参数 N 的字节数量> \r\n<参数 N原创 2021-02-28 20:22:14 · 243 阅读 · 0 评论 -
redis6.0 多线程简介
1、简单介绍redis 的瓶颈并不在 CPU,而在内存和网络。Redis 6 中的多线程 主要在处理 网络 I/O 方面,对网络事件进行监听,分发给 work thread 进行处理,处理完以后将主动权交还给 主线程,进行 执行操作,当然后续还会有,执行后依然交由 work thread 进行响应数据的 socket write 操作。2、单线程网络处理模型当监听到某一时刻,端口接收到数据时,根据事件模型,进行不同的处理。对于所有的客户端的请求,根据就绪队列的顺序,进行串行化处理,处理完fd1,再处原创 2020-11-21 17:52:51 · 532 阅读 · 0 评论 -
libevent使用教程
本文转载于此1、简介基本的socket变成是阻塞/同步的,每个操作除非已经完成,出错,或者超时才会返回,这样对于每一个请求,要使用一个线程或者单独的进程去处理,系统资源没有办法支撑大量的请求。posix定义了可以使用异步的select系统调用,但是因为它采用了轮询的方式来判断某个fd是否变成active,效率不高。于是各系统就分别提出了基于异步的系统调用,例如Linux的epoll,由于在内核层面做了支持,所以可以用O(1)的效率查找到active的fd。基本上,libevent就是对这些高效IO的封装原创 2020-11-19 20:12:44 · 5106 阅读 · 1 评论 -
redis中epoll模型-IO多路复用详情解析
阅读完redis中的网络模型源码,该文章会基于源码是如何去实现的角度,去介绍epoll模型、事件处理。以及基于此,自己实现的多人聊天终端系统,并附带源码。1、epoll模型介绍epoll 是Linux内核为处理大量并发网络连接而提出的解决方案,能显著提升系统CPU利用率。epoll使用非常简单,总共只有3个API :epoll_create函数创建一个epoll专用的文件描述符,用于后续epoll相关API调用;epoll_ctl函数向epoll注册、修改或删除需要监控的事件;epoll_wai原创 2020-11-15 21:49:31 · 468 阅读 · 0 评论 -
redis数据结构-动态字符串
1、内存对齐1.1 对齐原因CPU和总线是64位的,所以CPU每次可以从内存里面拿出8个字节,而这8个字节是对齐的,也就是说只能是0-7,8-15, 16-23这样的,不能从中间拿。这个时候你要读一个double,如果double的地址可以被8整除,那你就只需要跟内存要一次数据。如果不能整除,那你就得跟内存要2次数据。1.2 对齐规则结构体变量的起始地址能够被其最宽的成员大小整除结构体每个成员相对于起始地址的偏移能够被其自身大小整除,如果不能则在前一个成员后面补充字节结构体总体大小能够被最宽的原创 2020-11-07 11:26:51 · 124 阅读 · 0 评论 -
redis数据结构-字典
1、字典数据结构1.1 哈希表数据结构typedef struct dictht { //哈希表 dictEntry **table; //存放一个数组的地址,数组存放着哈希表节点dictEntry的地址。 unsigned long size; //哈希表table的大小 unsigned long sizemask; //用于将哈希值映射到table的位置索引。它的值总是等于(size-1)。 unsigned long used; //记录哈希表已有的节点(键值对原创 2020-11-05 21:19:43 · 214 阅读 · 0 评论 -
redis源码阅读笔记-集群
1、clusterProcessPacket函数解析(先对MEET、PING、PONG这几个回复处理做分析)原创 2020-09-24 23:18:01 · 231 阅读 · 0 评论 -
redis集群搭建介绍
本文转载自:https://blog.csdn.net/men_wen/article/details/72853078 1. Redis Cluster介绍Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构达到负载均衡的目的。1.1.转载 2020-09-17 22:49:20 · 114 阅读 · 0 评论 -
redis集群中的纪元(epoch)
该文章转载来源: https://zhuanlan.zhihu.com/p/44658603纪元(epoch)Redis Cluster 使用了类似于 Raft 算法 term(任期)的概念称为 epoch(纪元),用来给事件增加版本号。Redis 集群中的纪元主要是两种:currentEpoch 和 configEpoch。1、currentEpoch这是一个集群状态相关的概念,可以当做记录集群状态变更的递增版本号。每个集群节点,都会通过 server.cluster->currentE.原创 2020-09-13 10:54:27 · 693 阅读 · 0 评论 -
CRC16算法构建
1、redis字节表生成 #include <stdio.h>#include <stdint.h> int main() { uint32_t num = 1L << 16 | 1L << 12 | 1L << 5 | 1; // 生成式h(x) printf("%x\n", num); uint8_t c = 0; // 一个字节值得所有情况 uint8_t tc = 0; // c得副本 ui原创 2020-08-19 18:23:21 · 198 阅读 · 0 评论 -
redis源码阅读笔记-哨兵原理
哨兵小知识Sentinel哨兵是redis官方提供的高可用方案,可以用它来监控多个Redis服务实例的运行情况。Redis Sentinel是一个运行在特殊模式下的Redis服务器。Redis Sentinel是在多个Sentinel进程环境下互相协作工作的。Sentinel系统有三个主要任务:监控:Sentinel不断的检查主服务和从服务器是否按照预期正常工作。提醒:被监控的Redis出现问题时,Sentinel会通知管理员或其他应用程序。自动故障转移:监控的主Redis不能正常工作,S原创 2020-07-23 21:52:08 · 334 阅读 · 0 评论 -
哨兵机制-配置文件sentinel.conf详细说明
# Example sentinel.conf # 哨兵sentinel实例运行的端口 默认26379port 26379 # 哨兵sentinel的工作目录dir /tmp # 哨兵sentinel监控的redis主节点的 ip port # master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。# quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了# senti转载 2020-07-20 08:41:14 · 1100 阅读 · 1 评论 -
redis源码阅读笔记-主从复制
1、从节点B-client 终端发起slaveof 192.168.1.1 6379命令2、节点B-server对slaveof命令响应操作,对节点B进行初始化设置,清空所有之前可能已主从复制占用的空间。slaveofCommand。节点B的状态就以下三种情况讨论:状态1:B节点是个单机节点,未与其他节点建立主从关系状态2:B节点已建立/正在建立主从关系,B是主节点状态3:B节点已建立/正在建立主从关系,B是从节点replicationSetMaster,初始化B-server节点。设置原创 2020-07-08 19:30:19 · 328 阅读 · 0 评论 -
set命令之redis内部存储方式
1、set key value xx/px time/time_ms (生存时间) t_string中: 上述参数都是robj对象,在这层之上把数据存在内存上 执行上述命令,无非是将这key_obj、value_obj、expire_obj三个对象信息存储在内存当中 (value_obj存储在哈希节点v->val中,指向值对象,expire_obj存储在v->u64,指向整型值) (1)对value_obj进行最优的编码(tryObjectEncoding)...原创 2020-05-19 22:21:57 · 323 阅读 · 0 评论