Redis 设计与实现:字符串 SDS】的更多相关文章

Redis是用ANSI C语言编写的,它是一个高性能的key-value数据库,它可以作用在数据库.缓存和消息中间件.其中 Redis 键值对中的键都是 string 类型,而键值对中的值也是有 string 类型,在 Redis 中 string 类型运用还是很广泛的.本文主要介绍 string 的数据结构-- 简单动态字符串(Simple Dynamic String) 简称sds. sds 实现 sds 的数据结构: struct sdshdr { //buf 已占用的长度 int len…
C语言字符串 char *str = "redis"; // 可以不显式的添加\0,由编译器添加 char *str = "redis\0"; // 也可以添加\0代表字符串结束 C语言中使用char*字符数组表示字符串,'\0'来标记一个字符串的结束,不过在使用的过程中我们不需要显式的在字符串中加入'\0'. 存在问题 1.二进制安全 C语言以'\0'标记字符串的结尾,如果一个字符串本身带有'\0',比如一些二进制数据,那么字符串就会被截断,导致无法存储二进制数据…
Redis 中的字符串没有使用 C语言中的字符指针(char *),而是使用了自定义的结构 sds. 文件: sds.h sds.c 结构: struct sdshdr { int len; // 填充的字符串长度 int free; // buf 中未填充的空位置 char buf[]; // 用于存放实际的字符串(包含为使用的空间),以 '\0' 结尾 }; 基本结构如上所示,其中 buf 中为预分配的字符串空间,可能等于实际字符串所需空间长度,也可能大于实际的字符串长度 len 为实际的字…
1 Redis 是C语言实现的 2 C字符串是 /0 结束的字符数组 3 Redis具体的动态字符串实现 /* * 保存字符串对象的结构 */ struct sdshdr { // buf 中已占用空间的长度 使求字符串长度操作变成0(1) int len; // buf 中剩余可用空间的长度 对字符串字符增加修改时 不大于len+free不用重新分配内存(初始化一个字符串时free为0 当修改字符串时会对free进行赋值) int free; // 数据空间 char buf[]; }; sd…
初衷 从开始工作就开始使用Redis,也有一段时间了,但都只是停留在使用阶段,没有往更深的角度探索,每次想读源码都止步在阅读书籍上,因为看完书很快又忘了,这次逼自己先读代码.因为个人觉得写作需要阅读文字来增强灵感,那么写代码的,就阅读更多代码来增强灵感吧. redis的实现原理,在<Redis设计与实现>一书中讲得很详细了,但是想通过结合代码的形式再深入探索,加深自己的理解,现在将自己探索的心得写在这儿. sds结构体的定义 #define SDS_TYPE_5 0 #define SDS_T…
本文为读<Redis设计与实现>的记录.该书以Redis2.9讲解Redis相关内容.请注意版本差异. Redis使用C语言实现,他对C语言中的char类型数据进行封装,构建了一种简单动态字符串(以下简称SDS),该字符串的结构如下 struct sdshdr{ //记录buf数组中已使用字节的数量 //获取字符串的长度时,就是直接返回的这个字段的值 int len; //记录buf数组中未使用字节的数量 int free; //字节数组,用于保存字符串 char buf[]; } SDS遵循…
图解Redis之数据结构篇--简单动态字符串SDS 前言     相信用过Redis的人都知道,Redis提供了一个逻辑上的对象系统构建了一个键值对数据库以供客户端用户使用.这个对象系统包括字符串对象,哈希对象,列表对象,集合对象,有序集合对象等.但是Redis面向内存并没有直接使用这些对象.而是使用了简单动态字符串,链表,字典(散列表),跳跃表,整数集合,压缩列表这些数据结构来操作内存. 系列文章 图解Redis之数据结构篇--简单动态字符串SDS 图解Redis之数据结构篇--链表 图解Re…
redis是我们使用非常多的一种缓存技术,他的性能极高,读的速度是110000次/s,写的速度是81000次/s.这么高的性能背后,到底是怎么样的实现在支撑,这个系列的文章,我们一起去看看. redis的底层数据结构有以下7种,包括简单动态字符串(SDS),链表.字典.跳跃表.整数集合.压缩列表.对象.今天我们一起看下简单动态字符串(simple dynamic string),后面的文章以SDS简称. SDS简介 Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符串数组,以下简称…
Redis 设计与实现,看 SDS(Simple Dynamic String) 感悟 今天在看 Redis 设计与实现这本书的时候,发现了里面系统定义的数据结构 SDS,中文名为 简单动态字符串.对其设计的思想挺有收获的. SDS 的定义,位于 sds.h/sdshdr 中:结构如下: struct sdshdr{ // len 为 buf 数组中已使用字节的数量,等于 SDS 所保存的字符串的长度 int len; // buf 中未使用字节的数量 int free; // 字节数组,用于保…
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.com 本文是微信公众号[Java技术江湖]的<探索Redis设计与实现>其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有…