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

news2024/11/24 4:08:09

一.前言

本文主要介绍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.coloradmin.cn/o/1163268.html

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

相关文章

HALCON的综合应用案例【01】: 3D 算法处理在 Visual Studio 2019 C# 环境中的集成实例

前言: HALCON 为一款比较流行的商业视觉处理软件,他提供了多种开发的模式,可以在HALCON中开发,也可以将HALCON的设计通过导出库的形式集成到其他开发环境里面,以方便系统集成。本文为笔者自己的一个3D 视觉检测项目,利用HALCON的3D 库开发算法,然后,将算法集成到 MS-V…

指挥通信车360度3d虚拟互动展示系统的优势及特点

通信车是装有通信装备&#xff0c;用于保障通信联络的专用车辆&#xff0c;用于偏僻/特殊环境下的机动通信。并且机动通信局装备通常分为应急综合通信车、网络管理车、程控电话车、自适应跳频电台车、数字扩频接力车、散射通信车、卫星通信车、光缆引接车、线缆收放车和通信电源…

医疗数据可视化大屏:重构医疗决策的未来

医疗行业一直是信息密集型领域之一&#xff0c;它的复杂性不仅在于患者病历和医疗数据的海量积累&#xff0c;还包括了病情诊断、医疗资源分配、病患治疗等多层次的挑战。随着信息技术的不断发展&#xff0c;医疗数据可视化大屏成为了一种创新性的工具&#xff0c;它为医疗管理…

Linux学习笔记之一(计算机网络基础)

Linux learning note 1、计算机网络1.1、IP地址和MAC地址1.2、NAT、端口1.3、动态IP、静态IP、DHCP1.4、子网掩码、网关地址、DNS服务器1.5、TCP、UDP、ftp、http 2、虚拟机的网络管理2.1、桥接模式2.2、NAT模式2.3、仅主机模式2.4、总结 1、计算机网络 1.1、IP地址和MAC地址 …

python:将多个9波段影像tif文件转成numpy格式保存

作者:CSDN @ _养乐多_ 最近有粉丝问,如何将多个9波段的Aster影像tif文件转成numpy格式保存,然后输入网络进去训练。本文提供了两种思路和代码。 结果如下图所示, 文章目录 一、简单方法(分两步)二、端到端方法(一步到位)一、简单方法(分两步) 先将所有的多波段影像…

葡萄酒中的“多酚”有机化合物

“多酚”是在植物中发现的有机化合物&#xff0c;包括树皮、种子、坚果、茶叶和木材。单宁是一种多酚&#xff0c;它们完全是天然的&#xff0c;但是尝起来很苦。如果你是一个茶迷&#xff0c;你应该知道喝一口高单宁的红茶会使你的口腔内侧起皱。 葡萄也含有大量的单宁&#…

文心一言画图体验1.0

文心一言画图体验1 版本&#xff1a;文心大模型3.5 文心一言官方链接&#xff1a;https://yiyan.baidu.com/ 1、画一幅画&#xff1a;在大树下喝啤酒的熊猫&#xff0c;水墨风格&#xff0c;中国风&#xff0c;印象主义&#xff0c;写意&#xff0c;薄涂 2、画一幅画&#x…

一、VPN基础

VPN基础 1、定义及特征2、VPN优势3、VPN分类4、VPN体系结构5、VPN实现的模式 —————————————————————————————————————————————————— 1、定义及特征 虚拟专用网VPN是依靠Internet服务提供商ISP和网络服务提供商NSP在公共网…

如何保证跨国传输的安全性,了解这篇文章就够了

在当今的全球化时代&#xff0c;跨国传输是许多企业不可或缺的业务需求&#xff0c;无论是进行远程协作、数据分析、项目交付、市场拓展等&#xff0c;都需要在不同国家或地区之间进行数据、信息、货物或服务的传输。然而&#xff0c;跨国传输也面临着很多挑战和风险&#xff0…

中兴路由器、小米路由器无线信号强度对比

最近小米新推出的路由器小米AX3000T非常火&#xff0c;在网上看到有好多人都在安利&#xff0c;引起了我的兴趣&#xff0c;刚好老家的路由器用了这么久也是时候要换一个了&#xff0c;毕竟我妈老说上网卡??所以我立马就在PDD搞了一台回来&#xff0c;打算和我现在家里用的中…

【进程控制⑥】:进程替换/exec*()系列接口

【进程控制⑥】&#xff1a;进程替换/ exec*(&#xff09;系列接口 一.进程替换原理二.替换特点1.独立性2.唯一性3.不变性4.不返回 三.程序替换应用【exec*系列系统调用】①execl&#xff1a;②execlp&#xff1a;③execv&#xff1a;④execle&#xff1a; 一.进程替换原理 我…

【自动控制原理】数学模型:控制系统的运动微分方程、拉氏变换和反变换、传递函数

文章目录 第2章 数学模型基本概念2.1 控制系统的运动微分方程a. 常微分方程的一般标准形式b. 线性定常系统微分方程的一般标准形式 2.1.1 建立数学模型的一般步骤2.1.2 控制系统微分方程的列写 2.2 拉氏变换和反变换2.2.1 拉氏变换的定义2.2.2 典型函数的拉氏变换2.2.3 拉氏变换…

2023年鸿雁全国经销商大会暨秋季新品发布会圆满落幕

聚力同行&#xff0c;再起征程。11月2日&#xff0c;一场以“数字双翼&#xff0c;鸿雁奋飞”为主题的鸿雁全国经销商大会暨秋季新品布会在杭州盛大召开。鸿雁电器总裁王米成、副总裁吴明、副总裁夏晓衍、市场部总经理梁彩雷、灯饰与智能家居渠道部总经理王育炳、五金水暖渠道部…

照亮室外生活:户外灯具的创新趋势

日落之后&#xff0c;庭院变成了一个独特的世界&#xff0c;等待我们探索和享受。然而&#xff0c;要让庭院成为温馨、迷人的地方&#xff0c;户外照明起着关键作用。在这里&#xff0c;我们将讨论如何通过巧妙的户外照明&#xff0c;为庭院带来夜晚的魅力。 户外照明不仅是为了…

石油开采vr模拟生产安全体验平台提高员工上岗技能

近年以来我国矿山曾发生多起罐笼坠落事故&#xff0c;造成多人死伤&#xff0c;给企业和社会造成不良影响&#xff0c;事故的发生的主要原因多是人员违章、安全设施附件检修维护不到位。 钻井平台安全生产重于泰山&#xff0c;关乎经济社会发展大局&#xff0c;更关乎人们群众生…

StoneDB-8.0-V2.1.0 企业版正式发布!免费公测中!

很高兴告诉大家&#xff0c;我们StoneDB-8.0-V2.1.0企业版正式发布了&#xff01;经过一个月的开发&#xff0c;我们的研发团队用极高的效率对2.0新架构版本查漏补缺&#xff0c;完善了最新架构的代码&#xff0c;并对性能、稳定性做出了优化&#xff0c;同时也修复了一些用户们…

OmniGraffle Pro 7.22.2(思维导图工具)

OmniGraffle Pro是一款图表绘制和设计软件&#xff0c;它的主要特点包括&#xff1a; 功能强大&#xff1a;OmniGraffle Pro提供了丰富的图形设计工具&#xff0c;包括各种形状库、图层支持、自定义模板等&#xff0c;可以满足用户在图表绘制和设计方面的各种需求。智能连接和…

《Linux从练气到飞升》No.25 Linux中多线程概念

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

WIN11如何固定文件夹查看方式

找一个文件夹&#xff0c;设置成自己需要的视图方式 文件夹选项>查看>应用到文件夹 缺点&#xff1a;所有相同类型文件夹都会使用此视图

什么是IPA,和RPA有啥区别和联系?

∵ IPA中包含了RPA的“PA”&#xff0c;AI的“I” ∴IPARPAAI&#xff0c;等式成立&#xff01; AI&#xff1a;或人工智能&#xff0c;是一种复杂的计算机技术&#xff0c;旨在模仿人类智能行为和决策的能力。它涵盖了多种技术和方法&#xff0c;包括&#xff1a;机器学习&am…