Java面试必问的Redis不会?掌握这15大Redis知识点,足以吊锤面试官

Java面试必问的Redis不会?掌握这15大Redis知识点,足以吊锤面试官
最新回答
﹏素颜黛眉

2022-12-02 15:38:24

掌握以下15大Redis核心知识点,可系统应对Java面试中的Redis相关问题

1. Redis基础概念
  • 定义:Redis是开源的、基于内存的键值对数据库,支持多种数据结构,具备持久化、高可用和集群特性。
  • 核心优势

    数据存储在内存中,读写性能极高(每秒10万+操作)。

    支持丰富的数据类型(如字符串、哈希、列表等),适应多种场景。

    提供持久化、主从复制、哨兵模式和集群方案,保障高可用性。

2. Redis的5种核心数据结构及命令
  • 字符串(String)

    场景:缓存、计数器、分布式锁。

    命令:SET、GET、INCR、DECR。

  • 哈希(Hash)

    场景:存储对象(如用户信息)。

    命令:HSET、HGET、HGETALL。

  • 列表(List)

    场景:消息队列、最新消息排行。

    命令:LPUSH、RPOP、LRANGE。

  • 集合(Set)

    场景:标签系统、去重。

    命令:SADD、SMEMBERS、SINTER(交集)。

  • 有序集合(ZSet)

    场景:排行榜、带权重的队列。

    命令:ZADD、ZRANGE、ZSCORE。

  • 扩展数据结构

    HyperLogLog:基数统计(如UV计算),占用内存极小(12KB)。

    Geospatial:地理位置存储与计算(如附近的人)。

    Bitmap:位图操作(如用户签到状态)。

3. Redis事务与发布订阅
  • 事务

    通过MULTI、EXEC、WATCH等命令实现原子性操作,但不支持回滚

    场景:批量操作需保证一致性时(如转账)。

  • 发布订阅

    模式:发布者(PUBLISH)发送消息,订阅者(SUBSCRIBE)接收。

    场景:实时消息推送(如聊天室)。

4. 过期策略与内存淘汰策略
  • 过期策略

    惰性删除:访问时检查键是否过期并删除。

    定期删除:随机抽查部分过期键删除。

  • 内存淘汰策略(当内存不足时触发):

    volatile-lru:淘汰最近最少使用的过期键。

    allkeys-lru:淘汰所有键中最近最少使用的。

    noeviction:不淘汰,返回错误(默认策略)。

5. 持久化机制
  • RDB(Redis DataBase)

    原理:定时生成内存数据的二进制快照(如save 60 10000表示60秒内1万次修改触发保存)。

    优点:恢复速度快,适合备份。

    缺点:可能丢失最后一次快照后的数据。

  • AOF(Append Only File)

    原理:记录所有写操作命令,重启时重放。

    优点:数据安全性高。

    缺点:文件体积大,恢复速度慢。

  • 选择建议

    追求性能选RDB,追求数据安全选AOF,或两者结合。

6. Redis集群
  • 目的:解决单机容量和性能瓶颈,实现横向扩展。
  • 数据分布:通过哈希槽(16384个)分配数据,节点负责部分槽位。
  • Redis Cluster

    自动故障转移、节点扩容/缩容。

    客户端需支持集群协议(如JedisCluster)。

7. 主从复制
  • 实现方式

    全量同步:主节点生成RDB文件并发送给从节点。

    增量同步:主节点记录写命令到缓冲区,从节点同步。

  • 数据同步流程

    从节点发送PSYNC命令。

    主节点判断同步类型(全量/增量)。

    执行同步并保持心跳检测(REPLCONF ACK)。

8. 哨兵模式(Sentinel)
  • 功能:监控主从节点,自动故障转移。
  • 核心任务

    监控:定期检查节点状态。

    通知:故障时发送警报。

    自动故障转移:选举新主节点并更新配置。

  • 配置文件:sentinel.conf中定义监控规则(如sentinel monitor mymaster 127.0.0.1 6379 2)。
9. 高并发处理策略
  • 缓存穿透

    现象:查询不存在的数据导致直接访问数据库。

    解决方案:布隆过滤器、缓存空值。

  • 缓存雪崩

    现象:大量缓存同时失效导致数据库压力激增。

    解决方案:设置随机过期时间、多级缓存。

  • 缓存击穿

    现象:热点键过期时大量请求涌入数据库。

    解决方案:互斥锁、逻辑过期(不自动删除缓存)。

10. 缓存更新策略
  • Cache-Aside

    读:先查缓存,未命中则查数据库并写入缓存。

    写:更新数据库后删除缓存(或更新缓存)。

  • Read-Through/Write-Through

    应用只与缓存交互,由缓存负责同步数据库。

  • Write-Behind

    写操作先更新缓存,异步批量写入数据库(提高性能但可能丢失数据)。

11. 分布式锁实现
  • 基于SETNX

    命令:SETNX lock_key unique_value NX PX 30000(设置过期时间防止死锁)。

    释放锁:检查值匹配后删除(Lua脚本保证原子性)。

  • RedLock算法

    在多个独立Redis节点上尝试获取锁,超过半数成功才算获取成功。

12. 性能优化技巧
  • 避免大键:如大哈希或列表,可能导致内存不均。
  • 使用管道(Pipeline):批量执行命令减少网络开销。
  • 合理选择数据结构:如用ZSet实现延迟队列。
13. 监控与运维
  • 监控指标

    内存使用率、命中率、连接数、QPS。

  • 工具

    INFO命令、Redis-Exporter + Prometheus + Grafana。

14. 常见面试问题
  • Redis为什么快

    内存存储、单线程避免线程切换、IO多路复用(epoll)。

  • Redis与Memcached的区别

    Redis支持更多数据类型、持久化、主从复制;Memcached仅支持字符串且无持久化。

  • 如何保证Redis高可用

    主从复制 + 哨兵模式或集群方案。

15. 学习资源推荐
  • 文档:Redis官方文档、Redis设计与实现(书籍)。
  • 实践:搭建集群环境、模拟故障转移、压测性能。

掌握以上知识点后,可结合实际项目经验深入理解,面试时通过具体场景阐述技术选型和优化思路,更能体现实战能力。