Redis
handbang
这个作者很懒,什么都没留下…
展开
-
Redis事务
一.事务的实现三个阶段:事务开始命令入队事务执行事务队列:以下为例127.0.0.1:6379> MULTIOK127.0.0.1:6379> set "name" "cc"QUEUED127.0.0.1:6379> set "sex" "man"QUEUED127.0.0.1:6379> get "name"QUEUED127.0.0....原创 2020-02-24 14:45:32 · 109 阅读 · 0 评论 -
Redis发布与订阅
介绍:订阅频道:subscribe "news.sport" "news.movie"退订频道:unsubscribe "news.sport" "news.movie"二.模式的订阅与退订订阅模式:psubscribe "new.*"退订模式:punsubscribe "new.*"...原创 2020-02-24 14:41:54 · 92 阅读 · 0 评论 -
Redis集群
一.节点cluster meet <ip> <port> //向节点握手cluster nodes //查看集群节点进行节点握手,握手成够后,node节点会将该节点加入到node节点的集群中。节点启动:cluster-enabled 为yes则为集群模式启动节点的数据结构:struct clusterNode{ //创建节点时间 mstime_...原创 2020-02-24 14:40:26 · 89 阅读 · 0 评论 -
Redis事件
一.文件事件文件事件处理器由四部分组成:套接字I/O多路复用程序文件事件分派器事件处理器事件类型:当套接字为可读时,或者有新的可应答的套接字出现时,套接字产生AE_READABLE事件。当套接字为可写时,套接字产生AE_WRITABLE事件。文件事件的处理器:连接应答处理器。用于对连接服务器监听套接字的客户端进行应答。命令请求处理器。负责从套接...原创 2020-02-24 14:35:05 · 92 阅读 · 0 评论 -
AOF持久化
一.AOF持久化的实现命令追加当AOF持久化功能打开状态时,服务器在完成一个命令之后,会以协议格式将被执行的写命令追加到服务器状态的aof_buf的缓冲区末尾:struct redisServer{ //AOF缓冲区 sds aof_buf;};AOF文件写入与同步在服务器处理文件事件的时候可能会执行写命令,使得一些命令被添加到aof_buf中。在服务器每次结...原创 2020-02-24 14:31:31 · 215 阅读 · 0 评论 -
RDB持久化
一.简介为了解决内存数据库数据丢失的问题,所以开发出RDB进行数据持久化。二.RDB文件的创建与载入RDB的保存存在两种命令,SAVE和BGSAVE。其中save是阻塞的,在执行save命令期间,该服务器将不会执行其他命令,直到save命令执行结束。bgsave是非阻塞的,执行bgsave时会创建一个子线程,然后由子线程负责创建RDB文件。redis是没有主动载入RDB文件的命令的,在re...原创 2020-02-24 14:25:19 · 67 阅读 · 0 评论 -
Redis数据库
一.服务器中的数据库每个redisDb都代表一个数据库,而数据库的数量由服务器的dbnum决定。struct redisServer{ //一个数组,保存redis中所有数据库 redisDb *db; //服务器数据库数量 int dbnum;}二.切换数据库127.0.0.1:6379> set msg "hello world"OK127...原创 2020-02-24 14:22:17 · 54 阅读 · 0 评论 -
Redis对象
对象结构redisObject结构:typedef struct redisObject { //类型 unsigned type:4; unsigned notused:2; //编码 unsigned encoding:4; unsigned lru:22; //引用计数 int refcount; //指向底层实...原创 2020-02-24 14:13:54 · 53 阅读 · 0 评论 -
Redis快速列表(quicklist)
127.0.0.1:6379> rpush lst 1 3 5 10086 "hello world"(integer) 5127.0.0.1:6379> OBJECT encoding lst"quicklist"quicklist结构在quicklist.c中的解释为A doubly linked list of ziplists意思为一个由ziplist组成的双向链表。...原创 2020-02-24 10:23:14 · 355 阅读 · 0 评论 -
Redis压缩列表
翻译 2020-02-24 10:13:46 · 59 阅读 · 0 评论 -
Redis整数集合
一.整数集合的实现typedef struct intset{ //编码方式 unit32_t encoding; //集合包含的元素数量 unit32_t length; //保存元素的数组 int8_t contents[];}intset;二.升级当添加新的元素到整数集合中里面,并且新元素的类型比现有元素的类型都要长时,整数集合需要先...原创 2020-02-24 10:12:33 · 71 阅读 · 0 评论 -
Redis跳跃表
一.实现由zskiplistNode和zskiplist两个结构定义,其中zskiplistNode结构用于跳跃表节点,zskiplist结构用于保存跳跃表节点的相关信息,比如节点数量,表头表尾的节点指针。header:指向跳跃表的表头节点tail:指向跳跃表的表尾节点level:记录跳跃表内,层数最大的那个节点的层数(表头节点层数不计算在内)length:记录跳跃表的长度,也就是包...原创 2020-02-24 10:08:57 · 69 阅读 · 0 评论 -
Redis字典
哈希表table为一个数组。size为table中数组的大小。sizemask为size-1.used为hash表目前已有节点的数量。字典的结构type属性和privdata属性是针对不同类型的键值对,为创建多态字典而设置的。ht属性是包含两个项的数组,数组中每一个项都是一个dictht哈希表。哈希算法解决键冲突当有两个或两个以上的数量的键b被分配到哈希表数组同一索引时,我们...原创 2020-02-24 10:04:42 · 67 阅读 · 0 评论 -
Redis链表
1.链表的结构链表节点listNode:list结构:redis链表的特性:双端:链表节点带有prev和next,获取某个节点的前置与后置节点的复杂度都是0(1).无环:表头节点的prev和表未节点的next都指向NULL,对链表的访问以NULL为终点。带表头指针和表尾指针,通过list结构的head和tail,程序获取链表头节点和尾节点的复杂度都是O(1).带链表长度计算器...原创 2020-02-24 09:59:08 · 70 阅读 · 0 评论 -
简单动态字符串
struct sdshdr{ //记录buf中已使用字节的数量 //等于SDS中所保留字符串的长度 int len; //记录bug中未使用字节的数量 int free; //字节数组,用于保存字符串 char buf[];}2.SDS中buf的空间分配在C中,当对字符串进行操作的时候,会重新读字符串的长度,并重...原创 2020-02-24 09:53:32 · 272 阅读 · 0 评论