最新要闻
- 天天观天下!广东人睡觉时间全国最晚:“打工人”平均睡眠时长7.5小时
- 一根USB线就能偷走韩系车!现代、起亚已开始免费送车主方向盘锁
- 今日关注:再不发力就晚了!新一代奥迪Q5效果图曝光:内外大变革
- 当前时讯:沙尘暴黄色预警:北方超10省将迎来大范围沙尘天气
- 环球热点评!昔日巨头彻底退场!爱普生宣布所有相机明年终止官方服务
- 西部证券:3月20日融资买入1459.71万元,融资融券余额12.72亿元
- 环球速讯:中国罐头在海外多国热销:成为香饽饽
- 天天讯息:大反转!南京大学团队推翻美室温超导技术 复刻实验没发现超导现象
- 天天速看:又一致命真菌爆发:已遍布美国一半以上的州
- 天天微动态丨OPPO Find X6系列外观公布:拼接设计、后摄巨大
- 比亚迪汉唐冠军版发布会高能金句感受下 合资燃油车瑟瑟发抖
- 今日热讯:LCD荣光犹在!iQOO Z7开启预售:1599元起
- 全球观察:漫威后期制作总裁离职
- 当前通讯!2022年度个税汇算今起不用预约:多退少补你能退多少
- 移除雷达传感器后 特斯拉车祸数量上升:车主反映莫名刹车故障
- 鲁抗医药:3月20日融资买入477.87万元,融资融券余额2.49亿元
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
为什么Redis不直接使用C语言的字符串?看完直接吊打面试官!
众所周知Redis有以下几种常见的数据类型 String(字符串)、List(列表)、Set(集合)、Hash(哈希)、Sorted set(有序集合)、Stream(流)、Geo(地理空间索引)、Bitmap(位图)、HyperLogLog(基数统计)等。
我们最常用的就是String(字符串)类型,String类型既可以存储字符串,也可以存储数字,甚至可以直接进行数值运算。
(资料图片)
redis> set key1 value1OKredis> get key1"value1"redis> set key 1Ok redis> INCR key(integer) 2
Redis是使用标准C语言编写的,而Redis String类型底层使用SDS(Simple Dynamic String 简单动态字符串),但是却没有使用C语言字符串使用,这到底是为什么呢?
Redis的优点是快、安全、节省内存,在设计Redis String实现的时候,也深刻的体现了Redis的这三个优点。
提到Redis字符串的优点,需要先看一下C语言字符串的缺点,毕竟没有对比就没有伤害。
1. C语言字符串实现原理
C语言字符串是使用char数组存储,以"\0"作为字符串结束,比如字符串”Redis“在C语言中存储结构就是下面这样:
那么这种存储方式有什么缺点呢?
1.1 不安全
C语言字符串这种特殊规定,就导致无法存储特殊字符。如果某个字符串中间包含"\0"字符,读取字符串的时候就无法读取到完整字符,遇到"\0"就结束了,像下面这样,只能读取到前半部分“Red”。
如果存储到C语言的字符串,无法完整读取,肯定是不安全的,所以C语言无法存储包含特殊字符的字符串(例如二进制数据)。
1.2 查询性能较低
如果想要获取字符串的长度,需要遍历整个字符串,时间复杂度是O(n),查询效率较低。
1.3 存在缓存区溢出风险
开发中最常用的功能是拼接字符串,每次拼接字符串的时候,都要提前进行扩容。如果忘记扩容了,就会出现缓存区溢出。
1.4 扩容性能较差
扩容过程是非常耗时的,而且每次拼接字符串的时候都需要提交扩容。想象一下,如果使用HashMap的时候,每次put操作都需要进行扩容,性能将会差到什么程度。
由于C语言字符串有这么多缺点,而Redis又追求极致性能,所以只能自己实现一套,看一下Redis字符串底层是怎么实现的?
2. SDS底层实现原理
Redis3.0版本之前的底层结构是这样的:
struct sdshdr { // 记录buf数组中已使用字节的数量 // 等于SDS所保存字符串的长度 int len; // 记录buf数组中未使用字节的数量 int free; // 字节数组,用于保存字符串 char buf[];};
而最新Redis7.0版本,sds底层结构是这样的,分成5个实现:
为什么会有5种实现呢?
看一下每种实现的len和alloc的类型就明白了,sdshdr8里面的类型是uint8_t,sdshdr16里面的类型是uint16_t,sdshdr32里面的类型是uint32_t,sdshdr64里面的类型是uint64_t,用来存储不同长度的字符串。使用合适的类型,可以节约大量内存。
Redis自己实现的字符串解决了C语言字符串遇到的问题,并且有以下几个优点:
2.1 存储安全
sds简化版的存储结构是这样的:
struct sdshdr { // 已经使用的字节数量 int len; // char数组总字节数量 int alloc; // 字节数组,用于保存字符串 char buf[];};
可以看出,Redis的字符串并不是用"\0"表示结尾,而是使用len记录了字符串的长度。想要取出完整的字符串,只需要遍历len长度即可。
2.2 查询性能较高
Redis的字符串使用len记录了字符串的长度,想要获取整个字符串的长度,无需遍历字符串,只需要查询len值即可,时间复杂度是O(1)。
Redis采用空间换时间的做法,增加了存储空间,加快了查询性能。
2.3 避免缓存区溢出
Redis的字符串使用len记录了字符串的长度,使用alloc记录整个数组的长度,(alloc - len)表示未使用的空间长度。
如果新增的拼接字符串长度小于未使用空间,就不用扩容了。
2.4 扩容性能较好
Redis字符串还实现空间预分配和惰性空间释放的优化策略,减少扩容次数。
简单理解就是拼接字符串导致扩容的时候会多增加一些空闲空间,缩短字符串的时候并不立即释放这些空闲空间。
我是「一灯架构」,如果本文对你有帮助,欢迎各位小伙伴点赞、评论和关注,感谢各位老铁,我们下期见
关键词:
-
OpenGL 图像 lookup 色彩调整
零基础OpenGLES学习路线推荐:& 160;OpenGLES学习目录>>& 160;OpenGLES基础零基础OpenGLES学习路线推荐:& 160;Op
来源: -
天天时讯:剑指 Offer 07. 重建二叉树(java解题)
leetcode《图解数据结构》剑指Offer07 重建二叉树(java解题)的解题思路和java代码,并附上java中常用...
来源: OpenGL 图像 lookup 色彩调整
天天时讯:剑指 Offer 07. 重建二叉树(java解题)
为什么Redis不直接使用C语言的字符串?看完直接吊打面试官!
天天观天下!广东人睡觉时间全国最晚:“打工人”平均睡眠时长7.5小时
一根USB线就能偷走韩系车!现代、起亚已开始免费送车主方向盘锁
今日关注:再不发力就晚了!新一代奥迪Q5效果图曝光:内外大变革
当前时讯:沙尘暴黄色预警:北方超10省将迎来大范围沙尘天气
环球热点评!昔日巨头彻底退场!爱普生宣布所有相机明年终止官方服务
环球关注:论文解读TCPN
西部证券:3月20日融资买入1459.71万元,融资融券余额12.72亿元
环球速讯:中国罐头在海外多国热销:成为香饽饽
天天讯息:大反转!南京大学团队推翻美室温超导技术 复刻实验没发现超导现象
天天速看:又一致命真菌爆发:已遍布美国一半以上的州
天天微动态丨OPPO Find X6系列外观公布:拼接设计、后摄巨大
比亚迪汉唐冠军版发布会高能金句感受下 合资燃油车瑟瑟发抖
MAUI Blazor 加载本地图片的解决方案
每日热点:朴素系统优化思维的实践
焦点热文:债券通北向通2月成交规模环比增超三成 政金债跃升为最活跃券种
今日热讯:LCD荣光犹在!iQOO Z7开启预售:1599元起
全球观察:漫威后期制作总裁离职
当前通讯!2022年度个税汇算今起不用预约:多退少补你能退多少
移除雷达传感器后 特斯拉车祸数量上升:车主反映莫名刹车故障
快消息!读C#代码整洁之道笔记02_类、对象和数据结构及编写整洁函数
鲁抗医药:3月20日融资买入477.87万元,融资融券余额2.49亿元
全球速读:今年以来险企“补血”超340亿元 数百亿元补充资本“在路上”
世界观点:国际金融市场早知道:3月21日
铁矿石价格“非理性”上涨 监管层频频发声剑指价格炒作
天天最新:春分迎接春天:昼夜时间等长
2TB硬盘开车价400多 SSD便宜到没朋友:5大巨头流泪数钱
每日速递:读Java性能权威指南(第2版)笔记23_ 性能分析工具
焦点速讯:影响人类文明的“小方块” USB接口进化史
当前资讯!快来!我们发现了藏在新风空调里的“秘密”
当前速看:C++温故补缺(一):引用类型
要闻速递:【Visual Leak Detector】简介
Spotify 畅听全网高品质音乐
焦点热门:GPT-4外逃计划曝光!教授发现它正引诱人类帮助 网友:灭绝之门
天天快看点丨因禽流感爆发 阿根廷已扑杀70余万只禽类!
焦点!27款进口游戏版号获批!《赛马娘》《蔚蓝档案》等改名引热议
你相信吗?每天都有10多万人 学习流浪汉的生存技巧
环球今亮点!15年后 官方发布北京奥运福娃全新手办:五个一套440元
26种死法知乎_26种死法怎么样
天天速讯:织金县鸡场乡:防范电信诈骗,拉响反诈警报
Go 并发编程(一):协程 gorotine、channel、锁
vue和xml复习
Vue——vue2错误处理收集【七】
环球关注:iPhone开始在俄罗斯遭禁用了:不安全!苹果此前已在该国停售
焦点快看:填补空白!中国将首次开启海上二氧化碳封存
C# 探秘如何优雅的终止线程
行人车辆检测与计数系统(Python+YOLOv5深度学习模型+清新界面)
焦点播报:Spring IOC官方文档学习笔记(十四)之ApplicationContext的其他功能
如何上传一个npm包
中债金融终端上线“货币经纪行情”功能
瑞信风波由股及债 此前已有分析师提示“AT1”风险
Wii U和3DS在线游戏商店关闭前:玩家花15万328天买下所有游戏
2022年 全国坐火车的少了36.4%!高铁已达4.2万公里
环球热点!基于深度学习的口罩检测系统(Python+清新界面+数据集)
【环球新视野】自律|坚持,是因为不喜欢
Java内部类笔记整理
全球快资讯丨永磁同步电机驱动系统—相关方向思考
焦点要闻:HTTP 状态码与课程总结
日本东电直播用核污水养鱼 海外网友直言:留着自己吃吧
环球热点评!旗舰级LCD护眼屏+120W独此一款!iQOO Z7发布:1599元
全球热议:6000mAh同档位续航无敌!iQOO Z7x发布:1299元起
便宜卡终于有了!好队友抢跑:RTX 4070/4060来也
9999元 AOC爱攻新款48寸显示器上架:4K OLED屏、138Hz高刷
当前快讯:死亡细胞将登陆Android端
环球快看点丨波动数列
瑞银收购瑞信意外“引爆”AT1债券市场 对冲基金不计成本抛售避险
【世界新视野】抗早泄药物盐酸达泊西汀国内正式上市:效果最好!订单超4000万元
天天通讯!1994《小美人鱼》vs2023《小美人鱼》对比图火了:5月上映 你会看吗?
焦点消息!LCD党最好的选择!iQOO Z7定制旗舰级LCD屏:超级护眼
今日热闻!神秘光点划过美国加州夜空 专家:或为日本太空垃圾
【世界新要闻】正式签约石墨烯之父 超威电池三大单品发布
世界今热点:Python+selenium安装
全球即时看!【财经分析】“降准”落地利好信用债阶段表现 中期仍需关注多因素扰动风险
网传凯迪拉克中控屏行驶中弹窗广告 车主:烦死了
热点!多益网络:前女高管们利用网络水军造假 导致公司损失5亿元
全球即时看!速干短袖+短裤:骆驼运动套装79元狂促(300元大额券)
戴森空气净化耳机首发体验:6699元图一乐?
美知名媒体曝特斯拉大量负面:自动驾驶测试作假
焦点速看:这些AIGC工具有趣且实用
abc294G
设计原则
观热点:也等你 [表白墙] 发布!
天天即时:泰格医药董事ZHUAN YIN累计减持7.6万股 减持期限届满
【独家焦点】债市日报:3月20日
每日看点!爆火情侣竟不是真人!新版Midjourney效果爆炸 网友:太可怕了
全球即时看!宏碁搞“副业”?推出电动自行车Acer ebii:110公里超长续航
男子2年未办理个税汇算 被查后补税加罚金近10万
世界资讯:梦想和高薪你会如何选择?00后女生10秒拒绝8家公司
Microsoft Project教程_编程入门自学教程_菜鸟教程-免费教程分享
环球热头条丨Source Generator-扩充原有代码
8个不能错过的程序员必备网站,惊艳到我了!!!
即时焦点:瑞信全面减记AT1债券影响扩大 日债收益率午后全线下挫
新动态:令人血压飙升!一SUV高速快车道停车致多车连撞:后果惨烈
【世界播资讯】毕业典礼学校安排学生在操场吃席:画面仪式感拉满
环球焦点!宁德一家利润超韩国三大厂商 韩系电池厂商绝望:高端低端都打不过
全球观热点:《黑暗荣耀》全剧出现119次韩语粗口:韩剧总是那么吵!
观点:腾讯发布2022研发大数据报告:内部研发人员占比高达74%
【MySQL】InnoDB vs MyISAM