Redis五种核心数据结构的基本使用与应用场景

news/2024/3/29 17:28:54/文章来源:https://blog.csdn.net/qq_44027353/article/details/129680748

文章目录

  • 五种核心数据结构
    • String
    • Hash
    • List
    • Set
    • Zset

五种核心数据结构

String

常用操作

# 存入字符串键值对
SET  key  value# 批量存储字符串键值对
MSET  key  value [key value ...] 	# 存入一个不存在的字符串键值对
SETNX  key  value# 获取一个字符串键值
GET  key# 批量获取字符串键值
MGET  key  [key ...]# 删除一个键
DEL  key  [key ...]# 设置一个键的过期时间(秒)
EXPIRE  key  seconds

原子加减运算

# 将key中储存的数字值加1
INCR  key# 将key中储存的数字值减1
DECR  key# 将key所储存的值加上increment
INCRBY  key  increment# 将key所储存的值减去decrement
DECRBY  key  decrement

应用场景为:

  • 字符串的缓存
  • 对象转json的缓存
  • 分布式锁
  • 数量自增
  • 分布式系统全局序列号



Hash

# 存储一个哈希表key的键值
HSET  key  field  value# 存储一个不存在的哈希表key的键值
HSETNX  key  field  value# 在一个哈希表key中存储多个键值对
HMSET  key  field  value [field value ...]# 获取哈希表key对应的field键值
HGET  key  field# 批量获取哈希表key中多个field键值
HMGET  key  field  [field ...]# 删除哈希表key中的field键值
HDEL  key  field  [field ...]# 返回哈希表key中field的数量
HLEN  key# 返回哈希表key中所有的键值
HGETALL  key# 为哈希表key中field键的值加上增量increment
HINCRBY  key  field  increment

更方便的存储一个对象,比如

# HMSET一次性存多个kield value
HMSET  user  {userId}:name  zhuge  {userId}:balance  1888

应用场景:

  • 电商购物车,key为购物车前缀加用户id,field为商品id,value为购买数量

优点1

  • 同类数据归类整合储存,方便数据管理

  • 相比string操作消耗内存与cpu更小

  • 相比string储存更节省空间

缺点

  • 过期功能不能使用在field上,只能用在key上
  • Redis集群架构下不适合大规模使用



List

可以实现栈、队列的数据结构

# 从左边添加一个或多个元素
LPUSH key value [value...]# 从右边添加一个或多个元素
RPUSH key value [value...]# 从左边,移除并返回一个元素
LPOP key# 从右边,移除并返回一个元素
RPOP key# 返回列表key中指定区间内的元素,区间以偏移量start和stop指定
LRANGE  key  start  stop# 从key列表表头弹出一个元素,若列表中没有元素,阻塞等待					timeout秒,如果timeout=0,一直阻塞等待
BLPOP  key  [key ...]  timeout# 从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待					timeout秒,如果timeout=0,一直阻塞等待
BRPOP  key  [key ...]  timeout

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nba0YRp1-1679359622134)(picture/Redis/image-20230320220313804.png)]

应用场景:

  • 微信微博的公众号消息



Set

取交集并集

# 往集合key中存入元素,元素存在则忽略,若key不存在则新建
SADD  key  member  [member ...]# 从集合key中删除元素
SREM  key  member  [member ...]# 获取集合key中所有元素
SMEMBERS  key# 获取集合key的元素个数
SCARD  key# 判断member元素是否存在于集合key中
SISMEMBER  key  member# 从集合key中选出count个元素,元素不从key中删除
SRANDMEMBER  key  [count]# 从集合key中选出count个元素,元素从key中删除
SPOP  key  [count]# Set运算操作
# 交集运算
SINTER  key  [key ...]# 将交集结果存入新集合destination中
SINTERSTORE  destination  key  [key ..]# 并集运算
SUNION  key  [key ..]# 将并集结果存入新集合destination中
SUNIONSTORE  destination  key  [key ...]# 差集运算,拿第一个集合 和 后面所有集合的并集 进行比较,留下第一个集合存在但并集中不存在的元素
SDIFF  key  [key ...]# 将差集结果存入新集合destination中
SDIFFSTORE  destination  key  [key ...]

引用场景:

  • 抽奖,使用SRANDMEMBER或SPOP命令随机抽取元素
  • 取交集并集差集,比如共同关注的人



Zset

相比较于Set有排序的功能,一般适用于排名/热搜

ZSet常用操作

# 往有序集合key中加入带分值元素
ZADD key score member [[score member]]# 从有序集合key中删除元素
ZREM key member [member …]# 返回有序集合key中元素member的分值
ZSCORE key member 			# 为有序集合key中元素member的分值加上increment
ZINCRBY key increment member# 返回有序集合key中元素个数
ZCARD key# 正序获取有序集合key从start下标到stop下标的元素
ZRANGE key start stop [WITHSCORES]# 倒序获取有序集合key从start下标到stop下标的元素
ZREVRANGE key start stop [WITHSCORES]

Zset集合操作

# 并集计算
ZUNIONSTORE destkey numkeys key [key ...]# 交集计算
ZINTERSTORE destkey numkeys key [key …]

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

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

相关文章

外贸网站排名优化,掌握这些技巧让你事半功倍!

作为一名外贸网站站长,我们都希望自己的网站能够排名靠前,从而吸引更多的潜在客户,提高网站的流量和转化率。 但是,想要在谷歌搜索引擎中取得好的排名并不是一件容易的事情。 在这篇文章中,我将分享一些我个人的经验…

JMM解析(java内存模型)

1.JMM 主要定义了对于一个共享变量,另一个线程对这个共享变量执行写操作后,这个线程对这个共享变量的可见性。 2.JMM和JVM的区别: JMM是用于高并发的,抽象了线程和主存之间的关系,比如线程之间共享的变量必须存储在…

代码随想录算法训练营第四十八天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

LeetCode 198 打家劫舍题目链接:https://leetcode.cn/problems/house-robber/思路:dp数组的含义dp[i]表示前i个房间(包括第i个房间)所能偷到的最大金额递推公式有两种情况:1、偷了第i个房间那么此时第i-1个房间肯定是不…

Python基础之操作mysql数据库

Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库:GadFlymSQLMySQLPostgreSQLMicrosoft SQL Server 2000InformixInterbaseOrac…

一、简单了解ElasticSearch

目录一、ElasticSearch简介1.ES与关系型数据库对比2.什么是全文检索3.分词原理(基于倒排索引)二、核心概念1.索引index2.映射mapping3.字段filed4.字段类型type5.文档document6.集群cluster7.节点node8.分片9.副本三、搭建es单机版、集群版1.搭建es2.集成…

项目质量管理工作 不得不重视的4大关键点

1、三大视角确保项目质量 我们需要从客户视角、SOW视角和组织视角三大视角,确保项目的质量。 从客户视角方面出发,满足客户的要求,如项目交付的准时性、项目质量的保证等。我们需要全力保障客户对项目质量的要求。 从SOW视角确保项目质量&…

ffpmeg笔记:(2)学习一个开源小demo:qt+sdl+ffmpeg,计算时间戳

文章目录前言1.源码和编译方法1.1编译方法:2.源码简单介绍2.1 播放线程类 PlayThread2.1.1 计算当前播放进度时间2.2 主界面类 MainWindow2.2.1 在Qt widget中显示视频2.2.2 控制区域的自动隐藏和再现前言 这个小demo实现了下面的功能: 1.打开文件。 2.…

操作系统(2.4.5)--管程机制

1.管程的定义 利用共享数据结构抽象地表示系统中的共享资源,而把对该共享数据结构实施的操作定义为一组过程进程对共享资源的申请、释放和其它操作,都是通过这组过程对共享数据结构的操作来实现的,这组过程还可以根据资源的情况,或…

跟着本文走,告诉你五类walmart最爱产品

在我们跨境圈一直流传着一句话,选品选的好啊,红利吃饱饱。选品的重要性相信不用龙哥多说,选品基本上就是决定了店铺的未来。好的选品不用愁流量、也不用担心走不长久。今天龙哥就来聊聊在walmart上,哪些选品是值得发展的。walmart…

synchronized 加锁 this 和 class 的区别

synchronized 是 Java 语言中处理并发问题的一种常用手段,它也被我们亲切的称之为“Java 内置锁”,由此可见其地位之高。然而 synchronized 却有着多种用法,当它修饰不同对象时,其意义也是不同的,下面我们一起来看。 ​…

实在智能RPA受邀出席2023年东莞市数字赋能峰会,聚力数智制造

3月17日,“数字东莞 科创强市2023年东莞市数字赋能峰会”在松山湖光大We谷圆满举行。本次大会以创新性、专业性、平台化、战略性等为特色,涵盖当今前沿技术、行业痛点、商业模式。会上中国信通院的专家分享了《东莞市数字经济发展报告(2022年…

刷题day40:从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树

一、从中序与后序遍历序列构造二叉树 题意描述: 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 需要利用后续遍历(左右中…

java校园报修管理系统ssm

用户的主要功能有: 1.用户注册和登陆登陆系统 2.用户查看报修类型,在线申请报修信息 3.用户对报修信息进行评价 4.用户查看资讯公告信息 5.用户查看个人信息,修改个人信息,修改密码 6.用户在线提交意见反馈信息 7.用户查看报修记录…

记录一次接口套娃数据处理

由于后端接口设计历史遗留问题,要求在一个接口中,通过他返回的数据去请求其他接口,数据以表格的形式渲染出来 目录 前言 一、每次仅展示一个步骤图 二、整合接口数据,一次性渲染 1.请求步骤条接口的地方对数据进行处理 2.修改…

完全小白的pycharm深度学习调试+for循环断点条件设置

完全小白的pycharm深度学习调试for循环断点条件设置写在最前面基础方法pycharm断点调试控制台输入代码中循环的debug方法pycharm中图标的介绍常见的BugDebug经验1. 检查激活函数的输入值2. 检查梯度3. 消融实验4. 使用最短的时间5. 静下心来写在最前面 之前把seq2seqattention…

简单分析Linux内核基础篇——initcall

写过Linux驱动的人都知道module_init宏,因为它声明了一个驱动的入口函数。 除了module_init宏,你会发现在Linux内核中有许多的驱动并没有使用module_init宏来声明入口函数,而是看到了许多诸如以下的声明: static int __init qco…

C++基础算法③——排序算法(选择、冒泡附完整代码)

排序算法 1、选择排序 2、冒泡排序 1、选择排序 基本思想:从头至尾扫描序列,每一趟从待排序元素中找出最小(最大)的一个元素值,然后与第一个元素交换值,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序…

Redis(十四)【Redisson分布式锁基础介绍】

分布式锁 Redisson 一、Redisson 概述 什么是 Redisson Redisson 是一个在 Redis 的基础上实现的 Java 驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。 Redisson 的宗旨是促进使…

【数据分析之道①】字符串

文章目录专栏导读1、字符串介绍2、访问字符串中的值3、字符串拼接4、转义字符5、字符串运算符6、字符串格式化7、字符串内置函数专栏导读 ✍ 作者简介:i阿极,CSDN Python领域新星创作者,专注于分享python领域知识。 ✍ 本文录入于《数据分析之…

SpringCloud:初识RabbitMQ及快速入门

1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应,但…