Redis的底层实现---字符串章节,消息中间件kafka面试题

前言

随着k8s 作为容器编排解决方案变得越来越流行,有些人开始拿 Docker 和 k8s进行对比,不禁问道:Docker 不香吗?

k8s 是kubernets的缩写,’8‘代表中间的八个字符。

其实 Docker 和 k8s 并非直接的竞争对手,它俩相互依存。Docker 是一个容器化平台,而 k8s 是 Docker 等容器平台的协调器。

Redis字符串键的底层原理


不要遗忘最初的目标。 –[RuiDer](()


本篇文章来源:《Redis设计与实现》一书,特别推荐

[](()Category:


文章目录

    • #

Redis字符串键的底层原理

  • Category:

    • before
  • 导入

  • SDS介绍

  • SDS与字符串的区别

      • @ 2杜绝缓冲区溢出
  • @ 3减少修改字符串时带来的内存重分配次数

  • @4 二进制安全

  • @5 兼容部分C字符串函数

  • 总结

  • About Me

[](()before

  • C语言基础

  • Redis基础

[](()导入

redis的命令如下:

set x “hello”;

get x;

hello

Redis作为一种存储字符串的缓存结构,其具体实现是由C语言完成,在C语言中,字符串是通过字符数组实现的,即char[],那么Redis对于字符串的实现是不是也是基于字符数组吗?不是的,Redis对字符串的处理是通过SDS(Simple Dynamic String)实现的。

[](()SDS介绍

SDS(Simple Dynamic String)简单动态字符串,它是由C语言完成,如下是其具体实现

struct sdshdr{

//记录buf数组已使用字节的数量

//等于SDS所保存字符串的长度

int length;

//记录buf数组未使用字节的数量

int free;

//buf数组

char[] buf;

};

看看redis的示例:

sdshdr

free 0

length 5

buf -->|‘R’|‘e’|‘d’|‘i’|‘s’|‘\0’|

解释:

  • free为0,表示这个SDS没有分配任何未使用的空间

  • length为5,表示这个SDS保存了一个长度为5的字符串

  • buf数组中保存着“Redis”字符串

SDS遵循C字符串以空字符串结尾的惯例,保存空字符串的1字节空间不计算在SDS的len属性之中。

再看看SDS的free不为0的情况:

sdshdr

《一线大厂Java面试真题解析+Java核心总结学习笔记+最新全套讲解视频+实战项目源码》开源

Java优秀开源项目:

  • ali1024.coding.net/public/P7/Java/git

最后

看完上述知识点如果你深感Java基础不够扎实,或者刷题刷的不够、知识不全面

小编专门为你量身定制了一套<Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法>

image

针对知识面不够,也莫慌!还有一整套的<Java核心进阶手册>,可以瞬间查漏补缺

image

全都是一丢一丢的收集整理纯手打出来的

更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~

image

image

全都是一丢一丢的收集整理纯手打出来的

更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~

[外链图片转存中…(img-lEEG98F4-1649568689511)]

[外链图片转存中…(img-fKXXvoLw-1649568689511)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值