redis深度历险 2 - Redis的基本数据类型以及使用场景

2023-09-14 16:14:00

Redis的基本数据类型包括五种:String(字符串)、Hash(哈希)、List(列表)、Set(集合)及ZSet(有序集合)。

String(字符串)类型:

  • 简介:String是最基本的数据类型,也是最重要的类型之一,一个key对应一个value,可以是字符串、整型、浮点等,String的最大储存值为512MB。
  • 缓存功能:部分数据第一次查询查询数据库,查询完后存入redis中,后续再获取可以从redis中获取,减轻数据库压力。
  • 验证码:在网站登录中,可以用String类型存储验证码,将手机号作为key,验证码作为value存储在Redis中,并设置过期时间,后续如果用户输入验证码,从Redis中取值对比,如果过期则无效。
  • 数字计数:例如帖子有点赞数,可以用String类型以帖子的id作为key,点赞总数作为value存储在Redis中。还可以用于记录用户的访问量等。
  • 存储对象:以json形式存储, key=id value=json格式数据,如商品id为key,商品信息为value,商品信息为json格式数据。
  • 共享session:用Redis将用户session集中管理,每次获取用户更新或查询登录信息都直接从Redis中集中获取。

Hash(哈希)类型:

  • 简介:哈希类型是指一个键值对的存储结构,key-value每个hash可以存储2^32-1键值对(40多亿),这里的无序只是插入的时候,无论查询的多少次,顺序都是一样的。
  • 存储多个键值对:Hash类型可以用于存储多个键值对,这在需要将相关数据存储在一起时非常有用。例如,如果有一组相关的人员信息,可以使用Hash类型来存储每个人的详细信息,如姓名、年龄、地址等。
  • 缓存数据库查询结果:使用Hash类型可以缓存数据库查询结果,以提高应用程序的性能。例如,当需要查询数据库以获取某个对象的信息时,可以将查询结果存储在Redis的Hash类型中,以便后续查询时直接使用缓存的结果。
  • 实现类似于map的结构:Hash类型可以用于实现类似于map的结构,将结构化的数据(如对象)缓存到Redis中。这样,每次需要访问或修改这些数据时,可以直接操作Hash中的某个字段。
  • 记录系统的状态信息:使用Hash类型可以记录系统的状态信息,如CPU使用率、内存使用情况、磁盘使用情况等。通过对这些数据进行监控和分析,可以及时发现系统的问题并进行相应的处理。
  • 缓存用户信息:可以将用户的个人信息(如用户名、邮箱等)存储在一个Hash中,这样在需要验证用户身份或展示用户信息时,可以直接从Redis中获取相关信息,而不需要每次都去数据库查询。

List(列表)类型:

  • 简介:List是Redis中常见的一种数据结构,它支持push、pop、peek等操作,可以用来做异步队列或者栈结构。
  • 异步队列:可以将需要延后处理的任务结构体序列化成字符串,然后将其塞进Redis的List中。之后,另一个线程可以从这个List中轮询数据进行处理。这种方式常用于解耦生产者和消费者的速度。
  • 实现秒杀抢购:在商品秒杀场景中,最怕的就是商品超卖。为了解决超卖问题,经常将库存商品缓存到类似MQ的队列中。多线程的购买请求都是从队列中取,取完了就卖完了。但用MQ处理的有点重,这里就可以使用Redis的List数据类型来实现。在秒杀前,将本场秒杀的商品放到List中,因为List的pop操作是原子性的,所以即使有多个用户同时请求,也是依次pop。List空了pop抛出异常就代表商品卖完了。
  • 消息队列:Redis的List也可以用作简单的消息队列。生产者可以将消息推入List,而消费者可以使用BLPOP或BRPOP等命令从List中取出消息并进行处理。
  • 日志存储:使用Redis的List作为日志存储,将日志消息作为List的元素添加进去,可以通过后台程序不断地取出已经到期的日志进行删除。
  • 聊天系统:在实现聊天系统时,可以使用Redis的List来保存聊天记录。每个用户对应一个List,聊天的每一条记录都是List的一个元素。

Set(集合)类型:

  • 简介:Set是一种无序且不重复的数据集合,每个Set可以存储2^32-1个元素。
  • 存储集合:Set类型可以用于存储集合,其中的成员是唯一的,即集合中不能出现重复的数据。这在需要存储一组不重复的数据时非常有用,例如,一个用户的好友列表、一个网站的标签分类等。
  • 缓存不重复数据:当需要缓存不重复数据时,可以使用Redis的Set类型。例如,在处理用户请求时,可以将已经处理过的请求ID存储在一个Set中,以便在后续处理中避免重复处理。
  • 实现共同好友功能:在社交应用中,可以借助Redis的Set类型实现共同好友功能。将每个用户的好友列表存储在一个Set中,然后通过求交集操作实现共同好友的查询。
  • 缓存黑名单:可以将黑名单数据存储在Redis的Set类型中,例如,可以存储恶意用户的ID、被禁止的IP地址等。这样,在需要验证用户身份或进行访问控制时,可以通过查询Set快速判断用户是否在黑名单中。
  • 统计操作:由于Set中的成员是唯一的,可以用来做各种唯一性统计。例如,统计日志中唯一IP的数量,或者在微博应用中统计每个用户关注的微博数量等。

ZSet(有序集合)类型:

  • 简介:ZSet是有序集合,每个元素都有一个分数,根据分数进行排序,最多可以存储2^32-1个元素。
  • 排序存储:ZSet类型可以用于存储一组带有分数信息的成员,并且Redis会根据分数对成员进行排序。这可以在需要按照特定顺序存储和访问数据时使用,例如,按照成绩排名存储学生的信息。
  • 延时队列:ZSet类型可以用于实现延时队列。通过将需要延时处理的任务添加到ZSet中,并设置一个时间戳作为分数,然后使用一个定时器线程不断地从ZSet中获取已经到达执行时间的任务进行处理。
  • 排行榜功能:ZSet类型可以用于实现排行榜功能。将每个用户获得的积分作为分数存储在ZSet中,并按照分数对用户进行排序。这样,可以快速地查看当前排名以及查询历史排名。
  • 共同好友功能:在社交应用中,可以使用Redis的ZSet类型实现共同好友功能。将每个用户的好友列表存储在一个ZSet中,并为每个好友设置一个分数,这个分数可以代表和该用户的关系亲密度。通过求ZSet的交集和并集操作,可以快速查询出共同好友。
  • 记录访问网站的独立IP:可以将每个独立IP地址存储在Redis的ZSet类型中,并为每个IP地址设置一个时间戳作为分数。这样,可以快速地查询出最近访问过网站的IP地址以及访问的时间。
更多推荐

vue点击pdf文件直接在浏览器中预览文件

好久没有更新文章了,说说为什么会有这篇文章呢,其实是应某个热线评论的要求出的,不过由于最近很长一段时间没打开csdn现在才看到,所以才会导致到现在才出。先来看看封装完这个预览方法的使用,主打一个方便使用:id:为文件idname:为文件名称ajaxDownLoadFile(id,name)没错就是这么简单,调用这个函数

采棉机工作过程的关键动作

1、起动:确认机械变速手柄和液压手柄在空挡位置——确认手油门在最小位置——关闭所有照明开关和电气——打开钥匙开关——检查所有仪表是否符合起动的要求——灯检——响喇叭警示周围人员——起动(800—900转/分稳定后)——怠速(1200转/分)运行2分钟(冬天4分钟)。2、熄火:停车(一般不要使用制动器,防止采棉机前倾栽头

TypeScript项目配置

前言我们需要建立tsconfig.json作用用于标识TypeScript项目的根路径;用于配置TypeScript编译器;用于指定编译的文件。重要字段files-设置要编译的文件的名称;include-设置需要进行编译的文件,支持路径模式匹配;exclude-设置无需进行编译的文件,支持路径模式匹配;compiler

ThinkPHP5,使用unionAll取出两个毫无相关字段表的数据且分页

一:首先来了解一下union和unionAll1:取结果的并集,是否去重union:对两个结果集进行并集操作,不包括重复行,相当于distinct,同时进行默认规则的排序;unionAll:对两个结果集进行并集操作,包括重复行,即所有的结果全部显示,不管是不是重复;2:获取结果后的操作,是否排序union:会对获取的结

基于Java+SpringBoot+Vue的旧物置换网站设计和实现

基于Java+SpringBoot+Vue的旧物置换网站设计和实现源码传送入口前言主要技术系统设计功能截图数据库设计代码论文目录订阅经典源码专栏Java项目精品实战案例《500套》源码获取源码传送入口前言摘要随着时代在一步一步在进步,旧物也成人们的烦恼,许多平台网站都在推广自已的产品像天猫、咸鱼、京东。所以开发出一套关

云计算(Docker)

Docker简介Docker是一个开源的应用容器引擎,基于Go语言,并遵从Apache2.0协议开源。它可以让开发者打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。Docker可用于开发应用、交付应用、运行应用等场景。容器是完全使用沙箱机制,相互之间不会有任何接口

【ICCV 2023】FocalFormer3D : Focusing on Hard Instance for 3D Object Detection

原文链接:https://arxiv.org/abs/2308.045561.引言目前的3D目标检测方法没有显式地去考虑漏检问题。本文提出了困难实例探测(HIP)。受目标检测的级联解码头启发,HIP逐步探测误检样本,极大提高召回率。在每个阶段,HIP抑制TP样本并关注之前阶段的FN样本,则通过迭代HIP,可以处理困难的

ES6中新增加的Proxy对象及其使用方式

聚沙成塔·每天进步一点点⭐专栏简介⭐Proxy对象的基本概念Proxy对象的主要陷阱(Traps)⭐使用Proxy对象⭐写在最后⭐专栏简介前端入门之旅:探索Web开发的奇妙世界记得点击上方或者右侧链接订阅本专栏哦几何带你启航前端之旅欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打

ffmpeg & ffplay

gif->jpg:```ffmpeg-i4.gif-r25-q:v4-pix_fmtyuv420pjpg2/frame%03d.jpg-y```#ffplay```ffplay[选项]['输入文件']```option```'-xwidth'强制以"width"宽度显示'-yheight'强制以"height"高度显示

【农业生产模拟】WOFOST模型与PCSE模型教程

查看原文>>>【农业生产模拟】WOFOST模型与PCSE模型实践目录第一章:理论基础农作物生长模型概述第二章:数据准备第三章:WOFOST模型基础第四章:PythonCropSimulationEnvironment第五章:案例拓展WOFOST(WorldFoodStudies)和PCSE(PythonCropSimu

多频超声波清洗机有什么特点?使用需要注意什么?

多频超声波清洗机是指具备多个频率可调的超声波发生器的清洗机,是在一只清洗槽内,安装有两种或三种以上不同频率的超声波换能器,由多只发生器分别推动各自频率的超声波进行清洗。传统的超声波清洗机通常只能在固定的频率下工作,而多频超声波清洗机具有更广泛的应用能力。梵英超声(fanyingsonic)是专业超声波设备制造商,推荐使

热文推荐