一、基础定义
Redis全称远程字典服务 ,是一款开源的ANSI C语言 编写的内存型数据结构存储系统,可作为数据库、缓存、消息中间件使用,支持多语言API接入。
二、核心特点与优势
- 极致性能:数据全存于内存,读写延迟达亚毫秒级,官方基准测试可实现11万次/秒读、8.1万次/秒写。
- 丰富数据结构:原生支持字符串、哈希、列表、集合、有序集合、流、向量等18种数据类型,适配不同业务场景。
- 高可用与扩展:支持主从复制、哨兵自动故障转移,通过Redis Cluster实现分布式分片,可横向扩展承载海量数据。
- 灵活持久化:提供RDB快照、AOF日志两种持久化方案,可按需配置平衡性能与数据安全性。
三、主流应用场景
- 热点数据缓存,大幅降低后端数据库压力
- 分布式会话共享、分布式锁实现
- 实时计数器、游戏排行榜、限流控制
- 基于Stream的轻量消息队列、实时数据统计
四、常见问题
1.Redis是什么?和Memcached的核心区别
Redis是开源的基于内存的键值存储系统,支持多数据结构与持久化能力。和Memcached相比:
- Redis支持5种以上核心数据结构,Memcached仅支持简单字符串
- Redis可通过RDB/AOF持久化数据,Memcached数据仅存内存,重启丢失
- Redis原生支持集群、事务与Lua脚本,Memcached需依赖第三方组件实现扩展
2.Redis为什么性能这么高
核心源于4点设计:
- 数据全存内存,避免磁盘I/O开销
- 核心命令处理采用单线程,无线程切换与锁竞争
- 基于epoll实现I/O多路复用,单线程可处理数千并发连接
- 底层使用跳表、压缩列表等高效数据结构优化读写效率
3.Redis核心5种数据类型及适用场景
- String 计数器、分布式锁、缓存配置信息
- Hash 存储用户/商品对象,避免序列化开销
- List 轻量消息队列、最新动态列表
- Set 共同好友计算、随机抽奖去重
- ZSet 游戏排行榜、带权重的任务调度
4.RDB和AOF持久化的区别与选型
- RDB:定时生成内存快照文件,体积小恢复快,但可能丢失最后一次快照后的数据
- AOF:逐行记录所有写操作命令,数据安全性高(默认仅丢1秒数据),但文件体积大恢复慢
- 生产环境推荐两者搭配使用,用RDB做全量备份,AOF做增量日志
5.Redis的内存淘汰策略有哪些
共8种主流策略:
- noeviction:内存满后写请求直接报错(默认)
- allkeys-lru:从所有键中淘汰最近最少使用的键
- volatile-lru:仅从带过期时间的键中淘汰LRU键
- 其余还包括allkeys-random、volatile-random、volatile-ttl、allkeys-lfu、volatile-lfu,可按需适配不同业务场景
6.缓存穿透、击穿、雪崩的区别与解决方案
- 穿透:查询不存在的数据,请求直接打到数据库,可通过布隆过滤器、缓存空值解决
- 击穿:热点Key过期时大量并发请求涌入打垮数据库,可通过互斥锁、逻辑过期方案处理
- 雪崩:大量Key同时失效或Redis宕机,大量请求压到数据库,可通过给过期时间加随机值、集群高可用、限流降级规避
7.如何提升缓存命中率
可从4个方向优化:提前预热加载热点数据、合理扩容Redis内存空间、根据业务调整适配的数据结构、优化缓存更新策略提升更新频次