抄作业c语言,Redis抄作业 - kkget的个人空间 - OSCHINA - 中文开源技术交流社区

前几天整理到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以后

ad4306eeca95ff898d20bdf210deb3eb.png

来自网易云课堂公开课

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

preawlen  前节点长度

每个entry    len   当前节点长度

data  真正的数据

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

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

双向链表  分桶设计

19c49dbcb667f4db837740963f69f3db.png

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会发生死循环。

46479b299d17900122c10e4cbf816e50.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值