redis
文章平均质量分 70
勇敢的菜鸡
一只菜鸡的隐秘角落
展开
-
redis学习笔记 - 集群
主从复制CAP原理C: Consistent,一致性强一致性:更新之后的数据,后续的访问都能看到(CAP中默认为强一致性)弱一致性:更新之后的数据,可以允许部分或者全部访问不到(所有非强一致性的,都可以称为弱一致性)最终一致性:从节点可能暂时不能读到最新数据,但经过一段时间后,总是能追上主节点,提供一致性的结果;最终一致性是弱一致性的一种A: Availability,可用性P: Partition tolerance,分区容错性大多数分布式系统存在多个子网络,每个子网络称为一个区原创 2022-01-24 00:15:46 · 839 阅读 · 0 评论 -
redis专题笔记 - 跳跃列表skiplist
数据结构// 跳跃列表struct zsl { zslnode* header; // 跳跃列表的头结点 int maxLevel; // 跳跃列表当前最高层 map<string, zslnode*> ht; // hash结构所有键值对;???不太理解干啥的}// 跳跃列表节点struct zslnode { string value; // 节点值 dou原创 2022-01-03 17:14:37 · 847 阅读 · 0 评论 -
redis专题笔记 - 快速列表quicklist
数据结构// 快速列表数据结构struct quicklist { quicklistNode* head; // 指向快速列表头结点 quicklistNode* tail; // 快速列表尾结点 long count; // 元素总数 int node; // ziplist节点个数 int compressDepth; // 快速列表的压缩深度}// 快速列表头结点struct quicllistNode原创 2022-01-01 17:40:12 · 656 阅读 · 0 评论 -
redis专题笔记 - 小整数集合intset
数据结构// 小整数集合数据结构struct intset<T> { int32 encoding; // 整数位宽标识;16位、32位、64位 int32 length; // 元素个数 int<T> contents; // 整数数组,由encoding判定为16位、32位还是64位}intset的底层存储是一块连续的内存空间,其分布如下:intset数据结构的使用当set集合元素全是整数,且元素个数较少时,使用intset数据结构...原创 2022-01-01 16:42:33 · 439 阅读 · 0 评论 -
redis专题笔记 - 压缩列表ziplist
底层数据结构// ziplist数据结构struct ziplist { int32 zlbytes; // ziplist占用总字节数 int32 zltail_offset; // 最后一个元素距离起始位置的偏移量 int16 zllength; // 元素个数 T[] entries; // 元素内容列表 int8 zlend; // 0xFF,固定值,表示压缩列表结束位置}// ent原创 2021-12-31 00:59:51 · 686 阅读 · 0 评论 -
redis专题笔记 - 字典dict
底层数据结构// 字典本身数据结构struct dict { dictType *type; void *privdata; dictht ht[2]; // 2个哈希表,真正存储数据的地方;正常情况只会用其中一个,另一个在渐进式扩容时使用 int rehashidx; // 渐进式hash的进度,其他情况下为-1}// 单个哈希表数据结构struct dictht { dictEntry** table; // dictEntry指针列表原创 2021-12-28 23:35:10 · 506 阅读 · 1 评论 -
redis专题笔记 - 简单动态字符串SDS
在开始这一部分之前,首先要明确几个概念上的区别,否则容易搞混淆:面向用户的数据结构底层数据结构底层存储方式面向用户数据类型面向用户的数据类型,即我们常见的字符串、列表、哈希map等等。。。具体包括一下几类:Binary-safe strings: 二进制安全字符串Lists: 数组;字符串的集合,按照元素插入先后顺序排序Sets: 集合;字符串的集合,元素是唯一的、无排序的字符串Sorted sets: 有序集合;在集合的基础上,每个字符串元素绑定一个浮点数score,元素根据sco原创 2021-12-28 00:04:11 · 850 阅读 · 0 评论 -
redis专题笔记 - 管道、事务
管道指令执行过程首先我们看一下redis客户端发送一次指令后,客户端和服务端主要做了哪些事情,如下图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T5dZZwLb-1639903667531)(/Users/liushi/Desktop/工作/gliffy/pic/redis-send-path.jpeg)]客户端将指令包发到内核为套接字分配的发送缓冲区send buffer内核将send buffer中的数据发送到网卡设备网卡硬件将数据发送到网络经过层层路原创 2021-12-19 16:48:29 · 910 阅读 · 0 评论 -
redis专题笔记 - 持久化
RDB快照持久化Redis使用独立子进程进行快照持久化工作Redis是单线程程序,该线程负责监听多个客户端套接字的读写操作和内存数据的维护。快照持久化需要将内存数据全量写入磁盘,涉及大量的IO操作,如果仍然使用主线程进行,则必定阻塞正常请求RDB快照是一次全量备份,记录持久化开始那个时刻的内存数据,是内存数据的二进制序列化形式。Redis的快照持久化是基于linux系统的copy-on-write功能实现的COW传统的fork()传统的创建子进程操作,创建出的子进程和父进程共享代码段原创 2021-12-19 00:04:22 · 788 阅读 · 0 评论 -
redis专题笔记 - io模型
线程IO模型同步、异步、阻塞、非阻塞关于对同步异步阻塞和非阻塞的理解,在网上看到这样一个解释,感觉说的比较明白同步阻塞:你打电话告诉老板你要买某书,老板拿起电话听你说完就去查书,没有说话,你什么也不知道,在得到任何结果之前,你一直拿着电话干等,你此时什么也干不了。30分钟后老板直接把书送到你家,这时你才挂断电话。每次电话你都要得得到结果(书到家)后你才挂断电话,这是同步。你一直拿着电话等结果,这是阻塞。同步非阻塞:你打电话告诉老板你要买某书,老板拿起电话后说“我不知道有没有货,现在去查”便挂了电话原创 2021-12-18 17:44:09 · 1135 阅读 · 0 评论 -
redis-go源码阅读笔记
底层数据结构连接池pool// redis连接池type Pool struct { *pool.Slice // 核心是Slice结构体 c *Config // 连接池配置 type Config struct { *pool.Config // 包含连接池配置,下面有详解 Name string Proto string Addr string Auth string DialTimeo原创 2021-08-02 23:17:22 · 171 阅读 · 0 评论 -
redis连接耗尽问题排查
写在前面:这个笔记只是一个自我吐槽的帖子。。。没什么技术含量,如果不小心点进来,看到这就行了排查这个问题让我感触颇深,接触go已经快有半年时间了,但是很多知识点平时真的很难主动去接触,只有当问题来了,才会花时间在相关技术上探究;感觉这不是一个正常的技术积累过程,被动学习的技术提升很慢!但是如何主动学习呢?说实话,自己目前业余时间真不多,忙于业务,忙于出成果,可是这些成果好像很难对技术有较大提升(可能是业务方向决定的),技术人感觉太难了!是时候好好规划自己的时间和精力了!随便叨叨几句罢了。。。背原创 2021-07-27 00:38:58 · 1305 阅读 · 0 评论