Skip to content
文章大纲

Redis 为什么是高性能的?

Redis 为什么采用单线程模型?

Redis 的基础数据结构有哪些?

Redis 支持多种基础数据结构,基础数据结构包括 String(字符串)、List(列表)、Set(集合)、Sorted Set(有序集合)、Hash(哈希表),除了基础数据结构外,Redis 还提供了 Bitmap、Stream、HyperLogLog、Geospatial 等高级数据结构。

Redis 的应用场景有哪些?

  • 分布式缓存:在分布式系统中,Redis 可以被用作全局缓存,提供共享数据和信息。在实际项目中,为了进一步提升应用性能,应用中可能存在多级缓存,例如本地缓存、分布式缓存等。当进行读操作时,为了减少网络 IO 和带宽,优先访问本地缓存,如果命中缓存则立即返回,如果未命中则从分布式缓存中查找,命中缓存则立即返回,否则将访问数据源并将执行结果填充至多级缓存中。
  • 分布式锁: Redis 可以用作分布式锁的实现,通过 SETNX 命令来实现简单的锁机制,避免多个节点同时执行某个关键任务。使用 Redis 实现分布式锁需注意如下事项:
    • 互斥:同一时刻保证只有一个线程获取到锁,其他线程阻塞等待获取锁。
    • 锁应设置超时时间:在分布式环境下,由于 Redis 故障或网络 IO 等原因导致锁持有方无法及时释放锁资源,其他节点则会长时间排队阻塞等待获取锁资源,可能出现死锁现象,严重影响程序执行效率。为了防止释放锁失败,通常会设置锁的超时时间,一旦锁长时间未被释放,则锁自动过期,释放锁后其他线程竞争锁。
    • 锁的可重入性:锁的重入性是指同一个线程是否可以多次获取同一把锁而不被阻塞
    • 锁的续期:如果已经设置了锁的过期时间,当到锁过期但是业务逻辑还未执行完成,此时无法保证业务正常执行,在这种情况应需要支持锁的自动续期。
  • 分布式队列: Redis 的发布/订阅机制和 List 结构、Stream 结构可以用来构建轻量级的消息队列。生产者将消息发布到 Redis,而消费者则订阅这些消息。这种机制可以用于实现异步任务、事件通知等。Redis 实现分布式队列可能会存在如下问题:
    • 无法保证可靠性:Redis 的设计目标是提供高性能、低延迟的分布式系统,无法保证强一致性和可靠性,某些情况下,Redis 会丢失消息,或者在出现故障时无法提供持久化保证。
    • 缺少 MQ 的高级特性:相较于专业级 MQ,基于 Redis 实现分布式队列虽然简单,但是不支持 MQ 的高级特性,例如消息重试、消息路由、持久化消息等。
  • 分布式会话:Redis 可以用于存储用户会话数据,特别是在分布式系统中。将用户的会话信息存储在 Redis 中,可以实现快速、可扩展、可靠的用户会话管理。
  • 排行榜和计分系统:利用有序集合和 Redis 提供的排名功能,可以很方便地构建排行榜和计分系统,例如游戏中的玩家排名。
  • 计数器应用:Redis 支持原子性的增减操作,因此可以用来实现计数器应用。例如,可以用 Redis 记录网站的访问次数、文章的点赞数等。
  • 实时分析:Redis 支持复杂的数据结构,如 HyperLogLog 和布隆过滤器,可用于实时分析场景,例如统计在线用户数、IP 去重等。
  • 地理位置服务:Redis 提供了有序集合(Sorted Set)的支持,可用于存储和查询地理位置信息。这对于构建位置服务应用如地理位置推荐、附近的人等非常有用。

Redis 的数据过期策略?

Redis 的内存淘汰策略?

Redis 的持久化机制?

什么是 Redis Pipeline?

Redis 底层协议是什么?

Redis 的集群模式有那几种?

Redis 的主从复制是什么?

Redis Sentinel 是什么?

什么是一致性 Hash?

什么是 Redis Cluster?

为什么槽位是 16384?

Redis 的优化策略有哪些?

Released under the MIT License.