回答知识总结04(redis)

1、redis为什么这么快

Redis 基于内存操作,采用 IO 多路复用,命令执行单线程规避锁竞争,搭配高度优化的数据结构,因此性能极高。

2、数据类型及其对应的底层结构

String 底层基于 SDS,分 int、embstr、raw;List 采用 quicklist;Hash、Set、ZSet 数量小时用 ziplist,量大后切换 dict、intset、skiplist。

3、SDS是什么

SDS 是 Redis 自定义动态字符串,解决 C 原生字符串缺陷,支持 O (1) 获取长度、二进制安全、自动扩容,作为字符串底层载体。

4、Zset怎么实现的

ZSet 小数据用压缩列表 ziplist,大数据采用跳表加字典双结构,字典实现 O (1) 查分数,跳表实现有序范围查询。

5、Hash的扩容,渐进式rehash是什么

dict 拥有两张哈希表,达到负载因子触发扩容;渐进式 rehash 借助 rehashidx,每次访问顺带迁移部分桶,防止一次性迁移阻塞 Redis 主线程。

6、Redis为什么设计成单线程,为什么6.0之后引入多线程

早期单线程是为避免锁竞争、简化并发控制;Redis6 引入多线程仅并行处理网络读写,命令执行依旧串行,用来提升高并发下的网络吞吐。

7、Io多路复用是什么

IO 多路复用允许单个线程监控众多 socket,内核通知就绪事件,只处理活跃连接;Linux 下 epoll 效率最高,是 Redis 高并发的重要基础。

8、持久化机制

RDB 是全量内存快照;AOF 增量记录写命令,支持日志重写;4.0 混合持久化结合两者优势;生产一般双开兼顾性能与数据安全。

9、数据库、redis双写一致性问题、出现原因和解决方案

双写不一致主要由并发读写、操作失败导致;最优常规方案为先更新数据库再删除缓存,配合过期时间兜底;高可用架构可用 Canal 监听 binlog 异步失效缓存。

10、分布式锁怎么实现,setnx有什么问题,redission是什么

分布式锁可用 Redis、ZK、数据库实现;原生 SETNX 分两条命令存在原子性问题,容易死锁、误删他人锁;Redisson 是成熟 Redis 客户端,提供可重入锁,依靠 Lua 脚本保证原子性,自带看门狗实现锁续期。

11、过期删除和内存淘汰策略

过期 key 依靠惰性删除 + 定期删除共同清理;内存打满触发内存淘汰策略,分为针对全部 key、仅过期 key、不淘汰三类,生产常用 allkeys-lru /allkeys-lfu。

12、主从复制原理

Redis 主从复制依靠 PSYNC2.0,初次同步执行全量同步传输 RDB;正常运行持续传播写命令;断线重连依靠复制积压缓冲区实现增量补发,缓冲区不足则重新全量同步。

13、缓存的穿透、击穿、雪崩是什么,解决方案是什么

穿透是查询不存在的数据,请求直达 DB;击穿是单个热点 key 过期;雪崩是大量 key 集中失效;分别使用缓存空值 / 布隆过滤器、分布式锁、打散过期时间 + 集群限流进行解决。

相关推荐
没有气的汽水2 小时前
一次生产 Redis 内存打满的排查、清理和复盘
redis
时间售卖铺2 小时前
Oracle DQL精髓:从基础到高级实战
运维·数据库·云原生·oracle
m0_639906942 小时前
MySQL 锁机制详解|表锁、行锁、意向锁,死锁成因与解决方案
数据库·mysql
进击的荆棘2 小时前
MySQL——在ubuntu环境下安装MySQL
数据库·mysql·ubuntu
hey you~3 小时前
云呼叫中心坐席自动分配实战:ACD 策略、Redis+Lua 实现与排查清单
数据库·redis·lua·云呼叫中心·acd·坐席分配·坐席状态机
夜雪一千3 小时前
MySQL 数据字典如何获得
数据库·mysql
系统集成-鹰翔3 小时前
ERP推单数据库怎么备份:SQLite WAL模式下只复制db文件为什么可能漏任务
javascript·数据库·经验分享·后端
QianhangQianping3 小时前
撤销重做不是「存快照」:一个可视化编辑器的Operation 设计
java·前端·数据库·typescript·编辑器·前端架构·撤销重做
honsor3 小时前
用 Grafana 做温湿度异常检测:从阈值告警到趋势预测
数据库·mysql·php
赵渝强老师3 小时前
【赵渝强老师】YashanDB Developer Center(YDC,崖山数据库开发者中心)
数据库·国产数据库·yashandb·崖山数据库