闲来无事,去看了下《Redis 设计与实现》这本广受好评书(确实好,连我这种小白都读得顺畅)。Redis字符串Redis字符串并没有直接使用 C 语言中字符串,而是自己构建了一种简单动态字符串,并将 SDS 用作 Redis 默认字符串表示。举个列子,客户端执行命令:resdis> SET msg "hello word",其中:键值对键是一个字符串对象,对象底层实现是
转载 2024-02-03 13:59:54
31阅读
文章目录前言一、简单动态字符串1. SDS 是什么?2. 基本原理3. 改进?3.1 O(1)复杂度获取字符串长度3.2 杜绝缓冲区溢出3.3 减少修改字符串时带来内存重分配次数3.4 二进制安全4. 应用二、底层实现1. 数据结构2. SDS API3. 基本操作3.1 创建字符串3.2 释放字符串3.3 拼接字符串总结 前言本文参考源码为 redis6.2Redis 只会使用 C 字符串作
转载 2023-08-21 10:24:06
135阅读
引言redis是一种内存型NoSql数据库,常用于缓存、分布式session、排行榜、消息队列等等功能实现。作为内存型数据库,redis是怎么充分利用内存?如何实现高性能?又是怎样支撑如此多功能呢?也许可以从redis数据结构设计中寻找答案。字符串 sdsredis场景决定了字符串高度频繁读取,所以字符串主要以解决性能问题为主,安全性、功能性为辅。c语言字符串不满足这些场景,于是re
转载 2023-11-21 08:34:19
50阅读
1.SDS没有使用C语言传统字符串表示,而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS抽象类型,并将SDS用作Redis默认字符串表示。在Redis里,包含字符串值得键值对在底层都是由DS来实现SDS还被用作缓冲区(buffer):AOF模块中AOF缓冲区,以及客户端状态中输入缓冲区,都是由SDS实现SDS定义:struct sdsh
转载 2024-01-27 20:09:43
38阅读
一. 简单动态字符串1.1 什么是简单动态字符串?redis在实现字符串中并没有采用传统C语言中字符串表示(传统C语言字符串是一个以空字符结尾字符数组),而是自己定义了一种叫做简单动态字符串(simple dynamic string, 简称SDS)抽象类型,并用SDS用作redis默认字符串表示。在Redis里面,C字符串只会作为字符串字面量(string literal), 用在一些
一、简介Redis没有直接使用C语言传统字符串表示(以空字符结尾字符数组),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS抽象类型,并将SDS用作Redis默认字符串表示。在redis中只有无需对字符串进行修改地方会使用C字符串,如打印日志。其他如键值对,键和值都是SDS。 eg:redis> SET msg "hello world"
转载 2023-06-06 20:32:12
157阅读
1.前言Hello,欢迎大家来到《 Redis 数据结构源码解析系列》,在《Redis为什么这么快?》一文中敖丙说过 Redis 速度快一个原因就是其简单且高效数据结构。本系列文章面向各个阶段 Coder 们,新手也不用怕。每一篇文章敖丙都将从命令实战入门入手,随后深入源码解析,最后面试题回顾这三个方向上给各位看官一一介绍。2.SDS命令实战[初来乍到]SDSRedis 中最简单数据
如大家众所周知,redis有string、list、hash、set、zset五种数据类型,但是大家对于每种数据类型底层存储数据结构,可能还不是很清楚,在下面这篇文章中,主要讲述一下redis底层存储7中数据类型。1、简单动态字符串(SDS)(摘自redis设计与实现第二章)  由于C语言字符串长度不可修改性,redis实现了一种可变长度字符串,即SDSSDS实现原理如下  
转载 2023-06-29 13:46:14
142阅读
Redis 源码中sds,是一个动态字符串库(A dynamic string library).结构如下:struct sdshdr { int len; int free; char buf[];};len是字符串长度,free是缓存区中剩余大小,其中内存分配当然用zmalloc。typedef char* sds; sds类型指针退sizeof(sdshdr)个字节就是sdshdr。这个库接口比较丰富,包括增长(sdsMakeRoom, sdsgrowzero,sdscat,sdslen,缓存区每次增长到需要2倍,如果超过1M,则每次增长1M),切分(sdssplit,sdss
序言    夏日炎炎,无风。。。从空调房间出来,再到接近四十度高温,这个过程。。。缓存预热了解一下。。。    为什么要用缓存?因为追求性能,因为要追求极致用户体验。    缓存基本上不需要持久化,从而是无状态,那么使用容器是最好方法了,而缓存系统,redis相当合适。。不要问为什么不用memcache。。。因为redis功能比memcache多,因为redis还能持久化,因为redis
原创 2021-03-09 21:34:35
374阅读
我们知道Redis中有五种数据结构:String、Map、List、Set、ZSet,那么这些数据结构在Redis中又是如何实现呢?String(动态字符串)介绍SDSSDS是什么?在Redis中并没有直接使用C语言字符串(以空字符结尾字符数组),而是构建了一种名为简单动态字符串(SDS抽象类型,并且SDS用作Redis默认字符串。在Redis中一个可以被修改字符串值都是用SDS
转载 2024-01-11 22:09:56
121阅读
什么是简单动态字符串(SDS)我们知道redis没有使用C语音传统字符串表示(以空字符(\0)结尾字符数组,在我所有文章中统一称为C字符串),而是自己构建了一种名为**简单动态字符串(SDS)**抽象类型,并将SDS用作redis默认字符串表示。 其实在redis中也有用到C字符串,但是它只会作为字符串字面量用在一些无须对字符串值进行修改地方,比如打印日志。当redis需要一个不仅仅是一
转载 2023-12-16 11:31:00
46阅读
# 实现 Redis SDS ## 概述 在介绍如何实现 Redis SDS(Simple Dynamic String)之前,首先需要了解 Redis SDS 是什么以及它作用。Redis SDSRedis一种数据结构,用于存储字符串类型数据。它是一个简单且灵活动态字符串实现,能够提供高效读写操作。在本文中,将向你介绍如何实现一个简单 Redis SDS。 ## 实现步
原创 2023-07-31 08:30:31
43阅读
Redis简介Redis是一款开源,ANSI C语言编写,高级键值(key-value)缓存和支持永久存储NoSQL数据库产品。Redis采用内存(In-Memory)数据集(DataSet) 。支持多种数据类型。运行于大多数POSIX系统,如Linux、*BSD、OS X等。 1 . Redis功能介绍高速读写数据类型丰富支持持久化多种内存分配及回收策略支持事务消息队列、
SDS结构】Redis中字符串结构叫SDS,即Simple Dynamic String。它结构是一个带长度信息字节数组。struct SDS<T>{ T capacity; T len; byte flags; byte[] content; }1.capacity>=lencontent中存储了真正字符串内容,capacity和len表示分配数组长度和字符串实际
转载 2023-07-09 13:18:27
153阅读
Redis有几种数据类型呢第一个问题往往是最重要,因为它决定了后面要问你什么样问题,就和你冲排位似的,前几把是定级赛,定级时给你个青铜段位,想要爬上去可就难了是我的话,肯定要答全啊(装X脸)。都知道有String、List、Set、Sorted Set、Hash。不过这么回答的话,看样子只能拿30分了,接下来就是问问你会不会几个命令之类了。 在我看来分为两类结构,一个是Redis自带数据
转载 2024-10-15 11:13:17
3阅读
Redis是一个开源高性能键值存储系统,它使用了一个简单动态字符串(Simple Dynamic String,SDS)作为其默认字符串实现。SDS除了具备传统C语言字符串所有操作特性外,还具备了高效操作和更好性能表现。在本文中,我们将深入了解SDS原理,并通过一些代码示例来展示它使用方法。 ## 1. 什么是SDSSDSRedis自己实现字符串类型,用来替代C语言中字符
原创 2023-09-11 07:15:26
65阅读
1. SDS(Simple Dynamic String,简单动态字符串)简介SDSRedis默认字符串表示。在Redis中,C字符串(C语言传统字符串表示【以空字符结尾字符数组,以下简称C字符串】)只会作为字符串字面量(String Literal)用在一些无须对字符串值进行修改地方,比如打印日志:redisLog(REDIS_WARNING,“Redis is now ready t
原创 2020-12-03 15:45:27
811阅读
1点赞
object encoding define#define OBJ_ENCODING_RAW 0 /* Raw representation */#define OBJ_ENCODING_INT 1
原创 2022-02-15 17:45:05
68阅读
redis 使用 c 语言开发,但它没有复用 c 原生字符串实现,自己构建了一种新字符串实现:SDS(simple dynamic String),SDSredis默认字符串实现SDS 原理:struct sdshdr { // 记录buf数组中已使用字节数量,也就是已用字符串长度 int len; // 记录buf数组中未使用字节数量 int fre
转载 2023-09-05 14:21:04
74阅读
  • 1
  • 2
  • 3
  • 4
  • 5