【Redis】redis用作缓存和分布式锁

深入学习 Redis - 如何使用 Redis 作缓存?缓存更新策略?使用需要注意哪些问题(工作/重点) 缓存可以理解为,将常用的数据从放到一个访问速度更快的的地方,方便更快的随时读取. 也就是说,速度快的设备,可以作为速度慢的设备的缓存,加快读取速度。 阅读详情


在这里插入图片描述

1. 缓存

Redis最主要的三个功能

  • 存储数据(内存数据库)
  • 缓存
  • 消息队列

1.1 Redis作为缓存

在⼀个网站中,我们经常会使⽤关系型数据库(比如MySQL)来存储数据;关系型数据库虽然功能强大,但是有⼀个很大的缺陷,就是性能不高(换言之,进⾏⼀次查询操作消耗的系统资源较多)

硬件的访问速度通常是如下情况下:CPU寄存器 > 内存 > 硬盘 > ⽹络

为什么说关系型数据库性能不⾼?

  1. 数据库把数据存储在硬盘上,硬盘的IO速度并不快,尤其是随机访问.
  2. 如果查询不能命中索引,就需要进⾏表的遍历,这就会大大增加硬盘IO次数.
  3. 关系型数据库对于SQL的执行会做⼀系列的解析、校验、优化⼯作.
  4. 如果是⼀些复杂查询,⽐如联合查询,需要进⾏笛卡尔积操作,效率更是降低很多.

因此,如果访问数据库的并发量⽐较⾼,对于数据库的压⼒是很⼤的,很容易就会使数据库服务器宕机

如何让数据库能够承担更⼤的并发量呢?核心思路主要是两个:

  • 开源:引⼊更多的机器,部署更多的数据库实例,构成数据库集群.(主从复制,分库分表等…)
  • 节流:引⼊缓存,使⽤其他的⽅式保存经常访问的热点数据,从⽽降低直接访问数据库的请求数量

Redis 就是⼀个⽤来作为数据库缓存的常⻅⽅案,Redis访问速度⽐MySQL快很多,或者说处理同⼀个访问请求,Redis消耗的系统资源⽐MySQL少很多,因此Redis能⽀持的并发量更⼤.

  • Redis数据在内存中,访问内存⽐硬盘快很多.
  • Redis只是⽀持简单的key-value存储,不涉及复杂查询的那么多限制规则.

在这里插入图片描述

1.2 缓存更新、淘汰策略

redis作为缓存,一般存储的热点数据,那么如何知道哪些数据是热点数据呢?

  1. 定期生成

每隔⼀定的周期(⽐如⼀天/⼀周/⼀个⽉),对于访问的数据频次进⾏统计,挑选出访问频次最⾼的前N%的数据

这种做法实时性较低.对于⼀些突然情况应对的并不好

  1. 实时生成

先给缓存设定容量上限(可以通过Redis配置⽂件的maxmemory 参数设定).

接下来把用户每次查询:

  • 如果在Redis查到了,就直接返回.
  • 如果Redis中不存在,就从数据库查,把查到的结果同时也写⼊Redis.

如果缓存已经满了(达到上限),就触发缓存淘汰策略,把⼀些"相对不那么热门"的数据淘汰掉。照上述过程,持续⼀段时间之后Redis内部的数据⾃然就是"热门数据"了.

通⽤的淘汰策略主要有以下⼏种:

  • FIFO (First In First Out) 先进先出:把缓存中存在时间最久的(也就是先来的数据)淘汰掉
  • LRU(LeastRecentlyUsed)淘汰最久未使⽤的:记录每个key的最近访问时间,把最近访问时间最⽼的key淘汰掉
  • LFU(LeastFrequently Used)淘汰访问次数最少的:记录每个key最近⼀段时间的访问次数,把访问次数最少的淘汰掉
  • Random随机淘汰:从所有的key中抽取幸运⼉被随机淘汰掉

这⾥的淘汰策略,我们可以自己实现,当然Redis也提供了内置的淘汰策略,也可以供我们直接使用,下面罗列了一部分:
在这里插入图片描述

整体来说Redis提供的策略和我们上述介绍的通⽤策略是基本⼀致的,只不过Redis这⾥会针对"过期key" 和"全部key"做分别处理.

1.3 缓存预热、缓存穿透、缓存雪崩和缓存击穿

1.3.1 缓存预热(preheating)

使⽤Redis作为MySQL的缓存的时候,当Redis刚刚启动,或者Redis⼤批key失效之后,此时由于Redis 自身相当于是空着的,没啥缓存数据,那么MySQL就可能直接被访问到,从⽽造成较⼤的压⼒

因此就需要提前把热点数据准备好,直接写⼊到Redis中,使Redis可以尽快为MySQL撑起保护伞

热点数据可以基于之前介绍的统计的⽅式⽣成即可,这份热点数据不⼀定非得那么"准确",只要能帮助MySQL抵挡大部分请求即可,随着程序运⾏的推移,缓存的热点数据会逐渐自动调整,来更适应当前情况

1.3.2 缓存穿透(penetration)

访问的key在Redis和数据库中都不存在,此时这样的key不会被放到缓存上,后续如果仍然在访问该key, 依然会访问到数据库,这就会导致数据库承担的请求太多,压⼒很⼤,这种情况称为缓存穿透

为何产⽣?原因可能有几种:

  • 业务设计不合理,比如缺少必要的参数校验环节,导致非法的key也被进⾏查询了
  • 开发/运维误操作,不小心把部分数据从数据库上误删了
  • ⿊客恶意攻击

如何解决?

  • 针对要查询的参数进⾏严格的合法性校验
    • ⽐如要查询的key是⽤⼾的⼿机号,那么就需要校验当前key 是否满⾜⼀个合法的⼿机号的格式
  • 针对数据库上也不存在的key,也存储到Redis中
    • ⽐如value就随便设成⼀个"",避免后续频繁访问数据库.
  • 使⽤布隆过滤器先判定key是否存在,再真正查询

1.3.3 缓存雪崩(avalanche)

短时间内大量的key在缓存上失效,导致数据库压力骤增,甚⾄直接宕机,这种情况叫做缓存雪崩

本来Redis是MySQL的⼀个护盾,帮MySQL抵挡了很多外部的压⼒,⼀旦护盾突然失效了,MySQL⾃⾝承担的压⼒骤增,就可能直接崩溃.

产⽣大规模key失效,可能性主要有两种:

  • Redis挂了.
  • Redis上的大量的key同时过期

为啥会出现⼤量的key同时过期?这种可能是短时间内在Redis上缓存了⼤量的key,并且设定了相同的过期时间.

如何解决?

  • 部署⾼可⽤的Redis集群,并且完善监控报警体系.
  • 不给key设置过期时间或者设置过期时间的时候添加随机时间因⼦

1.3.4 缓存击穿(breakdown)

相当于缓存雪崩的特殊情况,针对热点key突然过期了,导致⼤量的请求直接访问到数据库上,甚至引起数据库宕机

如何解决?

  • 基于统计的方式发现热点key,并设置永不过期.
  • 进行必要的服务降级
    • 例如访问数据库的时候使用分布式锁,限制同时请求数据库的并发数

2. 分布式锁

2.1 什么是分布式锁?

在⼀个分布式的系统中,也会涉及到多个节点访问同⼀个公共资源的情况,此时就需要通过锁来做互斥控制,避免出现类似于"线程安全"的问题。

而java的synchronized或者C++的std::mutex,这样的锁都是只能在当前进程中⽣效;在分布式的这种多个进程多个主机的场景下就⽆能为力了,此时就需要使用到分布式锁

分布式锁本质上就是使⽤⼀个公共的服务器,来记录加锁状态.
这个公共的服务器可以是Redis,也可以是其他组件(⽐如MySQL或者ZooKeeper等),还可以 是我们自己写的⼀个服务

2.2 分布式锁的基础实现

思路非常简单,本质上就是通过⼀个键值对来标识锁的状态

举个例⼦:考虑买票的场景,现在⻋站提供了若⼲个⻋次,每个⻋次的票数都是固定的。现在存在多个服务器节点,都可能需要处理这个买票的逻辑:先查询指定⻋次的余票,如果余票>0,则设置余票值-=1

在这里插入图片描述
显然上述的场景是存在"线程安全"问题的,需要使用锁来控制。

所谓的分布式锁,就是一个/一组单的服务器程序,来给其它服务器提供“加锁”这样的服务。

redis是一种典型的可以用来实现分布式锁的方案,但不是唯一一种

在这里插入图片描述

在买票服务器进行买票操作的过程中,就需要先进行加锁

  • 加锁:往redis中设置一个特殊的key-value,完成买票操作,再把这个key-value删除掉
    • 使用 set nx命令设置,del命令删除
  • 其它服务器也想执行买票操作时,也去redis上尝试设置key-value,设置失败,则认为加锁失败(是阻塞/放弃,看具体的策略)
  • 此时,就可以解决线程安全的问题了

刚才买票场景,使用 mysql 的事务也可以批量执行 査询 + 修改 操作,但是分布式系统中,要访问的共享资源不一定是 mysq! 也可能是其他的存储介质没有事务,也可能是执行一段特定的操作,是通过统一的服务器完成执行动作

2.3 引入过期时间(防止“死锁”问题)

当服务器1加锁之后,开始处理买票的过程中,如果服务器1意外宕机了,就会导致解锁操作(删除该key) 不能执行,就可能引起其他服务器始终无法获取到锁的情况

为了解决这个问题,可以在设置key的同时引入过期时间,即这个锁最多持有多久,就应该被释放(使用set ex nx 命令)

注意:
此处的过期时间只能使⽤上述⼀个命令的⽅式设置,如果分开多个操作,⽐如setnx之后,再来⼀个单独的expire,由于Redis的多个指令之间不存在关联,并且即使使⽤了事务也不能保证这两个操作都⼀定成功,因此就可能出现setnx成功,但是expire失败的情况,此时仍然会出现⽆法正确释放锁的问题.

2.4 引入校验id(防止锁误删问题)

对于Redis中写⼊的加锁键值对,其他的节点也是可以删除的.

比如服务器1写⼊⼀个"001":1这样的键值对,服务器2是完全可以把"001"给删除掉的。当然,服务器2不会进⾏这样的"恶意删除"操作,不过不能保证因为⼀些bug导致服务器2把锁误删除。

为了解决上述问题,我们可以引⼊⼀个校验id。
比如可以把设置的键值对的值,不再是简单的设为⼀个1,⽽是设成服务器的编号,形如"001":"服务器1"。

这样就可以在删除key(解锁)的时候,先校验当前删除key的服务器是否是当初加锁的服务器,如果是,才能真正删除;不是,则不能删除

在解锁的时候,要先进行id的校验,再执行del操作,但是这两步不是原子的,就可能出现问题
在这里插入图片描述

2.5 引入lua(解决原子性问题)

为了使解锁操作原子,可以使⽤Redis的Lua脚本功能

使⽤Lua脚本完成上述解锁功能

if redis.call('get',KEYS[1]) == ARGV[1] then 
	return redis.call('del',KEYS[1]) 
else 
	 return 0 
end;

上述代码可以编写成⼀个.lua后缀的⽂件,由redis-cli 或者redis-plus-plus 或者jedis 等客⼾端加载,并发送给Redis服务器,由Redis服务器来执⾏这段逻辑;⼀个lua脚本会被Redis服务器以原⼦的⽅式来执⾏.

2.6 引入watchdog(解决过期时间不足问题)

上述⽅案仍然存在⼀个重要问题,当我们设置了key过期时间之后(⽐如10s),仍然存在⼀定的可能性,当任务还没执⾏完,key就先过期了,这就导致锁提前失效。

  • 把这个过期时间设置的⾜够⻓,⽐如30s,是否能解决这个问题呢?很明显,设置多⻓时间合适,是⽆⽌境的,即使设置再⻓,也不能完全保证就没有提前失效的情况。
  • 如果设置的太⻓了,万⼀对应的服务器挂了,此时其他服务器也不能及时的获取到锁
  • 因此相⽐于设置⼀个固定的⻓时间,不如动态的调整时间更合适

所谓watchdog(看门狗),本质上是加锁的服务器上的一个单独的线程,通过这个线程来对锁过期时间进⾏"续约".

这样就不担心锁提前失效的问题了,而且另一方面,如果该服务器挂了,看门狗线程也就随之挂了,此时无人续约,这个key⾃然就可以迅速过期,让其他服务器能够获取到锁了

2.7 引入Redlock算法(防止redis挂了)

实践中的Redis⼀般是以集群的⽅式部署的(至少是主从的形式,⽽不是单机),那么就可能出现以下⽐较极端的大冤种情况:

  • 服务器1向master节点进行加锁操作,这个写⼊key的过程刚刚完成,master挂了,slave节点升级成了新的master节点。
  • 但是由于刚才写⼊的这个key尚未来得及同步给slave呢,此时就相当于服务器1的加锁操作形同虚设了,服务器2仍然可以进⾏加锁(即给新的master写⼊key,因为新的master不包含刚才的key)

为了解决这个问题,Redis的作者提出了Redlock算法

  • 我们引入一组Redis节点,其中每⼀组Redis节点都包含⼀个主节点和若⼲从节点,并且组和组之间存储的数据都是⼀致的,相互之间是"备份"关系(而并非是数据集合的⼀部分,这点有别于redis cluster).
  • 加锁的时候,按照⼀定的顺序,写多个master节点,在写锁的时候需要设定操作的"超时时间",⽐如50ms,即如果setnx操作超过了50ms还没有成功,就视为加锁失败.
  • 如果给某个节点加锁失败,就⽴即再尝试下⼀个节点,当加锁成功的节点数超过总节点数的⼀半,才视为加锁成功.

在这里插入图片描述
这样的话,即使有某些节点挂了,也不影响锁的正确性

同理,释放锁的时候,也需要把所有节点都进⾏解锁操作(即使是之前超时的节点,也要尝试解锁,尽量保证逻辑严密)

简而言之,Redlock算法的核心就是:加锁操作不能只写给⼀个Redis节点,而要写个多个!

分布式系统中任何⼀个节点都是不可靠的,最终的加锁成功结论是"少数服从多数的";由于⼀个分布式系统不⾄于⼤部分节点都同时出现故障,因此这样的可靠性要⽐单个节点来说靠谱不少

在这里插入图片描述

redis除了做缓存还能做什么? 位图:Redis可以利用其字符串(string)数据结构和一些位操作命令来实现位图(bitmap)的功能,比如setbit(设置一个位)、getbit(获取一个位)、bitcount(统计位数)、bitop(位运算)。- 计数器:Redis可以利用其字符串(string)数据结构和一些原子命令来实现计数器的功能,比如incr(增加一个键的值)、decr(减少一个键的值)、get(获取一个键的值)。Redis是一个非常灵活和强大的工具,只要掌握好它的数据结构和命令,就可以发挥出它的无限可能。 阅读详情

相关推荐

Redis不仅仅是一个缓存工具!走进Redis的世界,发现它的强大之处!

Redis绝不仅仅是一个缓存工具!它是一个功能强大的存储系统,可以用于缓存存储、发布/订阅系统、数据持久化和分布式锁等多个用途。无论是构建高效的应用程序还是处理复杂的分布式系统,Redis都是一个不可或缺的工具。通过上述示例代码,您可以开始探索Redis的多样化用途,并根据您的需求进行进一步的学习和实践。Redis的灵活性和性能使其成为许多开发人员和系统架构师的首选之一。Redis(Remote Dictionary Server)是一个高性能的键值存储系统,它不仅可以用作缓存,还可以用于许多其他用途。

DpJulia的博客 102

redis之作为缓存使用

Redis因为其自身高性能的数据读取能力,因此会经常被应用到缓存的场景中,本文就一起看下Redis当做缓存使用时的特点,问题,以及需要注意的点。访问次数很少的数据,一直保留在缓存中,占用缓存空间的情况就是缓存污染。即不会或几乎不会再次被访问的数据一只保留在缓存中。

wang0907的博客 3322

Webots+UR机械臂仿真全流程:手把手教你用Python实现Pick-and-Place轨迹规划

本文详细介绍了使用Webots和Python实现UR六自由度机械臂的Pick-and-Place轨迹规划全流程。从环境搭建、运动学正逆解计算到轨迹规划实战技巧,涵盖工业场景中的关节补偿、末端校准等实际问题解决方案,帮助开发者快速掌握机械臂精准控制技术。

weixin_29083649的博客 282

Redis实战——缓存

redis实战功能——缓存的相关知识,包括缓存实现、缓存常见问题:缓存击穿、缓存穿透、缓存雪崩等介绍及解决方案。

qq_59212867的博客 1万+

基于PSIM仿真的单相全桥逆变电路

根据单极性SPWM调制电路、双极性SPWM调制电路和逆变器拓扑可以得到完整的逆变器仿真电路模型。

weixin_59329579的博客 1万+

飞牛fnNAS同步微信微信聊天记录

微信聊天记录如何备份到NAS?本文介绍了利用NAS虚拟机和同步工具实现微信记录自动备份的方法。通过在NAS上搭建"云电脑"长期运行微信PC端,并配置微力同步将聊天记录文件夹自动同步到NAS存储,解决了传统电脑备份的安全性问题。操作步骤包括:1)在NAS上安装虚拟机系统;2)登录微信PC端并同步手机记录;3)配置同步工具将微信记录文件夹同步到NAS。该方法尤其适合不常使用PC微信的用户,可实现记录永久保存和远程查看,更换手机时也能快速恢复历史记录。

dgnankai的专栏 4303

Redis 缓存

缓存类型 客户端缓存 对于BS架构的互联网应用来说客户端缓存主要分为页面缓存和浏览器缓存两种,对于APP而言主要是自身所使用的缓存。 清理缓存的方式: 以网页浏览器为例 1.使用Ctrl+F5可以强制刷新浏览器本地缓存 2.浏览器中的参数设置的时间已过期如:Expires,Cache-control: max-age, Last-Modified标签等 网络中缓存 网络中的缓存主要是指代理服务器对...

sinat_34814635的博客 4434

SI好文翻译:铜箔表面纹理对损耗的影响:一个有效的模型(一)

Paul G. Huray发表在DesignCon2010的提出铜箔表面雪球模型的论文。第一部分说明之前的铜箔表面模型只适用于5GHz以内,超过5GHz后就不再准确。

小孟同学的博客 2169

Redis——缓存

我们都知道 Redis 的主要用途有三个方面:存储数据、作为缓存和消息队列,其中,Redis 最常用的场景就是作为缓存了,本篇文章就来和大家介绍一下缓存的基本概念,如何使用 Redis 作为缓存,缓存的更新策略有哪些,Redis 中的内存淘汰机制是怎样的,还有关于使用缓存的一些注意事项,那么就开始本篇文章的正题吧。

HKJ_numb1的博客 2812

ADS基础教程20 - 电磁仿真(EM)参数化仿真

一、引言二、参数化设置1.参数定义2.参数赋值3.创建EM模型和符号四、总结1)在Layout视图,菜单栏中选中EMComponent2)在弹出的参数编辑框中,采用标称/扰动()设计。使用子网(Subnetwork)参数。这些方法是互斥的,在为单个组件定义参数时不能将它们组合起来。标称/扰动(Nominal/Perturbed)参数使用平面化布局场景,并且只包含端口和原始图形形状(如多边形、矩形和圆形)时定义。

XZ_ZC的博客 4028

Playwright爬虫实战:破解动态网页懒加载与无限滚动

本文介绍了使用Playwright处理懒加载和无限滚动页面的完整解决方案。摘要如下: 问题分析:传统爬虫无法获取JS动态渲染内容,Playwright能模拟真实浏览器行为解决此类问题。 核心原理: 懒加载:资源延迟加载,滚动触发 无限滚动:滚动到底部异步加载新内容 技术方案: 分段滚动页面并等待加载 动态监测页面高度变化 合理设置等待和终止条件 代码实现: 提供图片懒加载和无限滚动列表的完整可运行代码 包含异常处理和性能优化建议 关键优势: 比传统爬虫更可靠 支持复杂交互场景 完善的错误处理机制 该方法已在

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 523

redis的应用,缓存,分布式锁

作用:提交数据的查询效率,减少对数据库的访问频率。redis的应用,缓存,分布式锁, Redisson

weixin_51635918的博客 842

YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度

ASF-YOLO是一种基于YOLO的新颖框架,结合了空间和尺度特征以实现准确和快速的分割。其中,注意力尺度序列融合模块。

Limiiiing的博客 4389

HoRain云--Redis除了用作缓存数据,Redis还可以做这些

我需要列举Redis的主要功能,比如数据结构支持(字符串、哈希、列表、集合、有序集合、位图、HyperLogLog、流),然后对应到不同的使用场景。例如,列表和流可以用于消息队列,有序集合适合排行榜,发布订阅模式用于实时消息系统,地理空间索引用于位置服务,事务和Lua脚本用于原子操作,持久化选项确保数据安全,分布式锁用于协调多个实例,HyperLogLog用于基数统计,位图处理用户在线状态或标记,模块扩展比如RedisSearch和RedisGraph等。嗯,用户问的是Redis除了缓存数据还能做什么。

sinat_57153473的博客 1157

sphincs+ Nist Round3文档中文译版(SPHINCS+ Submission to the NIST post-quantum project, v.3)

1. 引言 哈希基础签名方案最初是由Lamport [14]在1970年代后期作为一次性签名方案开发的,并由Merkle [16]扩展为多次签名方案。这些方案的安全性易于分析,并仅依赖于所使用的哈希函数的属性。然而,Merkle基于树的签名方案需要在密钥生成时就确定要进行签名的数量,且为了保持性能这个数字要小。最重要的是,该系统需要用户记住一个状态:这个状态包含一些信息以记住密钥已经进行了多少次签名。 在Lamport方案诞生后的40年里,产生了许多想法改进了哈希基础签名的性能、实用性和理论基础,最终XMS

dedanddwb的博客 394

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

06 Redis分布式锁

**} }synchronized单机版OK,上分布式nginx分布式微服务,单机锁不行/(ㄒoㄒ)/~~取消单机锁,上redis分布式锁setnx只加了锁,没有释放锁,出异常的话,可能无法释放锁,必须要在代码层面finally释放锁宕机了,部署了微服务代码层面根本没有走到finally这块,没办法保证解锁,这个key没有被删除,需要有lockKey的过期时间设定为redis的分布式锁key,增加过期时间。

m0_56709616的博客 763

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Redis缓存:春招面试的关键知识点

在上一篇文章中,我们深入探讨了MySQL数据库的核心知识,包括索引、事务和锁机制,这些对于保证数据的高效存储和一致性至关重要。而在当今的互联网应用中,为了提升系统性能和响应速度,缓存技术不可或缺。Redis作为一款高性能的内存数据库,常被用作缓存层,在各类项目中广泛应用。对于春招面试,掌握Redis的相关知识能为你增添不少竞争力,下面我们就来深入了解。

翻晒时光的博客 1093

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

redis 自增_Redis除了做缓存,还能做什么

缓存Redis是什么大家都知道,一个非关系型数据库。大部分情况下我们使用Redis做缓存。使用缓存的情况一般是这样的:Redis缓存“(1)从Redis缓存中获取数据,如果存在数据,直接返回值。(2)如果不存在,执行数据库的查询方法(3)将数据库中的值放入缓存,并返回值”代码如下:当然我们也可以使用Spring的缓存注解@Cacheble。我们要在配置类上面开启缓存注解@EnableCaching...

weixin_39656174的博客 187

Redis的多维应用:从缓存到实时数据分析的全面解析

】## Redis到底能用在什么地方Redis(Remote Dictionary Server)是一个开源的高性能键值对数据库,通常被用作数据库、缓存和消息中间件。由于其出色的性能和多样的数据结构支持,Redis 在很多场景下都有广泛的应用。总之,Redis由于其高性能、多样化的数据结构、原子操作和丰富的特性,在很多场景下都有广泛的应用。无论是作为缓存、数据库还是消息中间件,Redis都能提供出色的性能和稳定性。关于Redis的应用示例,我们可以从多个方面来详细讲解。

夏壹分享 697

Redis详细解析

1.可以作为任务队列,比如说:我们要处理一些任务对吧,那么,我们就可以把相应的这个任务信息放到我们的redis当中,2.可以作为消息队列来使用后边呢,大家会讲mq也就是消息队列产品,大家只要知道使用redis可以做消息队列就可以了。3.还可以来实现分布式锁也就是在我们分布式场景下,边可能有大量的并发操作对吧,为了保证我们数据的一致性啊,这个时候呢?我们就需要来加锁而通过redis呢,就可以实现分布式锁.4.Redis作为一种内存数据库,具有快速的数据访问和高效的数据存储,

m0_65732083的博客 1039

Redis使用场景

计数器 可以对 String 进行自增自减运算,从而实现计数器功能。 Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量。 缓存 将热点数据放到内存中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率。 会话缓存 可以使用 Redis 来统一存储多台应用服务器的会话信息。 当应用服务器不再存储用户的会话信息,也就不再具有状态,一个用户可以请求任意一个应用服务器,从而更容易实现高可用性以及可伸缩性。 全页缓存(FPC) 除基本的会话token之外,Redis还提供很简

村东头老杨的博客 701

Redis内幕揭秘:探索Redis基础知识及应用场景,挖掘出高效的缓存技术

Redis 是一个开源的内存数据结构存储系统,它可以用作数据库、缓存和消息中间件。随着时间的推移,Redis 已经成为了一个非常流行的开源项目,并被广泛应用于互联网和企业级应用程序中。

Hanko的专栏 326

redis可以解决哪些业务场景?

1. 缓存:Redis最主要的应用场景是作为缓存,可以将热点数据存储在Redis中,加速数据访问,提高系统性能。10. 日志处理:Redis支持列表和发布/订阅特性,可以实现实时日志处理和分发。6. 会话存储:Redis可以作为会话存储,支持设置过期时间,提高性能和安全性。9. 分布式缓存:Redis支持集群部署,可以实现分布式缓存,提高可用性和性能。7. 消息队列:Redis支持列表、发布/订阅等特性,可以实现简单的消息队列。3. 发布/订阅系统:Redis支持发布/订阅,可以实现消息推送和通知功能。

Wangfuqiangqiang的博客 969

Redis只能做缓存?太out了!

大多数数据库,由于经常和磁盘打交道,在高并发场景下,响应会非常的慢。为了解决这种速度差异,大多数系统都习惯性的加入一个缓存层,来加速数据的读取。redis由于它优秀的处理能力和丰富的数据结...

weixin_43167418的博客 178

Redis只能做缓存?也太小看它了

大多数数据库,由于经常和磁盘打交道,在高并发场景下,响应会非常的慢。为了解决这种速度差异,大多数系统都习惯性的加入一个缓存层,来加速数据的读取。redis由于它优秀的处理能力和丰富的数据结构,已经成为了事实上的分布式缓存标准。 但是,如果你以为redis只能做缓存的话,那就太小看它了。 redis丰富的数据结构,使得它的业务使用场景非常广泛,加上rdb的持久化特性,它甚至能够被当作落地的数据库使用。在这种情况下,redis能够撑起大多数互联网公司,尤其是社交、游戏、直播类公司的半壁江山。 1. Red

wdjnb的博客 223

Redis 不只是缓存:数据结构与应用场景

它支持多种数据结构,如字符串、哈希、列表、集合和有序集合,使其在分布式锁、消息队列、实时排行榜等场景中大放异彩。Redis的字符串(String)是最基础的数据结构,支持键值存储,适用于缓存、计数器等场景。而哈希(Hash)则适合存储对象,如用户信息,通过字段和值的映射,减少内存占用并提升查询效率。有序集合则能轻松实现实时排行榜,如游戏积分排名,通过ZADD和ZRANGE命令快速更新和查询数据,满足高性能需求。例如,在秒杀系统中,分布式锁能有效避免超卖问题,保障业务逻辑的正确执行。高效存储:字符串与哈希。

khlikx_738的博客 175
上一篇: 【Redis】集群
下一篇: 【QT】认识QT
戴墨镜的恐龙
博客等级 码龄5年 2497粉丝 125原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值