Redis入门指南学习笔记(2):常用数据类型解析

一.前言

本文主要介绍Redis中包含几种主要数据类型:字符串类型、哈希类型、列表类型、集合类型和有序集合类型

二.字符串类型

字符串类型是Redis中最基本的数据类型,它是其他4种数据类型的基础,其他数据类型与字符串类型的差别从某种角度来说只是组织字符串的形式不同。

赋值和取值

SET key value命令用来设置键值对,GET value用来根据键取值,当键不存在时返回nil

> SET JAPAN Tokyo
"OK"
> GET JAPAN
"Tokyo"
> GET RUSSIA
(nil)

Redis对键的命令最好采用对象类型:对象ID:对象属性的形式,例如student:1:scores表示存储ID为1的学生的成绩列表。

递增/减数字

当存储的字符串是整数形式时,使用INCR命令可以使当前键值递增并返回递增后的值。

> SET money 5
"OK"
> INCR money
(integer) 6
> DECR money
(integer) 5

除了使用INCR,还可以使用INCRBY key increment来指定单次递增的数值,使用DECRBY key decrement来指定单次减去的数值。

> DECRBY money 15
(integer) -10
> INCRBY money 20
(integer) 10

通过INCRBYFLOAT key increment可以递增一个双精度浮点数。

> INCRBYFLOAT money 3.14
"13.14"

向末尾追加

通过APPEND key value可以向键值的末尾追加value,若键不存在,则可以将该键的值设置为value,该命令的返回值是追加后字符串的总长度。

> APPEND program Java
(integer) 4
> APPEND program " Python"
(integer) 11

第二次追加添加双引号是因为该参数包含空格,在redis-cli种需要用双引号以示区分。

获取字符串长度

通过STRLEN key可以获取键值的长度,若键不存在会返回0。

> GET program
"Java Python"
> STRLEN program
(integer) 11

同时设置/获取多个键值

通过MSET key val [key1 val1 ...]可以同时设置多个键值,通过MGET key [key1 ...]可以同时获取多个键对应的值。

> MSET python 1 cpp 2 java 3
"OK"
> MGET python cpp java
1) "1"
2) "2"
3) "3"

三.哈希类型

哈希类型的键值与Reids一样都采用了字典结构,其存储了字段(field)和字段值的映射,其中字段值只能是字符串

哈希类型适合存储对象,使用对象类别和ID构成键名,使用字段表示对象的属性,字段值存储属性的值。若要存储ID为1的学生三门功课math、chinese和english的成绩,存储结构可以表示为:

student:1 #键
--math 90 # 字段 字段值
--chinese 87
--english 78

赋值与取值

哈希类型的赋值与取值语法形式为:

HSET key field value
HGET key field
HMSET key field value [field value ...]
HMGET key field [field ...]
HGETALL key # 获取键所有的字段和字段值

HSET不区分插入和更新操作,这使得在更新数据时不需要事先判断字段是否存在。

具体用法:

> HSET student:1 math 90
(integer) 1
> HGET student:1 math
"90"> HMSET student:1 chinese 87 english 78
"OK"
> HMGET student:1 chinese english
1) "87"
2) "78"> HGETALL student:1
1) "math"
2) "90"
3) "chinese"
4) "87"
5) "english"
6) "78"

判断字段是否存在

通过HEXISTS key field可以判断字段是否存在,存在返回1,否则返回0。

> HEXISTS student:1 math
(integer) 1
> HEXISTS student:1 physics
(integer) 0

字段不存在时赋值

使用HSETNX key field value可以在字段field不存在时赋值,存在则不进行任何操作。

> HSETNX student:1 physics 88
(integer) 1
> HGET student:1 physics
"88"

删除字段

使用HDEL key field [field1 ...]可以删除一个或多个字段,并返回删除字段的个数。

> HDEL student:1 physics english
(integer) 2

获取字段名/字段值/长度

通过HKEYS key可以获取键中所有的字段名,通过HVALS key可以获取键中所有的字段值,通过HLEN key可以获取键所包含的字段数量。

> HKEYS student:1
1) "math"
2) "chinese"> HVALs student:1
1) "90"
2) "87"> HLEN student:1
(integer) 2

四.列表类型

列表类型可以存储一个有序的字符串列表,列表基于双向链表实现,可以向列表两端快速添加元素,但其索引速度比较慢,要获取列表中间某个位置的元素则必须要从头开始遍历到该位置。

向列表两端增加元素

通过LPUSH key value [value1 ...]RPUSH key value [value1 ...]可以分别往列表左边和右边添加元素,命令的返回值是列表的长度。

> LPUSH arr 3 2 1
(integer) 3
> RPUSH arr 4 5 6
(integer) 6
# arr
# 1 2 3 4 5 6

从列表两端弹出元素

通过LPOPRPOP可以分别从列表左端和右端弹出一个元素,返回值是弹出的元素。

> LPOP arr
"1"
> RPOP arr
"6"

获取列表中元素的个数

通过LLEN key可以获取列表中元素的个数,当键不存在时LLEN会返回0。

> LLEN arr
(integer) 4

获取列表片段

通过LRANGE key start stop可以获取列表索引从startstop之间的所有元素,索引从0开始。

> LRANGE arr 0 3
1) "2"
2) "3"
3) "4"
4) "5"

同Python一样,LRNAGE支持负索引,其中-1表示从右边开始第一个元素,-2表示从右边开始第二个元素,以此类推。

> LRANGE arr -3 -1
1) "3"
2) "4"
3) "5"

start大于stop会返回空列表,若stop超出列表索引大小,会返回到列表最右边的元素。

删除列表中指定的值

利用LREM可以删除列表中前count个值为value的元素,返回值为实际删除的元素个数:

  • count > 0时,LREM会删除从列表左边开始前count个值为value的元素。
  • count < 0时,LREM会删除从列表右边开始前count个值为value的元素。
  • count = 0时,LREM会删除列表中所有值为value的元素。
> LPUSH arr1 6 3 4 3 2 3 3
(integer) 7> LRANGE arr1 0 -1
1) "3"
2) "3"
3) "2"
4) "3"
5) "4"
6) "3"
7) "6"> LREM arr1 1 3
(integer) 1
# 3 2 3 4 3 6> LREM arr1 -1 3
(integer) 1
# 3 2 3 4 6> LREM arr1 0 3
(integer) 2
# 2 4 6

获取/设置指定索引的元素值

通过LINDEX key index可以获取指定索引的元素,通过LSET key index value可以修改指定索引位置的元素的值。

# arr: 2 3 4 5
> LINDEX arr 2
"4"> LSET arr 2 5
"OK"
> LINDEX arr 2
"5"

五.集合类型

Redis中的集合是基于哈希表实现的,集合中的元素都各不相同,往集合中增加删除、增加和查询都是常数时间复杂度。此外,集合还支持并、交和差运算。

增加/删除元素

通过SADD key member [member1 ...]可以往集合中添加一个或多个元素,通过SREM key member [member1 ...]可以删除一个或多个元素。

> SADD fruits app
(integer) 1
> SADD fruits banana peach
(integer) 2 # 返回值为成功添加的元素个数> SREM fruits app
(integer) 1 # 返回值为删除成功的元素个数

获取集合中的所有元素

通过SMEMBERS key可以获取集合中的所有元素。

> SMEMBERS fruits
1) "banana"
2) "peach"

判断元素是否在集合中

通过SISMEMBER key member可以判断元素member是否在集合中。

> SISMEMBER fruits app
(integer) 0
> SISMEMBER fruits banana
(integer) 1

集合间的元素

集合支持交、并和差运算。

# 交
SINTER key [key ...]
# 并
SUNION key [key ...]
# 差
SDIFF key [key ...]

给定集合A和B,交、并和差三种运算从左到右的示意图如下所示:

集合运算示意图

使用示例如下:

> SADD sa 1 3 4 5 7
(integer) 5
> SADD sb 2 4 6 8
(integer) 4> SINTER sa sb
1) "4"> SUNION sa sb
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"> SDIFF sa sb
1) "1"
2) "3"
3) "5"
4) "7"

六.结语

参考资料:

  • 《Redis入门指南》 李子骅编著

以上便是文本的全部内容,若有任何错误敬请批评指正,要是觉得不错可以点赞或关注一下,后续会持续更新。

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

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

相关文章

欧科云链研究院:如何降低Web3风险,提升虚拟资产创新的安全合规

在香港Web3.0行业&#xff0c;技术推动了虚拟资产投资市场的快速增长&#xff0c;但另一方面&#xff0c;JPEX诈骗案等行业风险事件也接连发生&#xff0c;为Web3行业发展提供了重要警示。在近期的香港立法会施政报告答问会上&#xff0c;行政长官李家超表示&#xff0c;与诈骗…

自己动手实现一个深度学习算法——三、神经网络的学习

文章目录 1.从数据中学习1&#xff09;数据驱动2&#xff09;训练数据和测试数据 2.损失函数1)均方误差2)交叉熵误差3)mini-batch学习 3.数值微分1&#xff09;概念2&#xff09;数值微分实现 4.梯度1&#xff09;实现2&#xff09;梯度法3&#xff09;梯度法实现4&#xff09;…

从零开始的目标检测和关键点检测(二):训练一个Glue的RTMDet模型

从零开始的目标检测和关键点检测&#xff08;二&#xff09;&#xff1a;训练一个Glue的RTMDet模型 一、config文件解读二、开始训练三、数据集分析四、ncnn部署 从零开始的目标检测和关键点检测&#xff08;一&#xff09;&#xff1a;用labelme标注数据集 从零开始的目标检测…

[H5动画制作系列]坐标转化问题一次搞清,一了百了

前言: 本次演示的坐标包括三个坐标层&#xff1a; 1.舞台上的某位置相对于舞台的全局坐标的坐标(黑色)。 2.舞台上蓝色实例内部某位置相对于该蓝色实例内部局部坐标的坐标(蓝色)。 3.舞台上蓝色实例内部的红色实例内部某位置相对该红色实例内部局部坐标的坐标(红色)。 舞台…

Day18力扣打卡

打卡记录 寻找重复数&#xff08;双指针&#xff09; 链接 Floyd判圈法&#xff0c;先用快慢指针以不同速率进行移动&#xff0c;最终一定会出现相遇点&#xff0c;然后在使一指针从初始开始&#xff0c;两指针再以同步调移动&#xff0c;再次相遇的点一定为循环开始的点位。 …

赋能制造业高质量发展,释放采购数字化新活力——企企通亮相武汉2023国际智能制造创新论坛

摘要 “为应对成本上升、供应端不稳定、供应链上下游协同困难、决策无数据依据等问题&#xff0c;利用数字化手段降本增效、降低潜在风险十分关键。在AI等先进技术发展、供应链协同效应和降本诉求等机遇的驱动下&#xff0c;采购供应链数字化、协同化成为企业激烈竞争的优先选…

链表的介绍

链表的结构和定义 介绍 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 链表&#xff08;linked list&#xff09;是一种经典的线性数据结构&#xff0c;它可以用来存储一组具有顺序性…

执行npm install时老是安装不成功node-sass的原因和解决方案

相信你安装前端项目所需要的依赖包&#xff08;npm install 或 yarn install&#xff09;时&#xff0c;有可能会出现如下报错&#xff1a; D:\code\**project > yarn install ... [4/4] Building fresh packages... [-/6] ⠁ waiting... [-/6] ⠂ waiting... [-/6] ⠂ wai…

oracle (9)Storage Relationship Strut

目录 一、基础知识 1、数据库逻辑结构图 2、Types of Segments 段的类型 3、Storage Clause Precedence 存储条款的优先顺序 4、Extent Alloc & Dealloc 区的范围分配和取消分配 5、 Used and Free Extents 使用和自由区 6、Database Block 数据库块 7、Multiple B…

玻色量子签约移动云“五岳”量子云计算创新加速计划!

2023年4月24-26日&#xff0c;由中国移动通信集团主办的“云擎未来 智信天下”2023移动云大会在苏州圆满落幕。 中国移动在本次大会发布了“五岳”量子云计算创新加速计划。作为中国移动量子计算方向的战略伙伴&#xff0c;玻色量子创始人&CEO文凯博士代表北京玻色量子科技…

vue3+vite实现一个后台管理框架,毒蘑菇后台管理。

写后台管理的项目写了很多个了&#xff0c;虽说用的别人的模板&#xff0c;自己专注于自己的业务&#xff0c;保证自己的业务不出错就行了&#xff0c;但是自定义配置又不好去配置&#xff0c;大家用的模板都差不多&#xff0c;用模板自带的业务功能呢后台又得是模板自带的&…

k8s之亲和性、污点

目录 亲和性 键值运算关系 硬策略 软策略 Pod亲和性与反亲和性 污点(Taint) 和 容忍(Tolerations) 污点(Taint) 容忍(Tolerations) 维护操作 故障排除步骤 亲和性 官方介绍&#xff1a;https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-nod…

玻色量子成功研制光量子计算专用光纤恒温控制设备——“量晷”

​近日&#xff0c;北京玻色量子科技有限公司&#xff08;以下简称“玻色量子”&#xff09;成功研制出一款高精度量子计算专用光纤恒温控制设备——“量晷”&#xff0c;该设备能将光纤的温度变化稳定在千分之一摄氏度量级&#xff0c;即能够做到0.001C的温度稳定维持&#xf…

推荐免费的文本转语音工具TTS-Vue【且开源】

标签&#xff1a; 文本转语音&#xff1b; 免费文本转语音软件&#xff1b; 网上有很多文本转语音的工具&#xff0c;但收费具多。 这里推荐一个免费的文本转语音工具。 不需要注册&#xff0c;下载安装就可以使用。且代码开源。 TTS-Vue 软件主页&#xff1a;https://loker…

什么是文件安全

文件安全就是通过实施严格的访问控制措施和完美的权限卫生来保护您的业务关键信息不被窥探&#xff0c;除了启用和监控安全访问控制外&#xff0c;整理数据存储在保护文件方面也起着重要作用。通过清除旧的、过时的和其他垃圾文件来定期优化文件存储&#xff0c;以专注于关键业…

基于OpenHarmony的启航开发板的基础操作

文章目录 前言一、前提准备二、基础操作1.hb set命令的使用2.hb build -f 命令的使用3.Hello World 案例 前言 在物联网&#xff08;IoT&#xff09;领域&#xff0c;开发板扮演着至关重要的角色&#xff0c;为开发人员提供了实验和原型设计的平台。而OpenHarmony作为一个开源…

《异常检测——从经典算法到深度学习》23 TimesNet: 用于常规时间序列分析的时间二维变化模型

zz# 《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Don…

node复制当前目录下的文件夹到另一层目录(包含多层文件夹嵌套)

前段时间在跟进node项目时有个node项目的需求&#xff0c;然后上线流程是把前端build后的文件夹放到后端仓库的静态资源目录下&#xff0c;再把后端代码发布上线。这样做的好处是在前端页面调用接口时&#xff0c;可以直接 /xxx来调用&#xff08;浏览器会自动把域名补全&#…

MacOS安装homebrew

文章目录 官网脚本无法正常下载安装使用HomebrewCN国内安装脚本进行安装找到一份合适的安装脚步执行安装脚本 Homebrew自己的安装位置使用Homebrew安装tree指令验证安装是否成功Homebrew把软件程序都安装到哪里了 Homebrew安装需要依赖Git&#xff0c;请先确保Git已安装成功 Ho…

面试算法44:二叉树中每层的最大值

题目 输入一棵二叉树&#xff0c;请找出二叉树中每层的最大值。例如&#xff0c;输入图7.4中的二叉树&#xff0c;返回各层节点的最大值[3&#xff0c;4&#xff0c;9]。 分析&#xff1a;用一个队列实现二叉树的广度优先搜索 由于要找出二叉树中每层的最大值&#xff0c;因…