Redis
文章平均质量分 61
鱼满仓
1.https://github.com/luolaifa000 /br
2.不要把递归想复杂,想简单点。
展开
-
Redis内部数据结构详解——intset
本文是《Redis内部数据结构详解》系列的第七篇。在本文中,我们围绕一个Redis的内部数据结构——intset展开讨论。Redis里面使用intset是为了实现集合(set)这种对外的数据结构。set结构类似于数学上的集合的概念,它包含的元素无序,且不能重复。Redis里的set结构还实现了基础的集合并、交、差的操作。与Redis对外暴露的其它数据结构类似,set的底层实现,随着元素类型是否...转载 2018-11-13 17:48:13 · 395 阅读 · 0 评论 -
Redis rdb数据结构 源码详解
记录下来以后方便回忆,需要时随时翻阅一、Redis RDB文件的数据结构 二、Redis RDB文件的十六进制码和对应的字符 三、Redis save和bgsave命令处理过程 四、Redis save和bgsave命令处理过程 统一调用的save函数,写数据到dump.rdb文件里面 五、Redis 备份 是 先生成临时文件在替换旧的文件...原创 2018-11-16 23:41:27 · 356 阅读 · 0 评论 -
Redis 网络请求处理模块
Redis 网络请求处理模块一、关联的文件列表SOCKET只是TCP/IP协议的抽象软件层,提供简单的API给用户操作TCP/IP协议来进行网络请求处理,UINX一切皆文件的理念,所以SOCKET只是一个特殊的文件描述符。 摘要:redis的用TCP协议,socket来监听和读写网络请求,将需要监听的事件放入epoll事件管理里面,然后收集触发的事件,然后进行相应的命令处理。R...原创 2018-11-19 13:58:53 · 863 阅读 · 0 评论 -
Redis 通讯协议的格式
协议说明Redis协议在以下几点之间做出了折衷:简单的实现 快速地被计算机解析 简单得可以能被人工解析 网络层 Redis在TCP端口6379上监听到来的连接,客户端连接到来时,Redis服务器为此创建一个TCP连接。在客户端与服务器端之间传输的每个Redis命令或者数据都以\r\n结尾。请求Redis接收由不同参数组成的命令。一旦收到命令,将会立刻被处理,并回复给客...转载 2018-11-17 09:26:19 · 1187 阅读 · 0 评论 -
Redis AOF原理
AOF 写入键值对过程Redis 分别提供了 RDB 和 AOF 两种持久化机制:RDB 将数据库的快照(snapshot)以二进制的方式保存到磁盘中。 AOF 则以协议文本的方式,将所有对数据库进行过写入的命令(及其参数)记录到 AOF 文件,以此达到记录数据库状态的目的。本章首先介绍 AOF 功能的运作机制, 了解命令是如何被保存到 AOF 文件里的, 观察不同的 AOF ...原创 2018-11-17 12:07:40 · 20885 阅读 · 3 评论 -
Redis epoll事件模型
Redis的事件模型在这里我们用ae_epoll.c,epoll详细工作原理 https://blog.csdn.net/luolaifa000/article/details/84190836一、redis对原始的epoll数据结构进行了封装 二、监听的入口函数 三、aeprocessevents 四、ae_epoll里面的事件触发处理...原创 2018-11-17 21:32:03 · 867 阅读 · 0 评论 -
Redis 并发原子性原理
Redis原子性原理摘要:1、Redis是单进程单线程的网络模型,用的是epoll网络模型,网络模型都是单线程异步非阻塞处理网络请求2、Redis的单线程处理所有的客户端连接请求,命令读写请求。(有些任务比如rdb和aof等操作是fork子进程处理的,不会影响redis主线程处理客户端的命令)3、Redis提供的所有API操作,相对于服务端方面都是one by one执行的,命令是...原创 2018-11-20 11:58:57 · 27139 阅读 · 14 评论 -
Redis 主从同步原理(转载)
Redis的主从同步机制可以确保redis的master和slave之间的数据同步。按照同步内容的多少可以分为全同步和部分同步;按照同步的时机可以分为slave刚启动时的初始化同步和正常运行过程中的数据修改同步;本文将对这两种机制的流程进行分析。全备份过程中,在slave启动时,会向其master发送一条SYNC消息,master收到slave的这条消息之后,将可能启动后台进程进行备份,备份完...转载 2018-11-20 13:55:41 · 164 阅读 · 0 评论 -
redis->predis-lua脚本
192.168.127.128:6379>eval "return redis.call('set',KEYS[1],ARGV[1])" 1 name luolaifa OK 192.168.127.128:6379>get name "luolaifa" #哨兵模式下一主多从,执行setnx命令,predis ...原创 2019-01-04 11:35:05 · 775 阅读 · 0 评论 -
Redis Lua 源码调用流程
1.Redis服务端在启动的时候会初始化lua的运行环境,Redis是C写的,所以实际上就是C与LUA的交互。2.Lua 是通过一个虚拟堆栈来与C交互的,如下图。请注意红色数字,代表通信顺序:1) C想获取Lua的myName字符串的值,所以它把myName放到Lua堆栈(栈顶),以便Lua能看到2) Lua从堆栈(栈顶)中获取myName,此时栈顶再次变为空3) Lua拿...原创 2019-01-13 21:44:57 · 496 阅读 · 0 评论 -
Laravel 队列执行流程
执行队列php artisan queue:work执行队列过程,从queues:detault:delayed有序集合拿出到期的JOB数据放到queues:detault队列中,然后从首先从queues:detault 队列拿出要执行的JOB数据放入到queues:detault:reserved有序集合中,然后laravel 这边的延迟队列使用了三个队列。queue:de...原创 2019-07-26 16:30:31 · 2491 阅读 · 0 评论 -
Redis 主从复制(读写分离)————哨兵(主从切换)配置(转载)
当数据量变得庞大的时候,读写分离还是很有必要的。同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能。redis提供了一个master,多个slave的服务。 准备三个redis服务,依次命名文件夹子master,slave1,slave2.这里为在测试机上,不干扰原来的redis服务,我们master使用6000端口。...转载 2018-11-21 13:34:12 · 162 阅读 · 0 评论 -
Redis 哨兵模式
摘要:Redis的哨兵模式,这几天对哨兵模式也花了不少时间来弄清楚它的原理,其中也参考了其它人的一些理解,自己在一步一步看源码才写出下面自己对哨兵模式的一些理解,方便以后在日常工作中可以更好的使用REDIS的哨兵模式。Redis哨兵也是单个redis服务实例,只是在启动的时候和处理的命令跟普通redis服务器不同,配置的时候只需要配置需要监控的master服务器配置,因为slaves和其他...原创 2018-11-21 09:47:19 · 503 阅读 · 0 评论 -
Redis 哨兵模式的源码(转载)
建议阅读:1、Sentinel的理论部分见:Redis之SentinelI、上帝视角1、Sentinel也是Redis服务器,只是与普通服务器职责不同,其负责监视Redis服务器,以提高服务器集群的可靠性。Sentinel与普通服务器共用一套框架(网络框架,底层数据结构,订阅与发布机制),但又有其独立的运行代码。为维护Sentinel系统的正常运行,我们先来看Redis为Sentin...转载 2018-11-20 21:52:13 · 507 阅读 · 0 评论 -
Redis内部数据结构详解(4)——ziplist
本文是《Redis内部数据结构详解》系列的第四篇。在本文中,我们首先介绍一个新的Redis内部数据结构——ziplist,然后在文章后半部分我们会讨论一下在robj, dict和ziplist的基础上,Redis对外暴露的hash结构是怎样构建起来的。我们在讨论中还会涉及到两个Redis配置(在redis.conf中的ADVANCED CONFIG部分): hash-max-z...转载 2018-11-13 20:44:08 · 115 阅读 · 0 评论 -
Redis内部数据结构详解(5)——quicklist
本文是《Redis内部数据结构详解》系列的第五篇。在本文中,我们介绍一个Redis内部数据结构——quicklist。Redis对外暴露的list数据类型,它底层实现所依赖的内部数据结构就是quicklist。我们在讨论中还会涉及到两个Redis配置(在redis.conf中的ADVANCED CONFIG部分): list-max-ziplist-size -2 li...转载 2018-11-15 13:49:00 · 174 阅读 · 0 评论 -
Redis内部数据结构详解(6)——skiplist
本文是《Redis内部数据结构详解》系列的第六篇。在本文中,我们围绕一个Redis的内部数据结构——skiplist展开讨论。Redis里面使用skiplist是为了实现sorted set这种对外的数据结构。sorted set提供的操作非常丰富,可以满足非常多的应用场景。这也意味着,sorted set相对来说实现比较复杂。同时,skiplist这种数据结构对于很多人来说都比较陌生,因为大...转载 2018-11-15 13:57:09 · 133 阅读 · 0 评论 -
Redis底层数据结构dict
dict是Redis底层数据结构中实现最为复杂的一个数据结构, 其功能类似于C++标准库中的std::unordered_map, 其实现位于 src/dict.h 与 src/dict.c中, 其关键定义如下:typedef struct dictEntry { void *key; union { void *val; uint64_t u...转载 2018-11-15 14:04:21 · 515 阅读 · 1 评论 -
Redis底层数据结构--链表
这是普通的链表实现, 链表结点不直接持有数据, 而是通过void *指针来间接的指向数据. 其实现位于 src/adlist.h与src/adlist.c中, 关键定义如下:typedef struct listNode { struct listNode *prev; struct listNode *next; void *value;} listNode;...转载 2018-11-15 14:05:03 · 187 阅读 · 0 评论 -
Redis底层数据结构--SDS
这是一种用于存储二进制数据的一种结构, 具有动态扩容的特点. 其实现位于src/sds.h与src/sds.c中, 其关键定义如下:typedef char *sds;/* Note: sdshdr5 is never used, we just access the flags byte directly. * However is here to document the layo...转载 2018-11-15 14:05:42 · 281 阅读 · 0 评论 -
Redis订阅与发布原理
记录下来以后方便回忆,需要时随时翻阅Redis 订阅与发布 原理client->pubsub_channels 是客户端维护的一个以dict结构的维护的订阅频道哈希表,VAL是NULL,不需要值。server->pubsub_channels 是服务端维护的一个以dict结构的维护的订阅频道哈希表,VAL是以client维护的双向链表adlist。一、订阅订阅流程:...原创 2018-11-15 20:43:05 · 1229 阅读 · 0 评论 -
Redis源码架构图
原创 2018-11-14 21:51:44 · 1006 阅读 · 0 评论 -
Redis 哨兵模式的理论(转载)
Sentinel是Redis的高可用性解决方案,本文主要介绍Sentinel的初始化过程及其与一般Redis服务器的区别。并说明Sentinel监视服务器的方法和原理,说明Sentinel如何判断一个服务器是否在线,并介绍故障转移过程。I、上帝视角看Sentinel由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并...转载 2018-11-20 17:46:05 · 324 阅读 · 0 评论 -
【PHP】 phpredis 长连接实现原理
前言; 多年以前有个大佬问过一个问题,PHP的phpredis第三方扩展(客户端)怎么实现与redis服务端维持长连接,并且每个请求是怎么复用这些连接的,今天才突然想一探究竟,便翻了翻一下源码。PHP源码版本是php-7.2.19, phpredis扩展版本是redis-5.0.2。 首先在传统的网络通信中,普通的交互流程中,客户端发起连接请求,三次握手...原创 2019-10-05 23:07:21 · 2972 阅读 · 0 评论