每日十题八股-2025年1月5日

1.redis应用场景是什么?
2.Redis除了缓存,还有哪些应用?
3.Redis支持并发操作吗?
4.Redis分布式锁的实现原理?什么场景下用到分布式锁?
5.Redis的大Key问题是什么?
6.大Key问题的缺点?
7.Redis大key如何解决?
8.什么是热key?
9.如何解决热key问题?
10.如何保证 redis 和 mysql 数据缓存一致性问题?

1.redis应用场景是什么?

redis基于内存,读写特别快。

  • 缓存:首先就可以作为热点数据的缓存,减轻数据库的压力。
  • 实时排行榜:然后读写快+Zset(有序集合),适配实时排行榜的需求。
  • 再然后一些后续提出的数据结构,bitmap可以做签到记录。HyperLogLog根据海量数据做基数统计,流量分析。
  • 分布式锁:String的SETNX+EXPIRE redis多种分布式锁的实现
  • 消息队列:Redis的发布订阅功能做一个轻量级的消息队列。

2.Redis除了缓存,还有哪些应用?

消息队列,分布式锁。
消息队列:常见的实现方案有List(lpush, rpop(要求代码while(true)), 或者blpush这样阻塞式的,或者多个List实现消息可靠,也就是确保消费者正确消费完),Pub/Sub发布订阅功能(任何客户端(Redis实例)都可以订阅一个或多个频道,发布者可以向特定频道发送消息)。但是相比于成熟的消息队列框架,RabbitMQ,kafaka,还是需要花心思处理消息持久化,可靠性,顺序等,有一些不方便。
在这里插入图片描述
在这里插入图片描述
分布式锁
set nx方式:Redis提供了几种方式来实现分布式锁,最常用的是基于SET命令的争抢锁机制。客户端可以使用SET resource_name lock_value NX PX milliseconds命令设置锁,其中NX表示只有当键不存在时才设置,PX指定锁的有效时间(毫秒)。(注意要使用lua脚本保证原子性)
RedLock和redisson:单机锁+分布式锁
在这里插入图片描述
分析问题:之所以简单的设置Key不能满足于Redis集群应用,主要的原因在于锁仅存在于单个实例中。
在这里插入图片描述

3.Redis支持并发操作吗?

支持。
在这里插入图片描述

4.Redis分布式锁的实现原理?什么场景下用到分布式锁?

分布式锁是用于分布式环境下并发控制的一种机制,用于控制某个资源在同一时刻只能被一个应用所使用。
分布式锁的五种进阶方案
按照资源的单机或多机,单机一般就是setnx+过期时间,分布就是redlock。
setnx,要注意的是设置value有请求特有编号,然后解锁的时候检查是否是自己的锁,要用lua脚本。
在这里插入图片描述

5.Redis的大Key问题是什么?

在这里插入图片描述

6.大Key问题的缺点?

内存占用过高,读写性能下降,从而导致其他操作被阻塞,网络IO拥塞,主从同步延迟。
要解释的:
在这里插入图片描述
数据倾斜:
在这里插入图片描述

7.Redis大key如何解决?

设计上尽量合理,能拆分的就拆分,不能拆分的就能加上过期时间的就加上过期时间。
在这里插入图片描述
监控Redis的内存水位。可以通过监控系统设置合理的Redis内存报警阈值进行提醒,例如Redis内存使用率超过70%、Redis的内存在1小时内增长率超过20%等。

8.什么是热key?

经常被访问的key就是热点key。通常以其接收到的Key被请求频率来判定。

9.如何解决热key问题?

热的发现与业内解决方案
在这里插入图片描述

10.如何保证 redis 和 mysql 数据缓存一致性问题?

写:先写数据库,再删redis。
读:先读redis,未命中再读mysql,并写入redis。
缓存是通过牺牲强一致性来提高性能的。这是由CAP理论决定的。缓存系统适用的场景就是非强一致性的场景,它属于CAP中的AP。所以,如果需要数据库和缓存数据保持强一致,就不适合使用缓存。

删redis的一些更加完善的工作:缓存延时双删,重试,订阅binlog+canal。
延时双删的步骤:

  1. 先删除缓存
  2. 再更新数据库
  3. 休眠一会(比如1秒),再次删除缓存。
    在这里插入图片描述
    删除缓存重试机制的大致步骤:
  4. 写请求更新数据库
  5. 缓存因为某些原因,删除失败
  6. 把删除失败的key放到消息队列
  7. 消费消息队列的消息,获取要删除的key
  8. 重试删除缓存操作
    在这里插入图片描述
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值