Redis 常用的类型和 API

前言

在当今的软件开发中,数据存储与操作是至关重要的一部分。为了满足日益增长的数据需求和对性能的追求,出现了许多不同类型的数据库。其中,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 常用的五大类型已经讲完了,没有很多理论的知识,都是一些命令,要全部记住也有点难,做好笔记,要用的时候找来用就行了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

进行 “最佳价格查询器” 的开发(多种并行方式的性能比较)

前置条件 public class Shop {private final String name;private final Random random;public Shop(String name) {this.name name;random new Random(name.charAt(0) * name.charAt(1) * name.charAt(2));}public double getPrice(String product) {return calculatePrice…

第4关:非递归实现二叉树左右子树交换

任务描述相关知识 栈的基本操作二叉树后序遍历编程要求测试说明 任务描述 本关任务&#xff1a;给定一棵二叉树&#xff0c;使用非递归的方式实现二叉树左右子树交换&#xff0c;并输出后序遍历结果。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.栈的基…

PostGIS学习教程一:PostGIS介绍

一、什么是空间数据库 PostGIS是一个空间数据库&#xff0c;Oracle Spatial和SQL Server(2008和之后版本&#xff09;也是空间数据库。 但是这意味着什么&#xff1f;是什么使普通数据库变成空间数据库&#xff1f; 简短的答案是… 空间数据库像存储和操作数据库中其他任何…

C语言文件操作 | 文件分类、文件打开与关闭、文件的读写、文件状态、文件删除与重命名、文件缓冲区

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

UI 自动化测试框架设计与 PageObject 改造!

在 UI 自动化测试过程中&#xff0c;面对复杂的业务场景&#xff0c;经常会遇到这样的挑战&#xff1a; 简单的录制/回放速度快&#xff0c;但无法适应复杂场景&#xff1b;编写自动化测试脚本比较灵活&#xff0c;但工作量大且可维护性差&#xff1b;以往的封装技术&#xff…

Metric

如果 Metric ‘use_polarity&#xff08;使用极性&#xff09;’ &#xff0c;则图像中的对象必须和模型具有相同的对比度&#xff08;Contrast&#xff09;。比如&#xff0c;如果模型是一个在暗/深色背景上的明亮物体&#xff0c;则仅当对象比背景更亮时才会被找到。 如果 …

塑料质量检测是确保产品制造和装配过程的关键环节

激光塑料透光率检测是一种有效的塑料材料特性检测方法。在激光束通过上层透明材料后&#xff0c;被下层材料吸收。上层材料可以是透明的或者是有颜色的&#xff0c;但是必须能够保证有足够的激光通过。 塑料质量检测是确保产品制造和装配过程的关键环节。通过激光塑料透光率检测…

微博开启下一战:降本增效守利润,垂直内容拓营收

微博的商业想象空间正在逐步打开。 近日&#xff0c;微博披露了2023年三季度财报&#xff0c;营收4.422亿美元&#xff0c;同比下跌3%&#xff1b;调整后净利润1.366亿美元&#xff0c;同比增长17%。但若剔除汇率因素影响&#xff0c;微博的整体业绩仍然保持在正向增长轨道。 …

软考网络工程师知识点总结(二)

目录 21、海明码--差错控制 22、CRC循环冗余校验码 23、网络时延的计算 24、根据距离选择传输介质 25、多模光纤和单模光纤的区别 26、CSMA/CD协议 27、以太网帧结构 28、以太网类型及传输介质的选择 29、交换式以太网&#xff08;交换机&#xff09; 30、VLAN虚拟局…

【Python基础】网络编程之Epoll使用一(符实操:基于epoll实现的实时聊天室)

&#x1f308;欢迎来到Python专栏 &#x1f64b;&#x1f3fe;‍♀️作者介绍&#xff1a;前PLA队员 目前是一名普通本科大三的软件工程专业学生 &#x1f30f;IP坐标&#xff1a;湖北武汉 &#x1f349; 目前技术栈&#xff1a;C/C、Linux系统编程、计算机网络、数据结构、Mys…

wpf devexpress设置行和编辑器

如下教程示范如何计算行布局&#xff0c;特定的表格单元编辑器&#xff0c;和格式化显示值。这个教程基于前一个文章 选择行显示 GridControl为所有字段生成行和绑定数据源&#xff0c;如果AutoGenerateColumns 属性选择AddNew。添加行到GridControl精确显示为特别的几行设置。…

1688商品采集api接口1688代购商品采集API商品详情数据获取

做小程序商城时&#xff0c;最崩溃的瞬间是什么&#xff1f; 一定是当你有几百件商品&#xff0c;却要一件一件编辑商品名称、规格、上传图片吧…… 为了帮助商家快速上货开店&#xff0c;特意提供了1688的获取商品详情数据的接口&#xff0c;方便商家一键采集淘宝、天猫、京…

电动自动换刀高速电主轴的技术优势浅析

在制造业中&#xff0c;自动化技术的发展一直是一个重要的话题。其中&#xff0c;电动自动换刀被认为是一项高效、智能、先进的技术&#xff0c;在高速电主轴中使用电动自动换刀这一技术&#xff0c;不仅能够缩短换刀时间&#xff0c;还能减少换刀失误&#xff0c;本文将探讨Sy…

Leetcode-110 平衡二叉树

递归实现 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

“探寻服务器的无限潜能:从创意项目到在线社区,你会做什么?”

文章目录 每日一句正能量前言什么是服务器&#xff1f;服务器能做什么&#xff1f;服务器怎么用&#xff1f;部署创意项目&#xff0c;还是在线社区亦或做其他的&#xff1f;后记 每日一句正能量 未知的下一秒&#xff0c;千万不要轻言放弃。 前言 在数字化时代&#xff0c;服…

ctf之流量分析学习

链接&#xff1a;https://pan.baidu.com/s/1e3ZcfioIOmebbUs-xGRnUA?pwd9jmc 提取码&#xff1a;9jmc 前几道比较简单&#xff0c;是经常见、常考到的类型 1.pcap——zip里 流量分析里有压缩包 查字符串或者正则表达式&#xff0c;在包的最底层找到flag的相关内容 我们追踪…

【DP】背包问题全解

一.简介 DP&#xff08;动态规划&#xff09;背包问题是一个经典的组合优化问题&#xff0c;通常用来解决资源分配的问题&#xff0c;如货物装载、投资组合优化等。问题的核心思想是在有限的资源约束下&#xff0c;选择一组物品以最大化某种价值指标&#xff0c;通常是总价值或…

跨越编程界限:C++到JavaSE的平滑过渡

JDK安装 安装JDK 配置环境变量&#xff1a; Path 内添加 C:\Program Files\Java\jdk1.8.0_201\bin 添加 JAVA_HOME C:\Program Files\Java\jdk1.8.0_201 添加 CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 第一个Java程序 HelloWorld.java public class…

蓝桥杯 插入排序

插入排序的思想 插入排序是一种简单直观的排序算法&#xff0c;其基本思想是将待排序的元素逐个插入到已排序序列 的合适位置中&#xff0c;使得已排序序列逐渐扩大&#xff0c;从而逐步构建有序序列&#xff0c;最终得到完全有序的序 列。 它类似于我们打扑克牌时的排序方式&…

常用的一些LDO芯片及使用稳定的LDO芯片推荐

LDO也是电赛中常用的电源模块。相比DCDC以及稳压器&#xff0c;LDO的跌落电压更小&#xff0c;因此两者适用场合不同。下面介绍一些常用的LDO及其使用&#xff1a; 1. TPS7A4501&#xff08;正降压&#xff09; 数据手册&#xff1a;https://www.ti.com.cn/cn/lit/ds/symlink…