每日八股day11

📅 2026/8/4 6:57:15 👁️ 阅读次数 📝 编程学习
每日八股day11

### 本系列帖子为鼠鼠复习八股巩固记忆和个人理解所写,如有错误纯属本人实力不佳,欢迎各位大佬阅读指正 ###

1.Redis 是什么?为什么叫高性能?

Redis是基于内存的高性能非关系型数据库。

为什么高性能:

基于内存操作,没有磁盘IO开销。

单线程模型,避免线程切换与锁竞争,CPU利用率高,命令串执行高效。

IO多路复用,采用非阻塞IO,单个线程同时监听多个连接,有事件才处理,并发强

高效的数据结构和简单命令,复杂度低,执行速度快。

避免频繁内存拷贝。

单线程避免了并发安全问题。

补充:Redis 单线程为什么还能抗高并发?

使用IO多路复用,单线程同时监听大量连接,非阻塞处理。

基于内存操作,命令执行极快,耗时极短。

单线程避免锁竞争,线程切换等开销,CPU利用率高。

整体无阻塞,单线程也能达到极高QPS。

2.Redis 支持的数据类型有哪些?

5 大基础:

String,Hash,List,Set,ZSet/SortedSet

3 大特殊:

Bitmap(位图)基于String实现,按bit操作用于签到,用户在线状态,布隆过滤器。

HyperLogLog,做基数统计用于UV,独立访客统计。

GEO(地理信息),经纬度存储,距离计算,用于附近的人,附件门店。

高级类型:

Stream,持久化消息队列,支持消费者组用于可靠消息,日志采集。

Module(扩展类型),如RedisJOSN,RedisTimeSeries等。用于支持JSON,时序,全文检索。

追问:Stream 作用?和 List 做队列区别?

Stream是持久化消息队列,支持消费者组,消息确认,回溯。

List不支持ACK,消息取出就丢,不适合可靠消息。

3.Redis 常用应用场景有哪些?

热点数据缓存(核心),减轻DB压力,提升读取速度,用于商品信息,用户信息,配置。

分布式锁,SETNX/Redisson,解决分布式系统并发安全问题。

计数器/限流,INCR,DECR,用于点赞数,阅读数,接口限流,IP限流。

会话存储(Session共享),替代服务器Session,用于集群环境统一登陆态。

消息队列,简单队列,异步任务,高级用Stream。

排行榜,ZSet有序集合,用于积分排行,热度排行等。

去重、交集/并集,Set用于共同好友,去重。

签到、用户状态,Bitmap用于布隆过滤器,签到统计,在线状态。

附近的人,GEO。

分布式ID生成,INCR/INCRBY,全局唯一ID。

延迟任务,ZSet,订单超时未支付自动取消。

追问:Redis 做缓存三大问题:穿透、击穿、雪崩

穿透:查询不存在的数据,使用布隆过滤/缓存空值。

击穿:热点key过期,使用互斥锁永不过期。

雪崩:大量key同时过期,使用过期时间加随机值/集群+多级缓存。