Redis 常用的类型和 API

news2024/11/16 13:46:39

前言

在当今的软件开发中,数据存储与操作是至关重要的一部分。为了满足日益增长的数据需求和对性能的追求,出现了许多不同类型的数据库。其中,Redis 作为一种基于内存且高性能的键值存储数据库,因其快速的读取速度、丰富的数据结构和灵活的应用场景而备受推崇。

本文将深入探讨 Redis 数据库中常用的数据类型(如字符串、哈希、列表、集合、有序集合)及其对应的常用 API。我们将详细介绍每种数据类型的特点、使用场景以及相应的 API 操作,旨在帮助读者更好地理解并灵活运用 Redis 数据库,从而提升数据存储与处理的效率和性能。

 

一、Redis 中常用的五种数据类型

  1. 字符串(String):字符串是 Redis 最基本的数据类型,它可以存储任意类型的数据,例如文本、数字或序列化的对象等。Redis 提供了丰富的 API 操作,如设置/获取值、追加、获取子串等。

  2. 哈希(Hash):哈希类型是一种键值对的集合,类似于关联数组或字典。每个哈希可以存储多个字段和与之相关联的值,常用于存储对象的属性。Redis 提供了对哈希的各种操作,如设置/获取字段值、获取所有字段、删除字段等。

  3. 列表(List):列表是一系列按照插入顺序排列的元素集合,可以在列表的两端进行快速的插入和删除操作。它常被用作队列、栈或消息发布与订阅等场景。Redis 提供了对列表的操作,如在头部/尾部插入元素、获取范围内的元素、删除指定元素等。

  4. 集合(Set):集合是一组无序且唯一的元素集合,不允许重复的成员存在。集合常用于存储一些独立的元素,如用户标签、好友列表等。Redis 提供了对集合的操作,如添加/移除元素、求交集/并集、判断元素是否存在等。

  5. 有序集合(Sorted Set):有序集合是一种类似于集合的数据结构,每个元素都关联着一个分数(score),通过分数对元素进行排序。有序集合常用于需要排序的场景,如排行榜、计分系统等。Redis 提供了对有序集合的操作,如添加/移除元素、根据分数范围获取元素、获取元素的排名等。

这五种数据类型提供了丰富的功能和灵活的应用场景,使得 Redis 成为一种强大的数据存储工具。在具体的应用中,可以根据需求选择合适的数据类型,从而高效地存储和操作数据。

我们来一个一个的试一下吧。

二、String (字符串 )

String 是 redis 最基本的类型,一个 key 对应一个 value。它是二进制安全的,可以包含任何数据,如jpg图片或者序列化的对象。

1、set:赋值操作。
*语法:set key value*

在可视化工具里面查看:

2、get 取值操作
语法:get key

3、getset 取值后重新赋值
*语法:getset key value*
 
4、mset 同时设置多个键值
*语法:mset key value [key value ...]*
 5、mget 同时获取多个键值
*语法:mget key [key ...]*

6、del 删除一个或多个键值
*语法:del key [key ...]*
7、incr 当存储的字符串是整数时,让当前键值递增,并返回递增或增加后的值。
*语法:incr key* 

8、incrby 当存储的字符串是整数时,让当前键值增加指定的数值,并返回递增或增加后的值。
语法:incrby key increment*

刚刚我们递增后的值是2,所以递增2后,值为:4。 

9、decr 让当前键值递减,并返回递减或减少后的值。
*语法:decr key*

10、decrby 让当前键值减少指定的数值,并返回递减或减少后的值。
*语法:decrby key decrement*

11、append 向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于 SET key value。返回值是追加后字符串的总长度。
*语法:append key value*

12、获取字符串长度(STRLEN)

STRLEN命令返回键值的长度,如果键不存在则返回0。

三、hash(哈希)

hash是一个string类型的field和value的映射表,而field只能是String类型,hash特别适合用于存储对象。

1、hset HSET一次只能设置一个字段值。HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。
*语法:HSET key field value*

在 ARDM 里面查看:

 

2、hsetnx 当字段不存在时赋值,类似HSET。区别在于如果字段存在,该命令不执行任何操作。

例如:hsetnx user name qiu

说明:如果user中不存在name字段则设置name的值为qiu,否则不做任何操作。  

*语法:HSETNX key field value*

3、hget HGET一次只能获取一个字段值。
语法:HGET key field

 4、hgetall 获取所有字段值。
语法:HGETALL key

5、hdel 可以删除一个或多个字段,返回值是被删除的字段个数。
语法:HDEL key field [field...]

6、hincrby 为某个字段增加数值。
语法:HINCRBY key field increment

 7、hexists 判断字段是否存在,存在则返回1,否则返回0。
语法:HEXISTS key field

8、hkeys 获取所有的字段名。
语法:HKEYS key

 9、hvals 获取所有字段的值。
*语法:HVALS key*

 

10、hlen 获取字段数量。
语法:HLEN key

 

四、list(列表)

Redis的list是采用来链表来存储的,所以对于Redis的list数据类型的操作,是操作list的两端数据来操作的。

1、lpush 向列表左边添加元素。
*语法:LPUSH key value [value ...]*

 2、rpush 向列表右边添加元素。
*语法:RPUSH key value [value ...]*

3、lrange LRANGE命令是列表类型最常用的命令之一,用于获取列表中的某一片段,将返回start到stop之间的所有元素(包含两端的元素),索引从0开始。索引可以是负数,如:-1代表最后边的一个元素。
*语法:LRANGE key start stop*

 

4、lpop LPOP命令从列表左边弹出一个元素,会分两步完成:第一步是将列表左边的元素从列表中移除。第二步是返回被移除的元素值。
*语法:LPOP key*

 

5、rpop RPOP命令从列表右边弹出一个元素,步骤与LPOP类似,第一步是将列表右边的元素从列表中移除。第二步是返回被移除的元素值。
*语法:RPOP key*
 6、llen 获取列表中元素的个数
*语法:LLEN key*

 7、lrem
语法:LREM key count value

LREM命令会删除列表中前count个值为value的元素,返回实际删除的元素个数。根据count值的不同,该命令的执行方式会有所不同:

当count>0时, LREM会从列表左边开始删除。

当count<0时, LREM会从列表右边开始删除。

当count=0时,LREM删除所有值为value的元素。

 

8、lindex 获得指定索引的元素值。
语法:LINDEX key index

 

9、lset 设置指定索引的元素值。
语法:LSET key index value

  10、ltrim 只保留列表的指定片段
语法:LTRIM key start stop

11、linsert 
语法:LINSERT key BEFORE|AFTER pivot value

LINSERT首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。

  12、rpoplpush 将一个列表的最后一个元素转移到另一个列表的最前面
语法:RPOPLPUSH source destination

 

五、set(集合)

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

1、sadd 增加一个或多个元素。
*语法:SADD key member [member ...]*

2、srem 移除一个或多个元素。
语法:SREM key member [member ...]

3、smembers 获得集合中的所有元素。
语法:SMEMBERS key

4、sismember 判断元素是否存在集合中。存在返回1,否则返回0。
语法:SISMEMBER key member

 5、sdiff 查找属于集合A并且不属于集合B的元素。(差集运算)
语法:SDIFF key [key ...]

 6、sinter 查找属于集合A且属于集合B的元素。(交集运算)
语法:SINTER key [key ...]

 7、sunion 查找属于集合A或者属于集合B的元素。(合并运算)
语法:SUNION key [key ...]

8、scard 获取集合中元素的个数。
语法:SCARD key

 9、spop
语法:SPOP key [count]

从集合中弹出一个或多个元素,由count指定。如果不指定count,默认弹出一个。由于集合是无序的,所有SPOP命令会从集合中随机选择一个元素弹出。

六、zset(有序集合)

zset又称sorted set,称之为有序集合,可排序的,但是唯一。和set的不同之处在于zset会给集合中的元素添加一个分数,然后通过这个分数进行排序。

1、zadd

语法:ZADD key score member [score member ...]

向有序集合中加入一个或多个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。

 

 2、zscore 获取元素的分数。
语法:ZSCORE key member

 3、zrem 移除有序集合中的一个或多个成员,不存在的成员将被忽略。
语法:ZREM key member [member ...]

4、zrange 
语法:ZRANGE key start stop [WITHSCORES]

按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)。如果需要获得元素的分数可以在命令尾部加上WITHSCORES参数。

 5、zrevrange 
语法:ZREVRANGE key start stop [WITHSCORES]

按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)。如果需要获得元素的分数的可以在命令尾部加上WITHSCORES参数。

6、zrank 获取元素排名(从小到大)。
语法:ZRANK key member

 7、zrevrank 获取元素排名(从大到小)。
语法:ZREVRANK key member

8、zrangebyscore 获得指定分数范围的元素。 
语法:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

9、zincrby 增加某个元素的分数,并返回更改后的分数。
语法:ZINCRBY key increment member

10、zcard 获取集合元素的数量。
语法:ZCARD key

 11、zcount 获取指定分数范围内的元素个数。
语法:ZCOUNT key min max

12、ZREMRANGEBYRANK 按照排名范围删除元素。
语法:ZREMRANGEBYRANK key start stop

 13、ZREMRANGEBYSCORE 按照分数范围删除元素。
语法:ZREMRANGEBYSCORE key min max

 

七、使用 redis 的好处

Redis是一种快速、开源的内存数据库,具有以下几个优点和好处:

  1. 高性能:Redis的数据存储在内存中,读写速度非常快。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,使得它可以满足各种场景下的高性能需求。

  2. 持久化:Redis支持数据持久化,可以将数据以文件的形式保存到硬盘上。这样即使Redis服务重启或崩溃,数据也可以恢复。

  3. 缓存:Redis常用于作为缓存层,将热点数据存储在内存中,以提供快速访问。使用Redis作为缓存可以大幅提升系统的读取速度和性能。

  4. 发布/订阅:Redis支持发布/订阅模式,可以方便地实现消息的发布和订阅机制。这对于实时消息推送、事件通知等场景非常有用。

  5. 分布式锁:Redis提供了原子操作和分布式锁的支持,可以实现分布式环境下的锁机制,避免资源竞争和并发问题。

  6. 高可用性:Redis支持主从复制和哨兵模式,可以实现高可用性和自动故障转移。当主节点发生故障时,自动选举新的主节点,保证系统的可用性。

  7. 多语言支持:Redis提供了多种编程语言的客户端库,如Java、Python、C#等,使得开发人员可以方便地在各种语言环境下使用Redis。

总的来说,Redis以其高性能、灵活的数据结构和丰富的功能特性,在缓存、数据存储、消息队列等多个领域都有广泛的应用。它可以提升系统性能、增加系统可靠性,并且非常适合处理大规模的实时数据。

 

八、总结

Redis 常用的五大类型已经讲完了,没有很多理论的知识,都是一些命令,要全部记住也有点难,做好笔记,要用的时候找来用就行了。

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

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

相关文章

Flink SQL --命令行的使用(02)

1、窗口函数&#xff1a; 1、创建表&#xff1a; -- 创建kafka 表 CREATE TABLE bid (bidtime TIMESTAMP(3),price DECIMAL(10, 2) ,item STRING,WATERMARK FOR bidtime AS bidtime ) WITH (connector kafka,topic bid, -- 数据的topicproperties.bootstrap.servers m…

Javaweb之javascript事件的详细解析

1.6 JavaScript事件 1.6.1 事件介绍 如下图所示的百度注册页面&#xff0c;当我们用户输入完内容&#xff0c;百度可以自动的提示我们用户名已经存在还是可以使用。那么百度是怎么知道我们用户名输入完了呢&#xff1f;这就需要用到JavaScript中的事件了。 什么是事件呢&…

拆位线段树 E. XOR on Segment

Problem - E - Codeforces 区间求和&#xff0c;区间异或的操作跟线段树的区间求和、区间相见相似&#xff0c;考虑用线段树。 发现数组初始值最多是1e6&#xff0c;有不到25位&#xff0c;可以知道异或最大值是这些位数全是1的情况。 发现可以对每一位进行运算就和。 我们开…

图论14-最短路径-Dijkstra算法+Bellman-Ford算法+Floyed算法

文章目录 0 代码仓库1 Dijkstra算法2 Dijkstra算法的实现2.1 设置距离数组2.2 找到当前路径的最小值 curdis&#xff0c;及对应的该顶点cur2.3 更新权重2.4 其他接口2.4.1 判断某个顶点的连通性2.4.2 求源点s到某个顶点的最短路径 3使用优先队列优化-Dijkstra算法3.1 设计内部类…

通过Python设置及读取PDF属性,轻松管理PDF文档

PDF文档属性是嵌入在PDF文档中的一些与文档有关的信息&#xff0c;如作者、制作软件、标题、主题等。PDF属性分为默认属性和自定义属性两种&#xff0c;其中默认属性是一些固定的文档信息&#xff0c;部分信息自动生成&#xff08;如文件大小、页数、页面大小等信息&#xff09…

Linux上C++通过LDAP协议使用kerberos认证AES加密连接到AD服务器

一.前言 记录自己在实现这个流程遇到的各种问题&#xff0c;因为我也是看了许多优质的文章以及组内大佬的帮助下才弄成的&#xff0c;这里推荐一个大佬的文章&#xff0c;写的非常优秀&#xff0c;比我这篇文章写得好得很多&#xff0c;最后我也是看这个大佬的代码最终才实现的…

数据运营基础:用户场景营销

一、概述 场景营销模型是顶层模型&#xff0c;是站在用户经营和用户场景角度来制定经营策略的模型。本质上&#xff0c;场景营销模型是在用户使用产品的每个细分场景中通过分析用户需求整合功能、实体和体验等为用户提供服务的模型。 二、场景的起源和特点 数据运营体系在发展…

【C++】日期类实现,与日期计算相关OJ题

文章目录 日期类的设计日期计算相关OJ题HJ73 计算日期到天数转换KY111 日期差值KY222 打印日期KY258 日期累加 在软件开发中&#xff0c;处理日期是一项常见的任务。为了方便地操作日期&#xff0c;我们可以使用C编程语言来创建一个简单的日期类。在本文中&#xff0c;我们将介…

[工业自动化-18]:西门子S7-15xxx编程 - 软件编程 - PLC用于工业领域的嵌入式系统:硬件原理图、指令系统、系统软件架构、开发架构等

目录 前言&#xff1a; 一、PLC的硬件电路原理 1.1 硬件框图 1.2 硬件模块详解 &#xff08;1&#xff09;CPU &#xff08;2&#xff09;存储器 &#xff08;3&#xff09;输入/输出&#xff08;I/O&#xff09;模块 &#xff08;4&#xff09;编程器 &#xff08;5&a…

(只需三步)Vmvare tools安装教程,实现与windows互通复制粘贴与文件拖拽

首先确保Ubuntu是联网的&#xff0c;如果连不上网可以参考我的这个联网教程&#xff0c;也很简单 &#xff08;只需三步&#xff09;虚拟机上vm的ubuntu不能联上网怎么办-CSDN博客 第一步&#xff1a;卸载之前的tools,确保没有残留 sudo apt-get autoremove open-vm-tools 第…

第2关:计算二叉树的深度和节点个数

任务描述相关知识 二叉树深度概念二叉树节点二叉树叶子节点概念编程要求测试说明 任务描述 本关任务&#xff1a;给定一棵二叉树&#xff0c;计算该二叉树的深度、总节点个数和叶子节点个数。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.二叉树深度概念…

Linux高级编程:IPC之管道

一、无名管道 1.1 无名管道的概述 管道(pipe)又称无名管道。 无名管道是一种特殊类型的文件&#xff0c;在应用层体现为两个打开的文件描述符。 任何一个进程在创建的时候&#xff0c;系统都会 给他分配4G的虚拟内存&#xff0c;分为3G的用户空间和1G 的内核空间&#xff0c;内…

SOME/IP学习笔记2

1. SOME/IP 协议 SOME/IP目前支持UDP&#xff08;用户传输协议&#xff09;和TCP&#xff08;传输控制协议&#xff09;&#xff0c; PS:UDP和TCP区别如下 TCP面向连接的&#xff0c;可靠的数据传输服务&#xff1b;UDP面向无连接的&#xff0c;尽最大努力的数据传输服务&…

springboot容器

1.主要指的是servlet容器 servlet组件由sevlet Filter Listener等 2.自动配置原理 通过ServletWebServerFactoryAutoConfiguration 配置这些内容 (自动配置类开始分析功能) conditionalOnclass开启条件 ServletRequest类 import导入嵌入式的tomcat Jetty等 这些是配置类&…

鸿蒙原生应用开发-DevEco Studio中HarmonyOS与OpenHarmony项目的切换

一、找到该目录 二、修改操作系统类型 三、分别进行开发&#xff0c;一些常规的应用功能实现后&#xff0c;相互切换后都可以正常运行的。前期OpenHarmony项目如果连接开发板比较困难的化&#xff0c;开发完成后&#xff0c;切换成为HarmonyOS后就可以比较详细地看看效果了。

接口开放太麻烦?试试阿里云API网关吧

前言 我在多方合作时&#xff0c;系统间的交互是怎么做的&#xff1f;这篇文章中写过一些多方合作时接口的调用规则和例子&#xff0c;然而&#xff0c;接口开放所涉及的安全、权限、监控、流量控制等问题&#xff0c;可不是简简单单就可以解决的&#xff0c;这一般需要专业的…

高防IP可以抵御哪些恶意攻击

高防IP协议可以隐藏用户的站点&#xff0c;使得攻击者无法发现恶意攻击的目标网络资源&#xff0c;从而提高了源站的安全性。能够有效抵御常见的恶意攻击类型ICMPFlood、UDPFlood、 TCPFlood、SYNFlood、ACKFlood等&#xff0c;帮助游戏、金 融、电子商务、互联网、政企等行业抵…

套接字的多种可选项

套接字可选项和I/O缓冲大小 套接字的多种可选项 套接字可选项分为 IPPROTO_IP、IPPROTO_TCP、SOL_SOCKET 三层&#xff0c;各层的含义为&#xff1a; IPPROTO_IP&#xff1a;IP 协议相关事项&#xff1b; IPPROTO_TCP&#xff1a;TCP 协议相关事项&#xff1b; SOL_SOCKET&am…

HCIE-灾备技术和安全服务

灾备技术 灾备包含两个概念&#xff1a;容灾、备份 备份是为了保证数据的完整性&#xff0c;数据不丢失。全量备份、增量备份&#xff0c;备份数据还原。 容灾是为了保证业务的连续性&#xff0c;尽可能不断业务。 快照&#xff1a;保存的不是底层块数据&#xff0c;保存的是逻…

算法笔记—第五章-最大公约数与最小公倍数

算法笔记-最大公约数与最小公倍数 最大公约数最小公倍数最大公约数 2最小公倍数2互质互质2 最大公约数 //最大公约数与最小公倍数#include <cstdio> int gcd(int a, int b) {if (b 0) //截止的条件{return a; }else {return gcd(b, a % b);//这里是a与b和b&#xff…