随着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
-
C语言基础
-
Redis基础
redis的命令如下:
set x “hello”;
get x;
hello
Redis作为一种存储字符串的缓存结构,其具体实现是由C语言完成,在C语言中,字符串是通过字符数组实现的,即char[],那么Redis对于字符串的实现是不是也是基于字符数组吗?不是的,Redis对字符串的处理是通过SDS(Simple Dynamic String)实现的。
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筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~
全都是一丢一丢的收集整理纯手打出来的
更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~
[外链图片转存中…(img-lEEG98F4-1649568689511)]
[外链图片转存中…(img-fKXXvoLw-1649568689511)]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)