Redis 大厂常见面试题

本文深入探讨Redis在实际项目中的八大应用场景,如缓存、排行榜等,并解析Redis在处理数据库一致性问题、实现分布式锁、解决客户端Session共享等方面的技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis 大厂常见面试题

Redis 的应用场景

  • 缓冲
  • 排行榜
  • 计数器
  • 分布式会话
  • 分布式锁
  • 社交网络
  • 最新列表
  • 消息系统

详细看 Redis的8大应用场景

Redis 缓冲与数据库的一致性问题

某个时刻,多个系统实例都去更新某个 key。可以基于 Zookeeper 实现分布式锁。每个系统通过 Zookeeper 获取分布式锁,确保同一时间,只能有一个系统实例在操作某个 Key,别人都不允许读和写。

你要写入缓存的数据,都是从 MySQL 里查出来的,都得写入 MySQL 中,写入 MySQL 中的时候必须保存一个时间戳,从 MySQL 查出来的时候,时间戳也查出来。

每次要写之前,先判断一下当前这个 Value 的时间戳是否比缓存里的 Value 的时间戳要新。如果是的话,那么可以写,否则,就不能用旧的数据覆盖新的数据。
详细看 Redis,双写一致性、并发竞争、线程模型

Redis 分布式锁以及其原理

通过以下四个命令实现:

  • setnx
  • getset
  • expire
  • del

详细看 redis分布式锁原理与实现

Redis解决客户端session共享信息?

考虑到session中数据类似map的结构,采用redis中hash存储session数据比较合适,如果使用单个value存储session数据,不加锁的情况下,就会存在session覆盖的问题,因此使用hash存储session,每次只保存本次变更session属性的数据,避免了锁处理,性能更好。

如果每改一个session的属性就触发存储,在变更较多session属性时会触发多次redis写操作,对性能也会有影响,我们是在每次请求处理完后,做一次session的写入,并且之写入变更过的属性。

如果本次没有做session的更改, 是不会做redis写入的,仅当没有变更的session超过一个时间阀值(不变更session刷新过期时间的阀值),就会触发session保存,以便session能够延长有效期。

详细看 几分钟搞定redis存储session共享——设计实现

Redis分布式锁解决了什么问题?

1.1 锁需要具备唯一性

​ 1.2 锁需要有超时时间,防止死锁

​ 1.3 锁的创建和设置锁超时时间需要具备原子性

​ 1.4 锁的超时问题

​ 1.5 锁的可重入问题

​ 1.6 集群下分布式锁的问题

详细看 Redis分布式锁面临的问题和解决方案

Redis为什么能支持分布式锁?使用方式有哪些?

Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。

详细看 为什么redis可以做分布式锁

Redis的 缓冲雪崩,缓冲穿透,缓冲击穿,以及解决方案

image-20210314160334027

image-20210314121724599

image-20210314121748142

详细看 缓存雪崩、击穿、穿透(带答案)

Redis的持久化机制,淘汰策略

Redis 主从复制

Redis哨兵机制

以上三个问题,详细看 Redis,哨兵、持久化、主从、手撕LRU,我都整理好了

Zset底层数据结构,以及ziplist和skiplist

zset底层的存储结构包括ziplist或skiplist,在同时满足以下两个条件的时候使用ziplist,其他时候使用skiplist,两个条件如下:

  • 有序集合保存的元素数量小于128个
  • 有序集合保存的所有元素的长度小于64字节

当ziplist作为zset的底层存储结构时候,每个集合元素使用两个紧挨在一起的压缩列表节点来保存,第一个节点保存元素的成员,第二个元素保存元素的分值。

当skiplist作为zset的底层存储结构的时候,使用skiplist按序保存元素及分值,使用dict来保存元素和分值的映射关系。

详细看 redis zset底层数据结构

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涛涛之海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值