![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
飞飞羽毛球
这个作者很懒,什么都没留下…
展开
-
redis笔记-AOF持久化
1. AOF全称 Append Only File2. AOF持久化是通过保存redis服务器所执行的写命令来记录数据库状态3. AOF持久化功能三个步骤命令追加、文件写入、文件同步 a. 命令追加: 服务器执行完一个写命令之后,将被执行的命令追加到aof_buf缓冲区的末尾 b. 文件写入: 在每次结束一个事件循环前,会调用flushAppendOnlyFile()函数,判断是否将aof_buf缓冲区中的内容写入和保存到 AOF文件里 c. 文件同...原创 2020-09-13 20:58:54 · 186 阅读 · 0 评论 -
redis笔记-RDB持久化
1. redis为什么需要持久化? 因为redis是内存数据库,它将数据存储在内存里,如果服务器进程退出,内存中的数据也会丢失2. 生成rdb文件的两个命令 save: save命令会阻塞redis服务器进程,直到rdb文件创建完毕,在服务器进程阻塞期间,服务器不能处理任何命令请求 bgsave: bgsave会派生一个子进程,在子进程里创建rdb文件,服务器主进程会继续处理命令3. rdb文件的载入 rdb文件的载入没有专门的命令,只有在服务器启动时自动执行3...原创 2020-09-13 11:50:43 · 116 阅读 · 0 评论 -
redis笔记-过期键删除
1.三个删除策略 a. 定时删除 在设置键的过期时间的同时,创建一个定时器,让定时器在键过期时,立即执行对键执行删除操作 b. 惰性删除 放任键过期不管,但是每次从键空间获取键时,都检查获取的键是否过期,如果过期就删除 c. 定期删除 每隔一段时间,程序就对数据库进行一次检查,删除里面过期键2. redis服务器使用了惰性删除和定期删除两种策略3. 过期键惰性删除策略expireIfNeeded() 所有读数据库的redis...原创 2020-09-12 21:55:36 · 99 阅读 · 0 评论 -
redis笔记-对象的空转时长
1. redisObject的lru属性记录了该对象最后一次被命令访问的时间2. object idletime可以打印给定键的空转时长, 通过当前时间减去键的值对象的lru时间3. object idletime 在访问键的值对象时,不会修改对象的lru属性4. 如果服务器打开了maxmemory选项,并且用于内存回收的算法为volatile-lru或者allkeys-lru,当内存数超过了maxmemory时,优先删除空转时长较高的那部分键...原创 2020-09-10 08:41:07 · 390 阅读 · 0 评论 -
redis笔记-共享对象
000原创 2020-09-09 08:59:00 · 632 阅读 · 0 评论 -
redis笔记-有序集合对象
1. 有序集合的编码可以是ziplist或者skiplist2. 当使用ziplist编码时,每个集合元素使用两个紧挨在一起的压缩列表节点来保存,第一个节点保存元素的成员,第二个元素则保存元素的分值3. ziplist内的集合元素按分值从小到大进行排序,分值小的元素被放置表头方向4. 当使用skiplist编码的有序集合对象使用zset结构作为底层实现typedef struct zset { dict *dict; zskiplist *zsl;} zset;a原创 2020-08-31 22:50:38 · 81 阅读 · 0 评论 -
redis笔记-集合对象
1. 集合对象的编码可以是inset或者hashtable2. 当使用hashtable编码时,字典的每个键都是一个字符串对象,每个字符串对象包含了一个集合元素,而字典的值则全部被设置为null3. 使用intset条件a. 集合中所有元素都是整数值b.集合对象保存的元素数量不超过512个...原创 2020-08-31 22:17:16 · 83 阅读 · 0 评论 -
redis笔记-哈希对象
1. 哈希对象的编码可以是ziplist或者hashtable2. 当ziplist作为哈希对象的底层实现时,当有新的键值对时,程序会先将保存了键的压缩列表节点推入表尾,再将保存值的压缩列表节点推入表尾3. hashtable编码的哈希对象使用字典作为底层实现,键值对都使用一个字典键值对来保存4.使用ziplist的两个条件a.哈希对象保存的所有键值对的键和值的字符串长度都小于64字节b.键值对数量小于512个...原创 2020-08-30 21:55:16 · 84 阅读 · 0 评论 -
redis笔记-列表对象
1.列表对象的编码可以是ziplist或者linkedlist2.列表对象使用ziplist的两个条件a.列表对象保存的所有字符串长度小于64字节b.列表元素个数小于512个当不能同时满足上面两个条件时列表对象使用linkedlist编码3.linkedlist编码的列表对象使用双端链表作为底层实现,每个双端链表节点都保存了一个字符串对象...原创 2020-08-30 21:32:30 · 76 阅读 · 0 评论 -
redis笔记-字符串对象
1.字符串对象的编码可以是int、raw\或者embstr2. 如果字符串对象保存的是整数值,并且可以用long类型来表示,那么字符串对应的编码是int原创 2020-08-30 13:24:34 · 88 阅读 · 0 评论 -
redis笔记-压缩列表
1.压缩列表压缩列表是列表键和哈希键的底层实现之一, 当包含的少量列表项并且列表项是小整数值或者较短字符串时,redis会使用压缩列表键的底层实现2.压缩列表的构成zlbytes: 压缩列表的总长zltail: 尾节点距离压缩列表起始地址的便宜量zllen: 表示压缩列表包含的节点数量3.压缩列表节点previous_entry_length: 记录前一个节点的长度, 通过这个属性可以获取前一个节点的指针encoding: 记录节点content属性所保存数据的类型和长度原创 2020-08-27 23:06:42 · 103 阅读 · 0 评论 -
redis笔记-整数集合
1. 整数集合是集合键的底层实现之一当一个集合只包含整数值元素,并且这个集合的元素数量不多2.整数集合(intset)数据结构typedef struct intset {//编码方式 如int16_t int32_t等, 指定了contents存储的数据结构 uint32_t encoding;//集合包含的元素数量 uint32_t length;//保存元素的数组 int8_t contents[];} intset;contents数组是整数集合的底原创 2020-08-23 22:20:37 · 89 阅读 · 0 评论 -
redis笔记-跳跃表
1. 跳跃表定义是一种有序数据结构,通过每个节点中维持多个指向其他节点的指针,从而快速访问节点的目的. 查找节点复杂度 平均O(logN)\最坏O(N),大部分情况跳跃表的效率可以和平衡数相媲美,实现更简单.2. redis使用跳跃表最为有序集合键的底层实现之一,当有序集合元素数量多,或者成员是比较长的字符串,redis使用跳跃表2. 跳跃表示例3. zskiplist结构typedef struct zskiplist {//头尾节点 struct...原创 2020-08-22 16:58:53 · 124 阅读 · 0 评论 -
redis笔记-字典
1.字典结构typedef struct dict {//类型特定函数 dictType *type;//私有数据, 为特定函数传参数 void *privdata;//哈希表 ht[0]正在用的哈希表 ht[1] rehash时会用到 dictht ht[2];//-1时没有进行rehash,否则代表rehash的索引 long rehashidx; /* rehashing not in progress if rehashidx == -1 */原创 2020-08-18 23:39:23 · 96 阅读 · 0 评论 -
redis笔记-链表
1. 列表节点typedef struct listNode {//前置节点 struct listNode *prev;//后置节点 struct listNode *next;//值 void *value;} listNode;2.redis使用list持有链表typedef struct list {//头节点 listNode *head;//尾节点 listNode *tail;//节点复制函数 void *(*dup原创 2020-08-17 23:05:49 · 71 阅读 · 0 评论 -
redis笔记-sds
redis版本 3.0.01. sds值结构(sds.h)struct sdshdr {//buf中已使用的长度 unsigned int len;//buf中未使用的长度 unsigned int free;//字节数组 用于保存字符串, 最后一位是 \0 char buf[];};2.常数获取字符串的长度c语言获取字符串的长度时,需要遍历字符串,复杂度为O(n), SDS的len属性记录了长度,所以获取字符串的复杂度为O(1)3.杜绝缓冲区溢出原创 2020-08-16 17:28:21 · 133 阅读 · 0 评论 -
Redis指令简介(二)
1.字符串incr 将键存储的值加上1decr 将键存储的值减去1incrby 将键存储的值加上特定的值decrby 将键存储的值的减去特定的值append 将value值追加到给定键存储的值的后面2.列表ltrim 只保留start到end的元素3集合scrad 返回集合内元素的数量sdiff 存在于第一个集合,但是不存在与其他集合中的元素(差集运算)sinter 同时存在于所有集合中的元素(交...原创 2018-06-10 18:03:58 · 226 阅读 · 0 评论 -
Redis指令简介(一)
1.字符串get 获取存储在给定键中的值set 设置存储在给定键中的值del 删除存储在给定键中的值2.列表rpush 将给定值推入列表的右端lrang 获取列表在给定范围上的所有值lindex 获取列表在给定位置上的单个元素lpop 从列表的左端弹出一个值,并返回被弹出的值3.集合sadd 将元素添加到集合sismember 检查一个元素是否在集合中smembers 返回集合包含的所有元素...原创 2018-06-09 23:07:20 · 212 阅读 · 0 评论