Redis常见数据结构

在这里插入图片描述

文章目录

  • 前言
  • 一、Redis通用命令
  • 二、String类型
  • 三、Key的层级结构
  • 四、Hash类型
  • 五、List类型
  • 六、Set类型
  • 七、SortedSet类型

前言

Redis是一个key-value的数据库,key一般是String类型,但是value的类型多种多样
在这里插入图片描述
在学习Redis不同数据类型时,我们可以在官网( Redis官网)查看不同的命令:
在这里插入图片描述
也可以使用使用help @xxx 命令的方式查看

一、Redis通用命令

通用命令是部分数据类型都可以使用的指令,常见的有:

  • KEYS:查看符合模板的所有key(支持*或?的模糊查询),不建议在生产环境设备使用
    在这里插入图片描述

  • DEL:删除一个指定的key
    在这里插入图片描述

  • EXISTS:判断key是否存在
    在这里插入图片描述

  • EXPIRE:给一个key设置有效期,有效期到期后该key会自动删除

  • TTL:查看一个KEY的剩余有效期
    在这里插入图片描述
    那我们不设置expire它的默认有效期是多久呢?
    在这里插入图片描述
    -1代表永久有效

二、String类型

String类型也就是字符串类型,是Redis最简单的存储类型,其value是字符串,不过根据字符串的格式不同,又可以分为以下三类:

  • String:普通字符串
  • int:整型类型,可以自增自减操作
  • float:浮点类型,可以自增自减操作
    不管那种格式,底层都是字节数组形式存储,只不过编码方式不同。字符串类型最大空间不能超过512m
    在这里插入图片描述
    String常见命令:
命令作用
SET添加或修改一个已经存在的String类型的键值对
GET根据key获取String类型的value
MSET批量添加多个String 类型的键值对
MGET根据多个key获取多个String类型的value
INCR让一个整型的key自增1
INCRBY让一个整型的key自增并指定步长 incrby age 2 让age自增2
INCRBYFLOAT让一个浮点类型的数字自增并指定步长
SETNX添加一个String类型的键值对,前提是key不存在,否则不执行
SETEX添加一个String类型的键值对,并指定有效期

SET与GET:
在这里插入图片描述

MSET与MGET:
在这里插入图片描述
INCR:
在这里插入图片描述
INCRBY:
在这里插入图片描述
INCRBYFLOAT:
在这里插入图片描述
SETNX:
在这里插入图片描述
SETEX:
在这里插入图片描述

三、Key的层级结构

Redis中没有MySQL中Table的概念,我们如何区别不同类型的key呢?
Redis的Key允许有多个单词形成层级结构,多个单词之间用 : 隔开,如下:项目名:业务名:类型:id,这个格式不是固定的,我们可以根据实际需要来调整

比如:student的key:snut:student:1,teacher的key:snut:teacher:1
在这里插入图片描述

我们在客户端看起来好像没什么区别,我们在图形化工具查看一下
在这里插入图片描述

四、Hash类型

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构
String结构是将Java对象序列化为JSON字符串进行存储,如果我们想要去修改对象某个字段时会很不方便
在这里插入图片描述
Hash结构可以将每个对象的每个字段独立存储,针对每个字段可以进行CRUD
在这里插入图片描述
Hash的常见命令:

命令作用
HSET key field value添加或修改hash类型的key的field的值
HSET key field获取一个hash类型key的field的值
HMSET批量添加多个hash类型key的field的值
HMGET批量获取多个hash类型key的field的值
HGETALL获取一个hash类型的key中所有的field和value
HKEYS获取一个hash类型的key中所有的field
HVALS获取一个hash类型的key中所有的value
HINCRBY让一个hash类型的key字段自增并指定步长
HSETNX添加一个hash类型key的field值,前提是field不存在,否则不执行

HSET与HGET:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
HMSET与HMGET:
在这里插入图片描述
HGETALL:
在这里插入图片描述
HKEYS与KVALS:
在这里插入图片描述
HINCRBY:
在这里插入图片描述
HSETNX:
在这里插入图片描述

五、List类型

Redis中的List类型与Java中的LinkedList类似,可以看作是一个双向链表结构,支持正向检索也支持反向检索。有以下特征:

  • 有序
  • 元素可重复
  • 插入和删除速度快
  • 查询速度一般

经常用来存储一个有序的集合,比如评论区列表,微博点赞列表等
List常见命令:

命令作用
LPUSH Key element向列表左插入一个或多个元素
LPOP Key移除并返回左侧第一个元素,没有则返回nil
RPUSH Key element向列表右插入一个或多个元素
RPOP Key移除并返回右侧第一个元素
LRANGE key star end返回一段范围内的所有元素
BLPOP和BRPOP与LPOP与RPOP类似,不过在没有元素时等待指定时间,而不是直接返回nil

在这里插入图片描述
大家需要理清楚LPUSH与RPUSH的区别:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
LPOP与RPOP:
在这里插入图片描述
LRANGE:
在这里插入图片描述
在这里插入图片描述
大家需要注意我们这里的下标是从0开始的

如何使用List结构模拟一个栈?
入口和出口设置在同一边

如何使用List结构模拟一个队列?
入口和出口在不同边

如何使用List结构模拟一个阻塞队列?
入口和出口在不同边,出队时采用BLPOP或BRPOP

六、Set类型

Redis的Set结构与Java中的HashSet类型,可以背看作是一个value为null的HashMap。有以下特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能

Set单个集合常见命令:

命令作用
SADD key member向set中添加一个或多个元素
SREM key member移除set中指定元素
SCARD key返回set中元素的个数
SISMEMBER key member判断一个元素是否存在于set中
SMEMBERS获取set中的所有元素

在这里插入图片描述
Set多个集合常见命令:

命令作用
SINTER key1 key2求key1与key2的交集
SDIFF key1 key2求key1与key2的差集
SUNION key1 key2求key1与key2的并集

在这里插入图片描述

七、SortedSet类型

Redis的SortedSet是一个可排序的set集合,与Java的TreeSet有些类似,但底层数据结构差别很大,SortedSet中的每一个元素带有一个score属性,可以针对score属性进行排序,底层的实现是一个跳表+hash表,有以下特性:

  • 可排序
  • 元素不重复
  • 查询速度快

SortedSet常见命令:

命令作用
ZADD key score member添加一个或多个元素到SortedSet,如果已经存在更新score
ZREM key member删除SortedSet中的指定元素
ZSCORE key member获取SortedSet中指定元素的score值
ZRANK key member获取SortedSet中指定元素的排名
ZCARD key获取SortedSet中元素的个数
ZCOUNT key min max统计score值在给定范围内的个数
ZINCRBY key increment member让SortedSet中指定元素自增,步长为指定的increment
ZRANGE key min max按照score排序后,获取指定排名范围内的元素
ZDIFF、ZINTER、ZUNION求差集、交集、并集

上述命令练习:

  • 将下列学生得分存入Redis的SortedSet中:Jack 85,Lucy 89,Rose 82,Tom 95,Jerry 78,Amy 92,Miles 76
    在这里插入图片描述
    在这里插入图片描述

  • 删除Tom同学
    在这里插入图片描述

  • 获取Amy同学的分数
    在这里插入图片描述

  • 获取Rose同学的排名
    需要注意的是我们Sorted是升序,想要获取排名需要逆序(ZREVRANK),并且下标是从0开始的
    在这里插入图片描述
    在这里插入图片描述

  • 给Amy同学加2分
    在这里插入图片描述

  • 查询成绩前三的同学
    我们仍需要逆序查询
    在这里插入图片描述

  • 查询80分以下有几个学生
    在这里插入图片描述

  • 查询80分以下的所有同学
    在这里插入图片描述

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

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

相关文章

AIGC - Stable Diffusion 图像控制插件 ControlNet (OpenPose) 配置与使用

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131591887 论文:Adding Conditional Control to Text-to-Image Diffusion Models ControlNet 是神经网络结构,用于控制预…

Vision Pro销售策略曝光,面罩/头带/屈光镜片加大零售难度

彭博社Mark Gurman再次发布了关于苹果Vision Pro的销售策略,以及零售方面的难题。 一、销售计划和策略 1,2024年初先在美国部分门店销售,仅线下购买,线上暂不开放。购买方式是先线上预约(可能要提供面部扫描图、眼镜…

JMeter进行websocket测试

在做websocket性能测试的时候找了几个测试工具都暂时没有对websocket的支持,发现jmeter好像对websockect支持。但是使用jmeter时需要安装插件,下面一起看一下。 jmeter下载安装: 官网下载 https://jmeter.apache.org/download_jmeter.cgi 也…

spring-spring整合Junit

1.导包 <artifactId>spring-test</artifactId> <artifactId>junit</artifactId> 2.创建测试类

Server - 通过 AutoSSH 建立服务器端口转发用于访问网页

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131536508 AutoSSH 是一款用于创建和维护持久的SSH隧道的工具&#xff0c;可以自动检测和恢复断开的连接&#xff0c;从而保证隧道的稳定性。Auto…

20.光敏传感器

1.光敏传感器介绍&#xff1a; 光敏二极管(光敏电阻),作为光敏传感器&#xff1b;光敏二极管也称光电二极管&#xff1b;光敏二极管与半导体二极管在结构上类似&#xff0c;其管芯是一个具有光敏特征的PN结&#xff0c;具有单向导电性&#xff0c;因此工作时需要加上反向电压。…

Linux性能优化实践——如何学习Linux性能优化

性能指标 学习性能优化的第一步便是了解“性能指标”这个概念。 “高并发”和“响应快”对应着性能优化的两个核心指标——“吞吐”和“延时”。这两个指标是从应用负载的角度来考察性能的&#xff0c;直接影响了产品终端的用户体验。跟他们对应的&#xff0c;是从系统资源的视…

前后端实现mqtt物联网消息互通对话(图文详解)

需求&#xff1a;前端使用mqtt订阅主题和硬件设备进行通讯功能&#xff0c;不走后端&#xff0c;前端操作可以控制。从部署到对话&#xff0c;跟着图文一套下来你也可以学会。很简单的。后端用node&#xff0c;前端就用原生的js&#xff0c;如果要使用vue&#xff0c;可以看我另…

LabVIEW脉冲检测实现

文章目录 前言一、脉冲检测的原理二、代码实现1、前面板①、输入波形相关参数②、脉冲检测结果 2、程序框图 三、代码自取结论 前言 本节通过 labview 软件实现先导脉冲检测的功能&#xff0c;从而获取先导脉冲的频率、先导脉冲与线性调频信号的延时的相关信息。 一、脉冲检测…

网站制作(道歉)

王心怡* , 张钊* (淮北师范大学计算机科学与技术学院&#xff0c;安徽 淮北) *These authors contributed to the work equllly and should be regarded as co-first authors. &#x1f31e;欢迎来到数据结构的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎…

Docker深入

一、简介 Docker是一个用于构建、运行、传送应用程序的平台。 2、为什么使用Docker 在部署服务器过程中&#xff0c;配置各种环境变量、第三方依赖等等&#xff0c;耗费时间太长&#xff0c;使用Docker可以将他们打包成一个集装箱&#xff0c;只要在开发环境中运行成功&…

[SSM]MyBatis查询语句与动态SQL

目录 十、MyBatis查询语句专题 10.1返回Car 10.2返回List 10.3返回Map 10.4返回List 10.5返回Map,map> 10.6resultMap结果映射 使用resultMap进行结果映射 是否开启驼峰命名自动映射 10.7返回总记录条数 十一、动态SQL 11.1 if标签 11.2 where标签 11.3 trim标…