你看过Redis数据结构底层实现吗?
的五大数据结构。你有没有想过redis底层是怎样的数据结构呢,他们和我们java中的HashMap、List、等使用的数据结构有什么区别呢。 1. 字符串处理(string) 我们都知道redis是用C语言写,但是C语言处理字符串和数组的成本是很高的,下面我分别说几个例子。 没有数据结构支撑的几个问题
好了,Redis自己构建了一种名叫Simple dynamic string(SDS)的数据结构,他分别对这几个问题作了处理。我们先来看看它的结构源码:来说说它的优点:
更多了解:https://redis.io/topics/internals-sds 这就是string的底层实现,更是redis对所有字符串数据的处理方式(SDS会被嵌套到别的数据结构里使用)。 2. 链表 Redis的链表在双向链表上扩展了头、尾节点、元素数等属性。上面可以看到,Redis的链表有这几个特点:
3. 字典(Hash) Redis的Hash,就是在数组+链表的基础上,进行了一些rehash优化等。
下面我们讲一下它的rehash优化。 3.2 rehash 当哈希表的键对泰国或者太少,就需要对哈希表的大小进行调整,redis是如何调整的呢?
3.3 渐进式rehash 我们在3.2中看到,redis处理rehash的流程,但是更细一点的讲,它如何进行数据迁的呢? 这就涉及到了渐进式rehash,redis考虑到大量数据迁移带来的cpu繁忙(可能导致一段时间内停止服务),所以采用了渐进式rehash的方案。步骤如下:
它的好处:采用分而治之的思想,将庞大的迁移工作量划分到每一次CURD中,避免了服务繁忙。 (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |