Redis——基础数据结构

摘抄自《redis深度历险》。  

Redis提供了5种基础数据结构,分别是String,list,set,hash和zset。

1、String

  Redis所有的键都是String。Redis的String是动态字符串,内部结构类似Java的ArrayList和C++ STL中的Vector。内部分配的容量capacity一般高于字符串实际长度len,字符串长度小于1M时,扩容时capacity*2,长度大于1M时,扩容时一次只扩1M空间。

  字符串最大长度512M。

2、list

  Redis的列表实现是一个链表,因此list的插入和删除非常快,但是索引定位很慢。当列表弹出最后一个元素后,该数据结构自动被删除,内存被回收。

  Redis的列表结构常用来做异步队列使用,将需要延后处理的任务结构体序列化成字符串塞进Redis的列表,另一个线程从这个列表中轮询数据进行处理。

  Redis的list底层存储的不是一个简单的linkedlist,而是称为快速链接quicklist的一个结构。列表元素较少时使用连续的一块内存(ziplist),它将所有元素紧挨着一起存储。分配的是一块连续的内存。当数据量比较多时改成quicklist。因为普通的链表需要附加指针空间(例如当存储的数据时int时,pre和next两个指针就比存储的数据大多了),并且加剧内存碎片化。因此Redis将链表和ziplist结合起来使用,既满足了插入删除性能,又不会出现太大的空间冗余。

 

 

3、Set

  相当于Java的HashSet。

4、Hash

  相当于Java中的HashMap。它是无序字典,内部实现是数组+链表。当发生hash碰撞时,元素用链表串起来。不过,Redis的Hash键只能是String。而且,Java的hashmap在rehash时是一次性的,而Redis为了高性能采用了渐进式rehash

 

 5、zset

  zset是一个有序集合,它可以保证元素的唯一性,并且可以给每个元素赋予score,代表该元素的排序权重。它的内部实现是一种叫“跳跃列表”的数据结构。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Nginx + lua +[memcached,redis]

精品案例1、Nginxluamemcached,redis实现网站灰度发布2、分库分表/基于Leaf组件实现的全球唯一ID(非UUID)3、Redis独立数据监控,实现订单超时操作/MQ死信操作SelectPollEpollReactor模型4、分布式任务调试Quartz应用

KVM调整cpu和内存

一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid