Redis 五大数据类型的常用命令——列表、集合、哈希、有序集合

在这里插入图片描述

  各位小伙伴们大家好,欢迎来到这个小扎扎的Redis 6专栏,在这个系列专栏中我对B站尚硅谷的Redis教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛

💡Redis知识点速览

  • 🍖 五大数据类型——列表(List)
    • 🥩 List的底层数据结构
    • 🥩 列表常用命令
  • 🍖 五大数据类型——集合(Set)
    • 🥩 Set的底层数据结构
    • 🥩 集合常用命令
  • 🍖 五大数据类型——哈希(Hash)
    • 🥩 Hash的底层数据结构
    • 🥩 哈希常用命令
  • 🍖 五大数据类型——有序集合(Zset)
    • 🥩 Zset的底层数据结构
    • 🥩 有序集合常用命令

🍖 五大数据类型——列表(List)

  首先应该明确的一点就是,Redis中的五大数据结构是对value的概念,而不是指key的数据类型。Redis中的列表是一个简单的字符串列表,按照插入的顺序进行存储并非是一个无序列表。List的底层实际上是一个双向链表,所以你可以快速的向链表头部或者尾添加元素,但是如果操作链表中间的元素的话性能就会很差

🥩 List的底层数据结构

  List的数据结构为快速链表quickList,那么有的小伙伴可能会有疑问了,你之前不是说过List的底层是一个双向链表吗,怎么又成快速链表了?实际上快速链表和双向链表的概念并不冲突。

什么是快速链表?
  快速链表是Redis3.2之后引入的一种数据类型, 该结构是将许多的压缩链表采用双向链表的形式连接起来的一种结构, 这种链表中的每一个节点是一个压缩链表. 这样的设计能在时间效率和空间效率上实现较好的折中在这里插入图片描述  在列表数据比较少的时候只使用一块连续的内存存储,这个结构就是压缩链表(ziplist),当数据比较多的时候就,就使用很多个压缩链表进行存储,每个压缩链表又作为一个节点采用双向链表的形式连接起来,这就形成了一个快速链表

🥩 列表常用命令

左插或者右插的方式创建K-V:
  lpush rpush K V V V … lpush相当于双向链表的头插法,rpush相当于双向链表的尾插法,关于这两种方法的详细介绍参考下面这篇博客:https://blog.csdn.net/jankin6/article/details/80954203

获取key对应List索引范围内的value:
   从左向右lrange key from to

从左边或者右边删除一个值并返回:
  lpop rpop key 在这里插入图片描述从第一个List的右边删除一个值插到第二个List的左边:
  rpoplpush K K 在这里插入图片描述获取key对应List的索引位置元素:
  lindex key index
获取key对应List的长度:
  llen key
在key对应List的某个元素之前插入元素:
  linsert key before ele newele
在key对应List的某个元素之后插入元素:
  linsert key after ele newele 在这里插入图片描述在key对应List的某个元素之后插入元素:
  linsert key after ele newele 在这里插入图片描述

🍖 五大数据类型——集合(Set)

  Set集合的功能实际上与List列表很是类似,与List不同的就是集合内部的元素是无序不重复的,他可以对添加的元素实现自动去重功能,如果你想存储一个列表数据但是又不想出现重复数据,还不在乎数据的存储顺序的话,可以是使用set集合实现。set集合的底层实际上就是一个value值为null的hash表,所以它查找数据的速度很快

🥩 Set的底层数据结构

  Set的底层数据结构就是一个字典,只不过字典的实现方式是哈希表(hashtable),hashtable就是普通的哈希表(key为set的值,value为null)

🥩 集合常用命令

创建一个K-V:sadd K V V V…
查看key对应的value集合:smembers key在这里插入图片描述判断集合中是否有该元素:sismember key value
key对应的value集合长度:scard key
删除集合中的元素:srem K V V V…在这里插入图片描述随机删除集合中元素并返回:spop key
随机取出集合中指定个元素:srandmember key num在这里插入图片描述将集合的元素移动到另一个集合:smove K K V
两个集合的交集:sinter K K
两个集合的并集:sunion K K
两个集合的差集:sdiff K K在这里插入图片描述

🍖 五大数据类型——哈希(Hash)

  Redis中的Hash实际上就是一个键值对的集合,Hash也是针对K-V中value的概念,就是value中存储了一个String类型的fieldvalue的映射表,十分类似于Java中Map集合元素存储的映射关系,下面以Hash中的一个K-V为例画图帮助理解在这里插入图片描述

🥩 Hash的底层数据结构

  Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。

🥩 哈希常用命令

添加K-V数据: hset K field value field value…
添加K-V数据: hmset K field value field value…
查看K对应的V中field的值: hget K field
判断K对应的V中field是否存在: hexistst K field在这里插入图片描述获取K对应的V中所有的field: hkeys K
获取K对应的V中所有的field的值: hvals K
K对应的V中的field的值加几: hincrby K field num
添加一个映射关系存在则失败: hsetnx K field value在这里插入图片描述

🍖 五大数据类型——有序集合(Zset)

  有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。
不同之处是有序集合的每个成员都关联了一个评分(score),结合会按照这个评分(score)从低最高排序集合中的成员。集合的成员是唯一的,但是评分可以重复。
  因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。

🥩 Zset的底层数据结构

  SortedSet(zset)底层使用了两个数据结构:使用hash关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。还用跳跃表给元素value排序,根据score的范围获取元素列表

什么是跳跃表(skiplist)?在这里插入图片描述跳跃表就是每往上一层就跳一个元素组成链表,跳跃表都是从最高层开始查找,比如说查找51的过程大致如下:

  • 从第2层开始,1节点比51节点小,向后比较到41节点比51节点小,继续向后比较,后面就是NULL了,所以从41节点向下到第1层
  • 在第1层,41节点比51节点小,继续向后,61节点比51节点大,所以返回从41向下到第0层
  • 第0层中,41节点比51节点小,继续向后到要查找的51节点

共经历查找4次,流程如下在这里插入图片描述

🥩 有序集合常用命令

添加K-V数据(带上评分): zadd K score value score value…
查看K-V数据: zrange K from to
查看K-V数据(带上评分): zrange K from to withscores在这里插入图片描述按照评分查看范围内的值
从小到大排: zrangebyscore K min max
从大到小排: zrevrangebyscore K max min在这里插入图片描述增加value对应的score: zincrby K num value
按照value删除: zrem K value
计算score在范围内的个数: zcount K min max
查询value按score的排名: zrank K value在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

aop注解配置切点 spring_springboot aop 自定义注解方式实现一套完善的日志记录

一:功能简介本文主要记录如何使用aop切面的方式来实现日志记录功能。主要记录的信息有: 操作人,方法名,参数,运行时间,操作类型(增删改查),详细描述,返回值。二:项目结构图如果想学习…

抽象类、接口的区别和相似点

各位小伙伴们大家好,欢迎来到这个小扎扎的《Java核心技术 卷Ⅰ》笔记专栏,在这个系列专栏中我将记录浅学这本书所得收获,鉴于 看到就是学到、学到就是赚到 精神,这波简直就是血赚 💡涉及的知识点速通🛫 abs…

c标签判断true false jsp_Java学习知识点:小白如何掌握JSP技术?

今天千锋广州小编就给大家分享零基础如何掌握JSP技术,下面一起来看看吧!一、Java初级开发之jsp概述1.关于jspJavaServer Pages简称jsp,从“server”这个词可以看出,这其实也是一门java服务端技术,其实可以简单的把jsp认为是servle…

python语言保留字的特点_python保留字及其说明

原博文 2019-07-14 22:05 − 保留字 说 明 and 用于表达式运算,逻辑与操作 as 用于类型转换 assert 断言,用于判断变量或条件表达式的值是否为真 break 中断循环语句的执行 class 用于定义类 continue 继续执行下一次循环 ...011647 相关推荐 2019-12-19…

使用Java操作Redis的两种方式Jedis、RedisTemplate

各位小伙伴们大家好,欢迎来到这个小扎扎的Redis 6专栏,在这个系列专栏中我对B站黑马的Redis教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 💡Redis知识点速览&#…

python提取数据库数据_Python如何读取MySQL数据库表数据

本文实例为大家分享了Python读取MySQL数据库表数据的具体代码,供大家参考,具体内容如下 环境:Python 3.6 ,Window 64bit 目的:从MySQL数据库读取目标表数据,并处理 代码: # -*- coding: utf-8 -*- import p…

【项目实战】基于Redis实现短信验证码登录 (附源码、思路)

各位小伙伴们大家好,欢迎来到这个小扎扎的Redis 6专栏,在这个系列专栏中我对B站黑马的Redis教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 💡Redis知识点速览&#…

加工中心刻字宏程序_FANUC OI系列图书——车床、铣床及加工中心编程

☞ 这是金属加工(mw1950pub)发布的第10035篇文章导读今天跟大家分享FANUC OI系列图书,包括车床、铣床及加工中心编程,快来看看吧!《FANUC 0i数控车床/加工中心编程技巧与实例》选择在企业里应用*广泛、编程*具代表性的日本FANUCSeries0i-TC/T…

Redis 的缓存策略

各位小伙伴们大家好,欢迎来到这个小扎扎的Redis 6专栏,在这个系列专栏中我对B站黑马的Redis教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 💡Redis知识点速览&#…

关闭后天 树莓派_陪你一起玩树莓派-系统安装

从今天就开始我们的树莓派之旅,心情是不是有点小激动?我们拿到一个树莓派是一个裸机。我们要准备一张16G的高速TF闪存卡,一个5V/2A的USB电源和一根micro B的 usb线。装机步骤:一、下载树莓派系统1、浏览器打开树莓派官方网站 http…

简单的签到代码_PHP实现一个小小的签到功能,到底用MySQL还是Redis?

来源 | http://suo.im/5EWN3k今天,看下签到功能怎么选择?现在的网站和app开发中,签到是一个很常见的功能,如微博签到送积分,签到排行榜~微博签到如移动app ,签到送流量等活动,移动app签到用户签…

【Redis 6】缓存穿透、缓存雪崩、缓存击穿(附解决方案、代码)

各位小伙伴们大家好,欢迎来到这个小扎扎的Redis 6专栏,在这个系列专栏中我对B站黑马的Redis教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 💡Redis知识点速览&#…

8软件遇到的问题及解决方法_Excel工作表中的8个常见问题,你一定遇到过,附解决方法...

在Excel工作表中,最常用的还是一些技巧,如果能够熟练掌握,对于工作效率的提高绝对不是一点点哦,结合工作实际,小编对工作中常见的问题进行了总结,一共有8类,你一定也遇到过……一、Excel工作表常…

unity着色器和屏幕特效开发秘笈_Oculus研发分享:开发移动VR内容时应避免的PC渲染技术...

查看引用/信息源请点击:映维网开发移动VR内容时应避免的PC渲染技术(映维网 2019年11月25日)有不少开发者都是以与PC相同的方式来开发Quest游戏,但这可能会导致优化性能方面出现大量困难。Oculus软件工程师特雷弗达什(T…

Java包装类、java中的方法传参机制:按值调用

各位小伙伴们大家好,欢迎来到这个小扎扎的《Java核心技术 卷Ⅰ》笔记专栏,在这个系列专栏中我将记录浅学这本书所得收获,鉴于 看到就是学到、学到就是赚到 精神,这波简直就是血赚 💡涉及的知识点速通🛫 方法…

尤克里里怎么样_尤克里里和吉他区别?尤克里里与吉他相比有什么不可替代的优势...

尤克里里和吉他有什么区别?想必大家都见过尤克里里吧,就是类似吉他形状的一种小型弦拨乐器。我们可以简单的认为:尤克里里是简化版本的吉他,更加简单,更加便宜。小编弹的就是尤克里里2.从外观上:吉他很大&a…

饿汉懒汉单例设计模式的使用及区别、java中的import关键字

各位小伙伴们大家好,欢迎来到这个小扎扎的《Java核心技术 卷Ⅰ》笔记专栏,在这个系列专栏中我将记录浅学这本书所得收获,鉴于 看到就是学到、学到就是赚到 精神,这波简直就是血赚 💡涉及的知识点速通🛫 关于…

广电运通不好进吗_我可以说郑州新风的安装大部分都是垃圾吗?

说郑州的新风安装都是垃圾,这话很无礼,很自大,很傲慢,但是我能说确实是这样嘛?其实包括我以前安装的也不合格——虽然我不是故意的。这几年见过许多家同行安装的新风,可以说目前见到的很多家都不合格&#…

Java迭代器和Collection接口

各位小伙伴们大家好,欢迎来到这个小扎扎的《Java核心技术 卷Ⅰ》笔记专栏,在这个系列专栏中我将记录浅学这本书所得收获,鉴于 看到就是学到、学到就是赚到 精神,这波简直就是血赚 💡涉及的知识点速通🛫 关于…

私钥经过哈希计算可以产生公钥_「区块链基础概念100」:公钥和私钥 | 027

免责声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。小编:记得关注哦投资区块链,猛戳:火星财经App下载来源:学习区块链原文标题:「…