Redis学习

一、基础定义

Redis全称‌远程字典服务 ‌,是一款开源的ANSI C语言 编写的内存型数据结构存储系统,可作为数据库、缓存、消息中间件使用,支持多语言API接入。

二、核心特点与优势

  1. 极致性能‌:数据全存于内存,读写延迟达亚毫秒级,官方基准测试可实现11万次/秒读、8.1万次/秒写。
  2. 丰富数据结构‌:原生支持字符串、哈希、列表、集合、有序集合、流、向量等18种数据类型,适配不同业务场景。
  3. 高可用与扩展‌:支持主从复制、哨兵自动故障转移,通过Redis Cluster实现分布式分片,可横向扩展承载海量数据。
  4. 灵活持久化‌:提供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内存空间、根据业务调整适配的数据结构、优化缓存更新策略提升更新频次