简单的动态字符串 Redis没有直接使用C语言中的字符串,而是自己构建了SDS这样的一种简单动态字符串,并且将他作为Redis中字符串的默认的表示. 但是并未完全抛弃C语言字符串,只不过是在C语言字符串的基础上,通过封装其他的属性,构造出一个更加高效的字符串的封装结构. SDS : redis 没有直接使用C语言的字符串,构建了一种简单动态字符串(simple dynamic string,即SDS)的抽象类型作为redis的默认字符串 SDS 用来保存字符串外,还被用作缓冲区,如:AOF缓存区…
前言 项目里用到了redis数据结构,不想只是简单的调用api,这里对我的读书笔记做一下记录.原文地址: http://www.redisbook.com/en/latest/internal-datastruct/sds.html 数据类型定义 与sds实现有关的数据类型有两个,一个是 sds: // 字符串类型的别名 typedef char *sds; 另一个是 sdshdr: // 持有sds的结构 struct sdshdr { // buf中已经被使用的字符串空间数量 int len…
前言 Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型, 并将 SDS 用作 Redis 的默认字符串表示. 个人感觉SDS类似于Java的ArrayList,大家可以拿两者对比一些,谁的效率更加高一点. SDS定义 struct sdshdr { // 记录 buf 数组中已使用字节的数量 // 等于 SDS 所保存字符串的长度 int le…
前文 Redis 设计与实现 2:Redis 对象 说到,五大数据类型都会封装成 RedisObject. typedef struct redisObject { unsigned type:4; // 类型 unsigned encoding:4; // 编码 // ... void *ptr; // 指向具体底层数据的指针 } robj; 不同数据类型的主要区别就是 type 和 encoding 属性的差异,同一种数据类型,有不同的编码. 一.编码类型 字符串的编码有raw.embstr…
------------恢复内容开始------------ 2.1 SDS的定义 struct sdshdr{ // 记录buf数组中已使用字节的数量 // 等于SDS所保存字符串的长度(不含'\0') int len; // 记录buf数组中未使用字节的数量 int free; // 字节数组,用于保存字符串 char buf[]; } 2.2 SDS 与 C 字符串的区别 常数复杂度获取字符串长度 与C字符串不一样,SDS在被链接时可以通过结构中记录的len字段直接获取长度信息,防止连接字…
redis是C语言实现的,但redis中的字符串并没有直接用C语言中的字符串表示,而是自己构建了一种简单的动态字符串类型(SDS). 在redis里面,C字符串只用作字面量,用在一些不会修改的地方,eg:打日志. SDS的结构: struct sdshdr{ int free; int len; char buf[]; } free 属性值为0 表示这个sds未分配未使用的空间. len 属性值为5 表示sds保存一个5字节长度的字符串. buf 是char类型数组保存字符串的每个字节,并在字符…
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.com 本文是微信公众号[Java技术江湖]的<探索Redis设计与实现>其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有…
简述Redis设计与实现 Redis是一个高性能的key-value的非关系型数据库,Redis是运行在内存中的一种数据库,但是它也可以持久化到磁盘中,Redis的实现有着更为复杂的数据结构并且提供对他们的原子性操作. Redis的优势 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,以便redis服务器重启的时候再次加载使用. Redis不仅仅支持简单的key-value类型数据的存储,同时还提供了其它的数据结构存储例如:list.set.zset.hash等. Redis支持三种…
一,简单的动态字符串 1,Redis自己构建了一种名为简单动态字符串的抽象类型,并将SDS用作Redis的默认字符串表示, 2,在redis的数据库里面,包含字符串值的键值对在底层都是由SDS实现的 举个栗子:set msg "hello word" (1)键值对的键是一个字符串对象,对象的底层是一个保存字符串msg的SDS (2)键值对的值也是一个字符串对象,对象的底层是个保存字符串"hello word"的SDS 3,SDS的定义 (1) SDS遵循C字符串以空…
文章链接:https://liuyueyi.github.io/hexblog/2018/06/26/180626-Spring之借助Redis设计一个简单访问计数器/ Spring之借助Redis设计一个简单访问计数器 为什么要做一个访问计数?之前的个人博客用得是卜算子做站点访问计数,用起来挺好,但出现较多次的响应很慢,再其次就是个人博客实在是访问太少,数据不好看…