redis的一些特性

举报
赵KK日常技术记录 发表于 2023/06/29 22:46:38 2023/06/29
【摘要】  前几天整理到redis的一些特性,顺便跟着公开课看了下源码,说到redis的时候,我说redis有几个库,小伙伴说有16个,我说HashMap的初始容量是多少?小伙伴说是16,我说redis抄HashMap的作业你们同不同意,他们说还有点意思,还挺方便记,另外,同为K,V形式存储数据,底层数据结构从维度上讲,1.8之前都是数组+链表,redis的数据结构组成了hashtable,redis...

 前几天整理到redis的一些特性,顺便跟着公开课看了下源码,

说到redis的时候,我说redis有几个库,小伙伴说有16个,我说HashMap的初始容量是多少?小伙伴说是16,我说redis抄HashMap的作业你们同不同意,他们说还有点意思,还挺方便记,另外,同为K,V形式存储数据,底层数据结构从维度上讲,1.8之前都是数组+链表,redis的数据结构组成了hashtable,redis的rehash,HashMap的resize,你这作业抄的有点厉害啊。

其实功能根本不是一个类别,为了说抄作业是方便记忆,这样类比下来,还有点相似。redis的作用还是主要用于缓存,而为什么使用redis,还要从性能和并发两方面讨论,至于分布式锁,大家观点不一,有的偏爱zookeeper。有的喜欢redis,并不是主要用途,git上拉一下6.0的源码,可阅读redis.conf翻译查阅。另外强一致性的数据不适合放入redis。

非关系型数据库VS关系型数据库?

啥叫关系型数据库?(能够互相连接的列表式数据库),非关系型相反。即non-relational

hash数据结构

哈希等价于Java语言的HashMap或者是Python语言的字典(Dict)redis hash 的内部结构.第一维是数组,第二维是链表.组成一个 hashtable

redis初始创建hash表,有序集合,链表时, 存储结构采用一种ziplist的存储结构, 这种结构内存排列更紧密, 能提高访存性能.

hash_max_ziplist_entries和hash_max_ziplist_value值作为阀值,hash_max_ziplist_entries表示一旦ziplist中元素数量超过该值,则需要转换为dict结构;hash_max_ziplist_value表示一旦ziplist中数据长度大于该值,则需要转换为dict结构。

redis3.2以前Hash存储  每一个数据有指向下一个数据的指针

redis的type都是Stirng类型的,但是encoding  int  row 类型

redis3.2以前 String的表示为sdshdr

缺点:存储非常短的字符,需要占用大内存

redis3.2以后

图片

来自网易云课堂公开课

ziplist数据结构是对链表的一个优化,不会产生碎片,节省空间

preawlen  前节点长度

每个entry    len   当前节点长度

data  真正的数据

链表指针会占用空间,松散存储,会产生碎片

当数据量大的时候,链表拷贝效率低

双向链表  分桶设计

图片

    rehash

在 Java 中 HashMap 扩容是个很耗时的操作,需要去申请新的数组,为了追求高性能,Redis 采用了渐进式 rehash 策略.这也是 hash 中最重要的部分.

在扩容的时候 rehash 策略会保留新旧两个 hashtable 结构,查询时也会同时查询两个 hashtable.Redis会将旧 hashtable 中的内容一点一点的迁移到新的 hashtable 中,当迁移完成时,就会用新的 hashtable 取代之前的.当 hashtable 移除了最后一个元素之后,这个数据结构将会被删除.

与java的hashmap的rehash区别

个人理解:hashmap的rehash是一次性拷贝的,不同的是,Redis的字典只能是字符串,另外他们rehash的方式不一样,因为Java的HashMap的字典很大时,rehash是个耗时的操作,需要一次全部rehash。Redis为了追求高性能,不能堵塞服务,所以采用了渐进式rehash策略。

rehash的详细步骤

https://www.cnblogs.com/meituantech/p/9376472.html

rehash存储数据量过大时会导致CPU飙升,HashMap1.8之前的resize会发生死循环。

图片

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。