redis系列:常见问题 Posted on 2021-09-14 Edited on 2022-10-19 In Redis Symbols count in article: 1.8k Reading time ≈ 2 mins. Redis常用数据结构和使用场景(Zset中跳表数据结构)缓存击穿 缓存穿透 缓存雪崩 缓存击穿:访问一个缓存和数据库都不存在的 key,此时会直接打到数据库上,并且查不到数据,没法写缓存,所以下一次同样会打到数据库上。此时,缓存起不到作用,请求每次都会走到数据库,流量大时数据库可能会被打挂。此时缓存就好像被“穿透”了一样,起不到任何作用。 Read more »
redis系列:对象大总结(字符串,列表,哈希,集合,有序集合底层结构) Posted on 2021-09-14 Edited on 2022-10-19 In Redis Symbols count in article: 2.6k Reading time ≈ 2 mins. 对象类型和编码在redis中,并没有使用之前学到的数据结构来直接构建数据库,而是基于这些数据结构构建了一个对象系统,这个系统包含了字符串对象,列表对象,哈希对象,集合对象和有序集合对象五种类型。 Read more »
redis系列:数据库的实现 Posted on 2021-09-14 Edited on 2022-10-19 In Redis Symbols count in article: 993 Reading time ≈ 1 mins. 服务端数据库redis中将所有的数据库信息保存在redisServer结构体中,结构体中的变量有两百多个,这里就不写了。主要的结构成员是: 123struct redisServer{ redisDb* db;}; Read more »
redis系列:raft一致性算法 Posted on 2021-09-14 Edited on 2022-10-19 In Redis Symbols count in article: 3.7k Reading time ≈ 3 mins. Raft算法 基本概念在任何时刻,服务器节点都处于三个状态之一:leader、follower或者candidate。 follwer:不会发送任何请求,只相应leader和candidate的请求; leader:处理所有客户端请求,如果一个可会断和follower通信,那么follower会重定向给leader; candidate:用来选举新leader。下图展示了上面三种状态的转换: Read more »
ubuntu 权限修改错误深坑 Posted on 2021-09-14 Edited on 2023-04-12 In Bugs Symbols count in article: 678 Reading time ≈ 1 mins. 使用vim 修改了/etc/sudoers 下的sudoers,导致无法鉴权。这两天在嵌入式linux上搞网络编程,发现ubuntu设置的防火墙把端口屏蔽了,想手动打开,普通用户提权的时候不小心用vim修改了 1/etc/sudoers Read more »
redis系列:跳跃表 Posted on 2021-09-14 Edited on 2022-10-19 In Redis Symbols count in article: 1.1k Reading time ≈ 1 mins. 基本结构数据结构如下: 1234567891011121314151617181920typedef struct zskiplistNode { //成员对象 robj *obj; //分值 double score; //后退指针 struct zskiplistNode *backward; struct zskiplistLevel { //前进指针 struct zskiplistNode *forward; //跨度 unsigned int span; } level[];} zskiplistNode;typedef struct zskiplist { struct zskiplistNode *header, *tail; unsigned long length; int level;} zskiplist; Read more »
无锁队列 Posted on 2021-09-14 Edited on 2022-10-19 In 多线程 Symbols count in article: 3.9k Reading time ≈ 4 mins. CAS原子操作CAS英文全称Compare & Set(Swap),也就是原子操作,执行过程中不能被中断,在X86中有相应的汇编指令CMPCHG来实现。CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。 Read more »
数据结构:B树,B+树,B*树,红黑树 Posted on 2021-09-14 Edited on 2023-03-26 In 数据结构 Symbols count in article: 1.4k Reading time ≈ 1 mins. B树B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是另一种树。而事实上是,B-tree就是指的B树。B树的定义如下: 定义任意非叶子结点最多只有M个儿子,且M>2; 根结点的儿子数为[2, M]; 除根结点以外的非叶子结点的儿子数为[M/2, M],向上取整; 非叶子结点的关键字个数=儿子数-1; 所有叶子结点位于同一层; k个关键字把节点拆成k+1段,分别指向k+1个儿子,同时满足查找树的大小关系。 Read more »
网络复习:HTTPS/TLS/SSL Posted on 2021-09-14 Edited on 2022-10-19 In 计算机网络 Symbols count in article: 799 Reading time ≈ 1 mins. SSL/TLS 基本流程 客户端想服务端索要并验证公钥。 双方协商生成对话密钥。 双方采用对话密钥进行加密通信。 Read more »
网络复习:TCP & UDP Posted on 2021-09-14 Edited on 2022-10-19 In 计算机网络 Symbols count in article: 7.1k Reading time ≈ 6 mins. 前置知识TCP/IP五层模型 Read more »