当前位置: 首页 > news >正文

Redis的String和Hash

String

Redis底层是使用C实现的,但是它并没有使用C中char* 的方法,而是自己定义了一个SDS,也就是简单字符串,先说一下char*以及它的缺点。

char*是C中String的实现,它在读取到 '\0'后就会停止,C中把这个符号作为String的结尾。因此如果 '\0'后还有其他字符,C中并不会把它算在里面。并且如果想要知道String的长度,需要遍历所有字符串,在时间复杂度上是O(n)的。对于需要储存数据的Redis来说,如果出现 '\0'就停止读入,以及每次获得String长度都需要重新遍历,这显然是不可能的,所以Redis自己创新了一个简单字符串。

word[0]z
word[1]c
word[2]s
word[3]\0

SDS使用byte数组来存放数据,并且使用专门的len变量来记录长度。不仅如此,他还可以在存放64位整数的时候节省空间。这解决了C中String出现的一些问题,但是这也会出现一些新的问题。具体情况可以看我的Redis实战中String类型有什么缺点。

Hash

Redis中的Hash也进行了优化,主要体现在了两点,分别针对hash冲突和rehash。

hash冲突

Hash存储键值对如果hash冲突了,就会使用拉链法避免hash冲突,这和java中的hashmap解决hash冲突的方法是一致的,但是在扩容方面,却有一些区别。

rehash

需要注意的是在装载因子大于1的时候,Redis允许扩容,但是AOF重写或生成RDB时就不可以扩容,为了保证不污染AOF和RDB,但是装载因子大于5,立即扩容。在rehash时,如果没有新的请求,也会通过定时任务的方式进行rehash。

 往期文章

Redis核心技术

Redis主从同步和哨兵

Redis实战

Redis为什么会阻塞

Redis事物和主从同步

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 网络-多路io
  • Java基于微信小程序的美食推荐小程序,附源码
  • 基于InstaSPIN-user's guide Foc电流环速度环PI参数计算过程
  • 2024年四款必备的Windows录屏工具推荐!
  • 生成对抗网络在数字病理学中的应用综述|文献精析·24-09-03
  • Docker学习之路【八】安装主从复制MYSQL8
  • 全球大脑外滩“论剑”:2024年科技人文十大热点问题揭晓
  • Vue2转Vue3学习历程
  • 字节6面,面爆炸了
  • ssh结合重定向实现scp拷贝文件的另类用法
  • 通配符证书的申请及配置教程
  • 大规模语言模型开发基础与实践
  • 【HTML】使用过程中的随记
  • E810网卡驱动安装-适用于centos7.9
  • 前端提高Web/App/小程序开发效率的工具
  • Electron入门介绍
  • ES6简单总结(搭配简单的讲解和小案例)
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • k个最大的数及变种小结
  • overflow: hidden IE7无效
  • React-生命周期杂记
  • Shadow DOM 内部构造及如何构建独立组件
  • Transformer-XL: Unleashing the Potential of Attention Models
  • ucore操作系统实验笔记 - 重新理解中断
  • Zepto.js源码学习之二
  • 程序员最讨厌的9句话,你可有补充?
  • 二维平面内的碰撞检测【一】
  • 欢迎参加第二届中国游戏开发者大会
  • 前端面试总结(at, md)
  • 如何实现 font-size 的响应式
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 软件开发学习的5大技巧,你知道吗?
  • 一些关于Rust在2019年的思考
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ## 1.3.Git命令
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (7)摄像机和云台
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (十三)Maven插件解析运行机制
  • (自用)gtest单元测试
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .java 9 找不到符号_java找不到符号
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .net与java建立WebService再互相调用
  • /dev下添加设备节点的方法步骤(通过device_create)