Redis:原理速成+项目实战——Redis常见命令(数据结构、常见命令总结)

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习
🌌上期文章:Redis:原理速成+项目实战——初识Redis、Redis的安装及启动、Redis客户端
📚订阅专栏:Redis速成
希望文章对你们有所帮助

Redis数据结构

  • Redis数据结构介绍
  • Redis通用命令
  • String类型
  • Key的层级格式
  • Hash类型
  • List类型
  • Set类型
  • SortedSet类型

Redis数据结构介绍

Redis是一个key-value数据库,key为String类型,而value类型有很多样。
Redis为方便学习,将操作不同数据类型的命令做了分组,在官网中可以查看到不同的命令:
Redis官网——常见命令commands
如下所示:
在这里插入图片描述

Redis通用命令

为方便演示,我们在Redis命令行中创建简单数据库:
在这里插入图片描述
通用命令是部分数据类型的都可以使用的指令,我们可以在官方文档中查看:
在这里插入图片描述
官方文档对命令的解释是比较详细的,如果大家经常使用命令的话,有点印象的时候,其实在命令行里面看也是很方便的:
在这里插入图片描述
在这里,我就总结一下最常用的几个命令就好了:

1、KEYS:查看符合模板的所有key
在这里插入图片描述
其中,*表示多个字符,?表示单个字符,容易想到这种模糊搜索的方式肯定是效率不太高的。
2、DEL:删除一个指定的KEY
在这里插入图片描述
其中,mset是一种加入多种键值对的方式,在之后会介绍。
可以发现,del可以删除一个或多个key,要删除的某个key如果不存在也不会报错,命令运行的结果是成功删除的key的个数。
3、EXISTS:判断KEY是否存在,存在返回1,否则返回0
在这里插入图片描述
4、EXPIRE、TTL:
(1)EXPIRE:给一个key设置有效期,到期自动删除这个key
(2)TTL:查看一个KEY的剩余有效期
在这里插入图片描述
上面的命令定时为20s,利用TTL可以查看这个key还有多久到期,到-2就正式到期了,这时候这个key就会被自动删除。
在这里插入图片描述
如果我们在增加key后没有设置失效时间,那么其TTL的返回值就是-1,表示永久有效。
为什么需要EXPIRE这个命令呢?因为Redis数据的存储是在内存中的,内存的空间相比磁盘珍贵的多的。

String类型

字符串类型是Redis中最简单的存储类型。
键值对中,根据字符串的格式不同,又可以分为3类:

string:普通字符串
int:整数,可以自增自减
float:浮点型,可以自增自减

KEYVALUE
msghello world
num10
score92.5

无论哪种格式,其底层都是字节数组的形式来存储,只是编码方式不同,字符串类型的最大空间不能超过512M。
String常见命令如下:

命令作用
SET添加或修改已经存在的一个String类型的键值对
GET根据key获取String类型的value
MSET批量添加多个String类型的键值对
MGET根据多个key获取多个String类型的value
INCR让一个整型的key自增1
INCRBY让一个整型的key按指定步长自增
INCRBYFLOAT让一个浮点类型的数字按指定步长自增
SETNX添加一个String类型的键值对,前提是该key不存在
SETEX添加一个String类型的键值对,且指定有效期

实验:
在这里插入图片描述
在这里插入图片描述

Key的层级格式

Redis没有类似MySQL中的table的概念,因此要想个办法来区分不同类型的key。
其实,Redis的key允许有多个单词来形成层级结构,多个单词之间用’:'隔开,格式类似:

项目名:业务名:类型:id

若value是一个Java对象,例如一个user对象,则可以将对象序列化成JSON字符串后存储:

KEYVALUE
wxj:user:1{“id”: 1, “name”: “Jack”, “age”: 21}
wxj:product:1{“id”:1, “name”: “库里10”, “price”: 1999}

在这里插入图片描述
这种层级格式我们可以打开可视化工具去比较清晰的查看,便捷我们的开发。

Hash类型

Hash类型也叫做散列,其value是一个无序字典,类似于Java中的HashMap。
而String结构将对象序列化为json字符串后存储,当需要修改字段的时候就会很不方便,必须完全的覆盖字符串。
而Hash可以将对象的每个字段独立进行存储,这样就可以对单个字段来做CRUD了:

KEYVALUE-fieldVALUE-value
wxj:user:1nameJack
wxj:user:1age21
wxj:user:2nameRose
wxj:user:2age18

Hash常见命令:

命令作用
HSET key field value添加或修改hash类型key的field的值
HGET 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不存在

实验部分就自行做实验,其实这无非就是个Map嵌套的Map而已。

List类型

Redis中的List与Java中的LinkedList类似(有序、元素可重复、插入删除快,查询慢),可以看成是一个双向链表。既支持正向检索也支持反向检索。

命令作用
LPUSH key element左侧插入一个或多个元素
LPOP key左侧删除第一个元素
RPUSH key element右侧插入一个或多个元素
RPOP key右侧删除第一个元素
LRANGE key star end返回一段角标范围内的所有元素
BLPOP、BRPOP与LPOP、RPOP类似,但是在没有元素的时候会等待指定时间,而不是直接返回nil

在这里插入图片描述
这就跟双向队列似的,先push进去的是1,那么从左边取出来的就是3。

Set类型

Redis的Set结构与Java中的HashSet类似(无序、元素不重复、查找快、支持集合的交并差),可以看成一个value为null的HashMap。

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

SortedSet类型

Redis中的SortedSet是一个可排序的set集合,与Java中的TreeSet类似,但底层数据结构差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加hash表。
SortedSet具备的特性:可排序、元素不重复、查询速度快。
所以SortedSet经常被拿来实现排行榜这样的功能。

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

所有的排名都是升序的,要降序就需要在命令的Z后面添加REV。

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

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

相关文章

RIP路由协议配置实验

实验目的: (1)理解RIP路由的原理; (2)掌握RIP路由的配置方法 实验器材: Cisco packet 实验内容: 实验步骤: (1)布置拓扑: &…

【Minikube Prometheus】基于Prometheus Grafana监控由Minikube创建的K8S集群

文章目录 1. 系统信息参数说明2. Docker安装3. minikube安装4. kubectl安装5. Helm安装6. 启动Kubernetes集群v1.28.37. 使用helm安装Prometheus8. 使用helm安装Grafana9. Grafana的Dashboard设定10. 设定Prometheus数据源11. 导入Kubernetes Dashboard12. 实验过程中的常见问题…

shell打印粉色小心心、颜文字心心

#!/bin/bash # *********************************************************# # # # * Author : 白嫖一茶 # # * QQ邮箱址 : 2534824121qq.com # #…

万界星空科技车间生产管理系统解决方案

车间管理系统解决方案:   (一)车间生产计划管理解决方案   车间管理系统解决方案对于一般的生产计划,需完成编制、审批、下达、执行、完工等操作,车间管理系统解决方案立足于减少中间环节浪费,节约成本&#xff0c…

【Vue】使用Axios请求下载后端返回的文件流,并能够提示后端报错信息

【需求】使用Axios请求下载后端返回的文件流,下载失败时提示信息不写死,按照后端返回的信息进行提示。 一、需求分析 看到这个需求的时候,有人可能会很疑惑,这不是直接就能获取到吗,直接message.error()弹框就完事了&…

Matlab:BP神经网络算法,二叉决策树

1、BP神经网络算法 (1)步骤 1.准备训练数据和目标值 2.创建并配置BP神经网络模型 3.训练BP神经网络模型 4.用BP神经网络模型预测数据 例:某企业第一年度营业额为132468,第二年度为158948,第三年度为183737,预测第四年度的营…

【并发设计模式】聊聊线程本地存储模式如何实现的线程安全

前面两篇文章,通过两阶段终止的模式进行优雅关闭线程,利用数据不变性的方式保证数据安全,以及基于COW的模式,保证读数据的安全。本篇我们来简述下如果利用线程本地存储的方式保证线程安全。 首先一个大前提就是并发问题&#xff…

【六袆 - Framework】vue3入门;vue框架的特点矩阵列举;Vue.js 工作原理

vue框架的特点 Vue.js的特点展开叙述Vue.js的工作原理展开叙述 官方文档: https://cn.vuejs.org/guide/introduction.html Vue.js的特点 ┌────────────────────┬────────────────────────────────────…

yolov5 主要流程

1.介绍 本文包含了有关yolov5目标检测的基本流程,包括模型训练与模型部署,旨在帮助小伙伴们建立系统的认知💖💖 YOLO是 "You only look once "的首字母缩写,是一个开源软件工具,它具有实时检测…

昇腾910平台安装驱动、固件、CANN toolkit、pytorch

本文使用的昇腾910平台操作系统是openEuler,之前没了解过,不过暂时感觉用起来和centOS差不多。系统架构是ARM,安装包基本都是带aarch64字样,注意和x86_64区别开,别下错了。 安装依赖 cmake 通过yum安装的cmake版本较…

一体化、一站式!智能视频客服加码全媒体云呼叫中心能力

凭借对电话、短信、邮件、社交媒体、视频等数种沟通渠道强大的统一集成能力,全媒体云呼叫中心已跃升成为现代企业客户服务的核心工具,高效便捷地为企业提供客户服务。而随着消费者需求愈加多元化和个性化,传统的语音通话方式已无法满足部分消…

PHP序列化总结1--序列化和反序列化的基础知识

序列化和反序列化的作用 1.序列化:将对象转化成数组或者字符串的形式 2.反序列化:将数组或字符串的形式转化为对象 为什么要进行序列化 这种数据形式中间会有很多空格,不同人有不同的书写情况,可能还会出现换行的情况 为此为了…

【qt】解决qt里编辑qss后失效问题(qt编码问题)

1、先创建qss文本stylesheet.qss 以按钮为例 QPushButton {background-color:rgb(240,255,255);color: rgb(0, 0, 2);border-style: outset;border-color: beige;border-radius: 10px; }/* hover按钮悬浮,鼠标悬浮在按钮上的状态,按钮颜色 */QPushButto…

Qt/C++音视频开发62-电子放大/按下选择区域放大显示/任意选取区域放大

一、前言 电子放大这个功能思考了很久,也是一直拖到近期才静下心来完整这个小功能,这个功能的前提,主要得益于之前把滤镜打通了,玩出花样来了,只要传入对应的滤镜字符串,就可以实现各种各样的效果&#xf…

工业4G 物联网网关——机房动环监控系统应用方案介绍

机房动环监控系统是什么?机房动环监控系统的全称为机房动力环境监控系统,是一套安装在机房内的监控系统,可以对分散在机房各处的独立动力设备、环境和安防进行实时监测,统计和分析处理相关数据,第一时间侦测到故障发生…

Java InputStream OutputStream

OutputStream 轉 InputStream Case 1 toByteArray ByteArrayOutputStream out new ByteArrayOutputStream(); new ByteArrayInputStream(out.toByteArray()) Case2 從Output字節讀取Input ByteArrayOutputStream out new ByteArrayOutputStream();byte[] bs new byte[…

Livox-Mid-360 固态激光雷达ROS格式数据分析

前言: Livox-Mid-360 官方采用livox_ros_driver2ROS功能包发布ROS格式的数据,livox_ros_driver2可以把Livox原始雷达数据转化成ROS格式并以话题的形式发布出去。 下面列举一些雷达的基本概念: 点云帧:雷达驱动每次向外发送的一…

UE4运用C++和框架开发坦克大战教程笔记(十二)(第37~39集)

UE4运用C和框架开发坦克大战教程笔记(十二)(第37~39集) 37. 延时事件系统38. 协程逻辑优化更新39. 普通按键绑定 37. 延时事件系统 由于梁迪老师是写 Unity 游戏出身的,所以即便 UE4 有自带的 TimeManager 这样的延时…

AIGC开发:调用openai的API接口实现简单机器人

简介 开始进行最简单的使用:通过API调用openai的模型能力 OpenAI的能力如下图: 文本生成模型 OpenAI 的文本生成模型(通常称为生成式预训练 Transformer 或大型语言模型)经过训练可以理解自然语言、代码和图像。这些模型提供文…

RabbitMQ消息存储JSON格式反序列化

如果发送消息消息体为实体类对象数据,交换机接收消息经由路由键发送给队列。需要实现数据反序列化操作。实现JSON格式的反序列化操作 Rabbitmq的反序列化接口 MessageConverter,它的实现类有 Jackson2JsonMessageConverter的反序列化实现类&#xff0c…