本节Redis课程围绕三个核心主题展开:
-
为什么需要Redis及Redis的基本工作原理:Redis作为一个高性能的内存数据库,具备低延迟、高吞吐的特点,能够解决传统数据库在高并发场景下的性能瓶颈。
-
Redis应用案例:通过掘金连续签到、用户计数、排行榜和分布式锁等真实场景,深入了解Redis的多种数据结构及功能。
-
在字节跳动使用Redis的注意事项:详细探讨大Key、热Key、慢查询的危害及解决方案,以及如何应对缓存穿透和缓存雪崩。
• 字符串操作:GET / SET / DEL / INCR / SETNX。
• 哈希操作:HSET / HGET / HINCRBY。
• 列表操作:LPUSH / RPOP / LRANGE。
• 有序集合操作:ZADD / ZRANGEBYSCORE / ZREVRANGE / ZINCRBY / ZSCORE。
Pipelining概念:将多条命令一次性发送至Redis服务器,提高网络传输效率。
• 链表/FIFO:用于实现队列等场景。
• 哈希表:Redis的基础数据结构,支持O(1)时间复杂度的插入与查找。
• 跳表:用于实现有序集合,支持范围查询及排序。
• 数据持久化:
• AOF(Append Only File) :通过记录每次写操作实现数据的持久化。
• RDB(Redis DataBase) :定期生成快照保存数据。
• 单线程模型:Redis采用单线程处理命令,通过事件循环实现高并发,避免了多线程切换的开销。
• 掘金连续签到:使用GET和SET存储签到数据,结合Key的过期时间实现自动清理。
• 掘金用户计数:利用HSET存储用户访问计数。
• 排行榜:基于ZSET实现动态排名和高效查询。
• 分布式锁:通过SETNX原子操作实现分布式锁,保证数据一致性。
• 大Key问题:当Value大于10KB时,容易引起内存膨胀和网络传输延迟,建议分片存储。
• 热Key问题:某些Key的访问频率过高会导致Redis实例负载过重,可以通过分布式缓存解决。
• 慢查询问题:包括大Key操作、批量操作以及高并发导致的阻塞,需优化命令和分布式部署。
• 缓存穿透和雪崩:
• 缓存穿透:通过布隆过滤器拦截无效请求。
• 缓存雪崩:设置不同的过期时间并增加降级策略。
• 行式存储与列式存储对比。
• 数据压缩:常用算法包括LZ4、Run-length encoding、Delta encoding。
• 延迟物化:减少内存带宽消耗,提高查询性能。
• 向量化计算:基于SIMD指令集(如SSE、AVX)提升处理效率。
• Shard Key:实现数据分片。
• 索引:包括哈希索引、B-Tree、B+Tree及LSM-Tree。