首页天道酬勤redis提供数据结构(redis底层数据结构)

redis提供数据结构(redis底层数据结构)

admin 12-04 04:26 184次浏览

Redis端口号6379的来源

Redis的端口号是6379,但是这个端口号不是随机选择的,它来自‘MERZ’,这个字在手机中对应的号码是6379。在Redis作者Antirez的朋友圈里,MERZ '代表愚蠢。

数据结构

Redis的键只能是一个字符串,它的值可以是string、hash、list、sorted set (zset)。

String

Redis字符串是一个SDS Simple Dynamic String,内部结构有点类似java ArrayList,是预分配的,减少了频繁的内存扩展。如图所示,len是实际字符串的长度,capacity是预先分配的空间(阵列容量)。创建字符串时,len与capacity一样长,并且使用字节数组来存储内容。

如果在1M以内,容量会翻倍。如果超过1M,则每个1M字符串的最大容量为512m

字符串的一些基本操作

普通get设置批处理mset,mget设置到期时间。第一种到期使用setexsetex名称时间值来增加和减少List。

Redis的列表结构有点像Java中的LinkedList,但实际上,real estate不仅仅是一个简单的linkedlist,它还是一个底层的快速列表(太深了,作者以后都学不会.)

特性

列表的插入和删除效率很高,时间复杂度为O(1),但是小本书的定位很慢,就是O(n)

操作

左入右出(队列)当然也可以左出近出(栈),自己也可以实验。

slim book操作lindex相当于java的get(int index),它根据slim book获取值。但是,由于遍历链表,如果数据非常大,开销会增加。ltrim键index1 index2将数据哈希保持在index1和index2之间。

Redis的Hash类似于java中的HashMap。

特性

Redis中的Hash与java中的HashMap在重散列时是不同的。redis在执行重挂时,会同时保留新旧结构,在后续的调度任务中将旧数据慢慢移动到新数据。

操作

设置

Redis中的Set相当于java中的HashSet,内部相当于实现一个字典。

特性

唯一值

操作

分类集

Redis中的zset相当于java中的排序集和HashMap的组合。在设定的基础上,还可以给值一个分数(排名权重)。

特性

Zset因为分数需要排序,但是用普通链表发现销量太低。因此,zst采用分级制。有点像国家-省-市-xxx。坎迪,最低的乡镇,是我们的L0级。所有的元素串联在一起,每隔几个元素就选择一个位于L2的城市。同样,每隔几个L2级元素就选择一个省位于L3级。当我们插入一个新节点时,我们只需要从顶部开始,并将其定位在相应的位置。是不是有点像阵中的二分搜索法?

操作

其实也有一些操作,不过这里就不展示了。

数据知识点扩展

redis的所有数据结构都可以设置时间。

如何在Clojure中将字符串附加到向量【Java 框架学习】自学笔记(更新至 类与对象)
php自动加载机制原理(redis常用数据结构) redis hash原理(redis底层数据结构)
相关内容