【Redis】常见命令介绍(二)

news2024/9/24 5:52:24

🚗Redis学习·第二站~
🚩起始站:【Redis】概述&环境搭建(一)
🚩本文已收录至专栏:数据库学习之旅
👍希望您能有所收获

一.概述

Redis是典型的key-value数据库,key一般是字符串,而value可以是很多不同的数据类型,例如:
在这里插入图片描述

可以通过官网文档的介绍学习不同数据类型相关命令的使用:
在这里插入图片描述

也可以通过help @xxx来查看各种命令的使用:
在这里插入图片描述

由于特殊类型使用场景比较单一,暂不介绍。接下来,我们就学习常见的五种基本数据类型的相关命令,。

二.通用命令

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

  1. KEYS:查看符合模板的所有key,例如:
# *表示通配符
# 返回全部key
keys *
# 返回以 zhi 结尾的全部key
key *zhi
# 返回以 g 开头的全部key
key g*

注意:由于redis是单线程的,这种模糊查询在数据量大时不建议使用,可能会导致所有的服务被阻塞。

  1. DEL:删除一个指定的key,也可以删除多个
# 删除一个
del key
# 删除多个
del key1 key2 key3
  1. EXISTS:判断key是否存在
# 存在返回1,不存在返回0
exists key
  1. EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
# 给 guanzhi 设置10s过期
expire guanzhi 10

注意:设置key时不指定有效期则默认为-1,表示永久有效(浪费内存空间)

  1. TTL:查看一个KEY的剩余有效期
# 查看 guanzhi的过期时间
ttl guanzhi

注意:最后查看为-2,表示key已过期,通过keys可以发现查看不到

特别说明:我们也可以通过上述提到的help [command] 查看一个命令的具体用法,例如:
在这里插入图片描述

三.Key结构说明

  • 问题引入:

Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?

例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,此时如果使用id作为key,那就会冲突了,该怎么办?

  • 问题解决:

我们可以通过给key添加前缀加以区分,不过这个前缀不是随便加的,有一定的规范:

Redis的key允许有多个单词形成层级结构,多个单词之间用’:'隔开,格式如下:

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

当然这个格式并非固定,也可以根据自己的需求来删除或添加词条。这样以来,我们就可以把不同类型的数据区分开了。从而避免了key的冲突问题。

例如我们的项目名称叫 guanzhi,有user和blog两种不同类型的数据,我们可以这样定义key:

  • user相关的key:guanzhi:user:1

  • blog相关的key:guanzhi:blog1

如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储:

KEYVALUE
guanzhi:user:1{ “name”: “guanzhi”, “age”: 21}
guanzhi:blog:1{ “name”: “小米11”, “count”: 2}

并且,在Redis的桌面客户端中,也会以相同前缀作为层级结构,让数据看起来层次分明,关系清晰:
在这里插入图片描述

四.String类型

String类型,也就是字符串类型,是Redis中最简单的存储类型。

其value是字符串,不过根据字符串的格式不同,又可以分为3类:

  • string:普通字符串
  • int:整数类型,可以做自增、自减操作
  • float:浮点类型,可以做自增、自减操作

不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m.
在这里插入图片描述

String的常见命令有:

  • SET:添加或者修改已经存在的一个String类型的键值对
# 设置key 为guanzhi,value为666
set guanzhi 666

# 已存在,修改guanzhi值为888
set guanzhi 888
  • GET:根据key获取String类型的value
# 获取键guanzhi的值 
get guanzhi
  • MSET:批量添加多个String类型的键值对
# 例如设置三个键值对
mset k1 v1 k2 v2 k3 v3
  • MGET:根据多个key获取多个String类型的value
# 例如获取设置的多个key
mget k1 k2 k3 guanzhi
  • INCR:让一个整型的key自增1
# 例如上述guanzhi为888
incr guanzhi
# 返回889
  • INCRBY:让一个整型的key自增并指定步长
# 例如让guanzhi的值再次自增5
incrby guanzhi 5
# 返回893

技巧:也可以让其增长一个负值

# 例如,让guanzhi-888增加-8
incrby guanzhi -8
# 返回 880
  • INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
# 让键值对price-5.5增加0.5
incrbyfloat price 0.5
# 返回 6
  • SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
# 例如我们已经存在guanzhi,再次setnx
setnx guanzhi 999
# 返回0,显然这种方式无法修改值
  • SETEX:添加一个String类型的键值对,并且指定有效期
# 通过这个命令,我们可以在设置值时顺便设上日期,不必再次expire
setex gz 10 999 

注意:这个命令有点…,setex key exipireTime value,数值和过期时间的顺序别搞错了。

特别说明:以上这些命令,包含以下将要介绍的一些命令我们都可以通过help [command]查看其用法说明,此后不再赘述:
在这里插入图片描述

五.Hash类型

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。

String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便
在这里插入图片描述

Hash结构可以将对象中的每个字段独立存储可以针对单个字段做CRUD
在这里插入图片描述

Hash类型的命令形式上与String类型没有太大差异,类似于h+String类型种种,无非是由于数据类型不同导致的部分使用差异,常见命令有

  • HSET key field value:添加或者修改hash类型key的field的值
# 设置键为guanzhi字段为age值为20
hset guanzhi name fsp
# 设置键为guanzhi字段为age值为20
hset guanzhi age 20

在这里插入图片描述

  • HGET key field:获取一个hash类型key的field的值
# 获取键guanzhi的age字段值
hget guanzhi age
# 返回20
  • HMSET:批量添加多个hash类型key的field的值
# 一次性设置多个属性及其数值
hmset gz name fsp age 20
  • HMGET:批量获取多个hash类型key的field的值
# 一次性获取多个属性值
hmget gz name age
  • HGETALL:获取一个hash类型的key中的所有的field和value
hgetall gz 
# 同时获取
# 127.0.0.1:6379> HGETALL gz
# 1) "name"
# 2) "fsp"
# 3) "age"
# 4) "20"
  • HVALS:获取一个hash类型的key中的所有的value
# 打印所有属性值
hvals gz
# 1) "fsp"
# 2) "20"
  • HKEYS:获取一个hash类型的key中的所有的field
# 打印字段所拥有的属性
hkeys gz
# 1) "name"
# 2) "age"
  • HINCRBY:让一个hash类型key的字段值自增并指定步长
# 令数值型字段增长
hincrby gz age 111
  • HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
# 只能添加不存在的字段
hsetnx gz height 10

六.List类型

Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。

特征也与LinkedList类似:

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

常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

List的常见命令有:

  • LPUSH key element … :向列表左侧插入一个或多个元素
# 在users列表左边插入1,2,3
LPUSH users 1 2 3
  • LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
#移除users左边第一个元素
LPOP users
# 返回上述插入的1
  • RPUSH key element … :向列表右侧插入一个或多个元素
# 在users列表右边插入4,5,6
RPUSH users 4 5 6
  • RPOP key:移除并返回列表右侧的第一个元素
#移除users右边第一个元素
RPOP users
# 返回上述插入的6
  • LRANGE key star end:0为起始索引,从开始返回一段角标范围内的所有元素
# 例如 1,2,3,4中
LRANGE users 1 2
# 返回2,3
  • BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil
# 例如blpop
# 有元素则直接返回值,没有则等待10s中,还是没有可利用的数值再返回nil
blpop users 10

在这里插入图片描述

整体结构如图:
在这里插入图片描述

补充使用:

  • 如何利用List结构模拟一个栈?

    • 入口和出口限制在同一边操作
  • 如何利用List结构模拟一个队列?

    • 入口和出口限制在不同边操作
  • 如何利用List结构模拟一个阻塞队列?

    • 入口和出口限制在不同边,出队时采用BLPOP或BRPOP

七.Set类型

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

  • 无序

  • 元素不可重复

  • 查找快

  • 支持交集、并集、差集等功能

Set的常见命令有:

  • SADD key member … :向set中添加一个或多个元素
# 添加一个 
sadd guanzhi guan
# 添加多个
sadd guanzhi guan zhi 666

注意:由于set元素不可重复,因此无法重复插入数值

  • SREM key member … : 移除set中的指定一个或多个元素
# 移除一个 
srem guanzhi guan
# 移除多个 
srem guanzhi guan zhi
  • SCARD key: 返回set中元素的个数
scard guanzhi
  • SISMEMBER key member:判断一个元素是否存在于set中
# 存在返回1 不存在返回0
sismember guanzhi 666
  • SMEMBERS:获取set中的所有元素
# 打印集合中全部元素
smembers guanzhi
  • SINTER key1 key2 … :求key1与key2的交集

例如两个集合:s1和s2:
在这里插入图片描述

求交集:

SINTER s1 s2
# B,C
  • SDIFF key1 key2 …:求key1和key2的差集
SDIFF s1 s2 
# A

在这里插入图片描述

  • SUNION key1 key2 …:求key1和key2的并集
SUNION s1 s2
# A,B,C,D

八.SortedSet类型

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序底层的实现是一个跳表(SkipList)加 hash表

SortedSet具备下列特性:

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

因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。

SortedSet的常见命令有:

  • ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
# 添加元素
zadd guanzhi 66 fsp
# 更新score
zadd guanzhi 666 fsp
  • ZREM key member:删除sorted set中的一个指定元素
zrem guanzhi fsp
# 删除fsp元素
  • ZSCORE key member : 获取sorted set中的指定元素的score值
zscore guanzhi fsp
# 打印666
  • ZRANK key member:获取sorted set 中的指定元素的排名,默认都是升序
# 打印你按分值升序排列排名
zrank guanzhi fsp
  • ZCARD key:获取sorted set中的元素个数
# 获取集合中元素个数
zcard guanzhi
  • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数、
# 返回分值在区间内元素个数
zcount guanzhi 0 199
  • ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
# 指定元素增长
zincrby guanzhi 66 fsp
  • ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
# 获取排名0-3范围内元素,默认从0开始为起始
zrange guanzhi 0 3
  • ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
# 获取分值0-666范围内元素
zrangebyscore guanzhi 0 666
  • ZDIFF、ZINTER、ZUNION:求差集、交集、并集,与上述set类似

注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:

  • 升序获取sorted set 中的指定元素的排名:ZRANK key member

  • 降序获取sorted set 中的指定元素的排名:ZREVRANK key memeber

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

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

相关文章

电子科技大学软件工程期末复习笔记(八):软件维护

目录 前言 重点一览 软件维护的定义 四种类型的维护 软件维护的必要性 软件维护的成本 软件维护的困难性 可维护性的定义 决定软件可维护性的因素 软件维护的过程模型 维护费用估算 软件再工程 软件逆向工程 本章小结 前言 本复习笔记基于王玉林老师的课堂PPT与…

微信小程序开发【贰】

随手拍拍💁‍♂️📷 日期: 2023.01.28 地点: 台州 介绍: 吃完午饭后走在门前的步行道上,恰逢疫情高峰,整条步行道上只有我一个人,旁边的河面上时而掠过几只水鸟,试图打破这宁静的画面。墙上的涂鸦见证了疫情…

华为OD机试题,用 Java 解【人数最多的站点】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

华为OD机试题,用 Java 解【最小传递延迟】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

Java-扑克牌的创建以及发放

Java-扑克牌的创建以及发放题目:创建一个扑克牌(不需要包含大小王),分别分发给3个人,一个人发5张牌,输出结果要求包含全套牌(52张牌),以及3个人各自的牌的花色以及数字。1.扑克牌的源代码2.扑克牌运行结果3.扑克牌代码…

一种多场景通用备份容灾方案

导购链路中,因为业务对SLA的要求和下游无法保持一致,导致很多业务场景需要使用备份容灾。如当业务依赖的下游偶现异常或者超时的情况,在下游无法提供强依赖的数据时,为保证不空窗且当前业务对数据实时性要求不高时,可以…

【数据结构】单链表的C语言实现--万字详解介绍

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 文章目录1.链表1.1 链表的概念…

基于MSAM-YOLOv5的内河航道船舶识别方法

摘 要 针对内河航道上无人船识别目标时受背景复杂性和分布多样性影响而存在漏检的问题,提出了一种基于YOLOv5(you only look once)的算法。首先,提出了一种注意力模块MSAM(multiscale attention module,多尺度注意力模块),MSA…

【新型密集采样网络:遥感超分】

Remote Sensing Image Super-Resolution Using Novel Dense-Sampling Networks (基于新型密集采样网络的遥感图像超分辨率) 超分辨率技术在提高遥感数据的空间分辨率、克服星载成像系统的物理限制等方面发挥着重要作用。基于卷积神经网络(C…

可视化技术第一节课

主要内容通过echarts实现在网页上显示图表实现不同类型图表的转换实际操作&#xff08;1&#xff09;安装echarts如果想要安装echarts可以参考&#xff1a;安装步骤当然我们可以直接在我们的代码里面添加连接直接引用<script src"http://cdn.bootcss.com/echarts/4.8.0…

buu [BJDCTF2020]rsa_output 1 SameMod 1

[BJDCTF2020]rsa_output 1&#xff1a; 题目描述&#xff1a; {210583393373542878475341075446136053050154410905089240941988166912191033995268001128024163830889952539088574602667269256158268953033778016148293640346244751958599979431463055883159391307774504851…

2.27日报

情报上传接口添加字段&#xff1a;问题分配 调试手机号登录接口 解决困惑已久的bug&#xff1a;解析不到token; 问题描述&#xff1a; 在局域网下&#xff0c;前端页面请求时在请求头里携带token信息&#xff0c;后台获取不到header里的token参数&#xff0c;但是使用postma…

阶段八:服务框架高级(第六章:ElasticSearch3)

阶段八&#xff1a;服务框架高级&#xff08;第六章&#xff1a;ElasticSearch3&#xff09;Day-第六章&#xff1a;ElasticSearch分布式搜索引擎30.学习目标1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法&#xff08;桶聚合&#xff09;1.2.2.聚合结果排序1.2…

软件测试面试题 —— 整理与解析(2)

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;&#x1f30e;【Austin_zhai】&#x1f30f; &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xf…

python学生信息管理系统

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;python学生信息 免费获取完整源码源文件配置教程说明等 在IDLE中运行《学生信息管理系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时&#xff0c;有两种方…

SpringBoot2入门 第一个HelloWorld(参考尚硅谷SpringBoot2零基础入门教程)

文章目录0 官方文档1 系统要求2 maven设置3 HelloWorld3.0 需求3.1 创建Maven工程3.2 引入依赖3.3 创建主程序3.4 编写业务3.5 测试3.6 简化配置3.7 简化部署0 官方文档 https://docs.spring.io/spring-boot/docs/2.3.4.RELEASE/reference/html/index.html 1 系统要求 想要运…

RFS自动化测试工具安装与使用总结

一&#xff0c;调试 1&#xff0c;在调试时&#xff0c;总时提示“无法打开浏览器” 解决办法&#xff1a; 1&#xff0c;把浏览器的代理关闭 2&#xff0c;把浏览器的显示比例调到100% 3&#xff0c;在IE设置的安全选项中&#xff0c;把启用保护模式开启 4&#xff0c;去除进…

layui框架学习(12:进度条)

进度条是应用系统中的常见元素&#xff0c;无论是上传文件、下载文件、加载内容时都会显示进度条&#xff0c;Layui支持设置线条形进度条的样式&#xff0c;同时支持通过element模块动态操作进度条。   进度条样式分为两级结构&#xff0c;顶层一般为div元素&#xff0c;其cl…

【Opencv项目实战】背景替换:动态背景移除与替换(cvzone)

文章目录一、项目思路二、环境布置2.1、cvzone安装2.2、MediaPipe安装2.3、常见问题2.4、注意事项三、算法详解3.1、segmentor.removeBG()&#xff1a;去除背景&#xff08;抠出图像中的人&#xff09;3.2、cvzone.stackImages()&#xff1a;堆叠图像3.3、fpsReader.update()&a…

Hot Chocolate 构建 GraphQL .Net Core 服务

Hot Chocolate 是 .NET 平台下的一个开源组件库, 您可以使用它创建 GraphQL 服务, 它消除了构建成熟的 GraphQL 服务的复杂性, Hot Chocolate 可以连接任何服务或数据源&#xff0c;并创建一个有凝聚力的服务&#xff0c;为您的消费者提供统一的 API。 我会在 .NET 应用中使用…