首页 > 数据库 >Redis的设计与实现-总结

Redis的设计与实现-总结

时间:2023-06-18 17:33:16浏览次数:70  
标签:总结 ZIP encoding 实现 Redis C语言 设计

个人真的很喜欢这本书, 从对C语言一窍不通, 到发现C语言竟然如此简洁, 以至于我喜欢上了C! 对此前面的底层数据结构也读了几次, 大致整理了书里的内容, 后面的就粗略看了一下, 不再细细整理了.

Redis的设计与实现(1)-SDS简单动态字符串

Redis的设计与实现(2)-链表

Redis的设计与实现(3)-字典

Redis的设计与实现(4)-跳跃表

Redis的设计与实现(5)-整数集合

Redis的设计与实现(6)-压缩列表

整体的感悟吧, 觉得 Redis 的作者, 对每一块内存非常吝啬, 为了节省内存而制造出各种各样的编码和技巧. 阅读源码的过程中, 也学习到了宏的技巧, 比如说:

#define ZIP_ENTRY_ENCODING(ptr, encoding) do {  \
    (encoding) = (ptr[0]); \
    if ((encoding) < ZIP_STR_MASK) (encoding) &= ZIP_STR_MASK; \
} while(0)

大量的使用 do { ... } while(0) , 上网找过, 说这样写宏展开后就不会编译错误, 当然道理是浅显易懂的. 有些函数, 比如上面的 ZIP_ENTRY_ENCODING , 如果写成真真正正的函数, 会增加函数调用栈的开销, 听说 << C 和指针 >> 这本书会提及, 准备有时间好好看看.

源码的注释版, 真的很好, Redis的代码读起来也还是比较亲切. 工作上, 曾经排查线上 Nginx 的 bug , 准确来说, 应该是 API 网关 kong, 它结合了 OpenResty, 关于 URL 字符串的编码问题, 具体的记不清了, 但里面对字符串的 URL 编码, 用的是查表法和位运算, 这样的转换函数真的是晦涩难懂. 水平真的有限, 我也是请教了同事, 他在 DevCPP 里面逐行调试才知道的.


这本书的后面几部分, 最开始是几个底层数据结构, 然后是对象, 第二部分是单机数据库, 包括 RDB 持久化 和 AOF 持久化, 事件, 客户端和服务端; 第三部分是多机数据库的实现, Redis 集群等, 这一块我还没实践过; 第四部分是比较杂的功能, 包含了发布订阅, 事务, Lua 脚本, 慢日志以及一些命令的实现. 可能也得之后有时间再刷刷看了.

明确一下目标: 很喜欢C语言, 准备找时间看看 << C 和指针 >>, 然后买本轮子哥一直推的 << C++ Primer 5 >> , 越来越发现底层的世界, 真的是很好玩啊! 特别是, 对于每一块内存, 随心所欲的控制, 这种感觉真的是爽爆了!!!


文章来源于本人博客,发布于 2018-06-02,原文链接:https://imlht.com/archives/145/

标签:总结,ZIP,encoding,实现,Redis,C语言,设计
From: https://www.cnblogs.com/lofanmi/p/17489390.html

相关文章

  • springboot中操作redis
    1.maven引入相关依赖<dependencies> <!--spring-boot-starter-data-redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId&g......
  • 第三十节:EFCore7.x版本新功能总结
    一.linq改进1.GroupBy(1).可以直接GroupBy进行toList()输出了. PS:从EFCore3.x--6.x不能直接groupby进行输出了。(2).这种类型的GroupBy不会直接转换为SQL,因此EFCore对返回的结果进行分组。但是,这不会导致从服务器传输任何其他数据。toList()才会查询。(3).案......
  • 算法题总结-吃苹果(有序处理)
    原题https://leetcode.cn/problems/maximum-number-of-eaten-apples/有一棵特殊的苹果树,一连n天,每天都可以长出若干个苹果。在第i天,树上会长出apples[i]个苹果,这些苹果将会在days[i]天后(也就是说,第i+days[i]天时)腐烂,变得无法食用。也可能有那么几天,树上不会长出新的......
  • 测量项目总结
    和朋友合作开发一个测量机产品,用于测量汽车零件形位公差,客户的客户是电动汽车第一品牌,我负责上位机开发,历时2个月,完成上百次的commit.时间虽紧,但代码质量上没有妥协,软件层次划分合理,后续考虑做成系列产品.开发利器感恩这个时代,现在的软件开发开发体验真好,可以......
  • java操作redis之jedis
    我们之前对Redis的学习都是在命令行窗口,那么如何使用Java来对Redis进行操作呢?对于Java连接Redis的开发工具有很多,这里先介绍通过Jedis实现对Redis的各种操作。(前提是你的redis已经配置了远程访问)1.创建一个maven工程,并且添加以下依赖<dependencies><!--jedis--><......
  • Adobe Experience Design 2022v45.0.62【XD原型设计软件】中文直装版安装教程
    AdobeXD45是一款功能强大的原型开发工具,它具有非常专业和丰富的功能,可以帮助用户方便地进行内容分享和布局,样机设计软件提供的功能可以有效地提高用户的工作效率,减少用户工作时间软件支持云中的文件管理,使用者可以把文件上载到软件的云内存中,从而使用户无论在任何设备上登陆该软件......
  • 运算符重载知识点总结
    #运算符重载在数学上,两个复数可以直接进行+、-等运算。但在C++中,直接将+或-用于复数对象是不允许的。•有时会希望,让对象也能通过运算符进行运算。这样代码更简洁,容易理解。•例如:complex_a和complex_b是两个复数对象;求两个复数的和,希望能直接写:complex_a+complex_b在数学上......
  • 申威3231服务器Redis性能验证-及最全信创CPU性能分析
    申威3231服务器Redis性能验证-及最全信创CPU性能分析背景公司里面新进了几台服务器.有台申威服务器.因为前段时间参与过一次申威的POC验证.当时对性能有一点简单的理解.但是因为不方便,没有测试更多.这次有了一台实体机器,并且可以上网,所以感觉可以方便的多了.本来想使用......
  • 系统架构设计师笔记第18期:NoSQL数据库
    NoSQL数据库通常指非关系型数据库,是一种基于数据键值对存储、高度分布式、支持动态查询的数据管理系统。NoSQL数据库的设计目的是为了解决传统关系型数据库无法处理的大型应用程序的数据存储和管理问题。它们通常具有以下特点:灵活性:NoSQL数据库没有固定的表结构和查询语言,允许在......
  • k8s 梳理及使用总结
    ---1.Kubernetes概述1.最初Google开发了1个叫Borg的系统(现在命名为Omega),来调度近20多亿个容器从2014年第1个版本发布以来,迅速得到了开源社区的追捧,?前,k8s已经成为了发展最快、市场占有率最高的容器编排引擎产品。---2.特点轻量级,资源消耗小开源弹性伸缩负载均衡IPVS---3.重要......