热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

MERZ在Redis作者Antirez的好友圈当中代表愚蠢的意思。数据结构Redis的key只能是字符串,value可以是String,Hash,List,SortedSet。如图


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的所有数据结构都可以设置时间。


推荐阅读
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
author-avatar
手机用户2502896067
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有