运维面试题库之Redis

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 运维面试题库之Redis

Redis

Q:什么是Redis?它的特点是什么?

A:Redis是一种开源的内存数据存储系统,常用作缓存、数据库和消息代理。它的主要特点包括:

  • 高性能:Redis存储在内存中,提供快速的读写操作和低延迟。
  • 数据结构多样性:Redis支持多种数据结构,如字符串、哈希、列表、集合和有序集合。
  • 持久性:Redis可以将数据持久化到磁盘,以防止数据丢失。
  • 高可用性:Redis支持主从复制和集群模式,以提供高可用性和可伸缩性。
  • 支持丰富的功能:Redis提供了丰富的功能,如事务、发布订阅、Lua脚本等

Q:Redis支持的数据结构有哪些?请举例说明其用途

A:Redis支持以下数据结构:

  • 字符串(String):存储字符串值,常用于缓存、计数器等。
  • 哈希(Hash):存储键值对,适用于存储对象或记录的属性。
  • 列表(List):存储有序的字符串元素,可用于实现队列、栈等。
  • 集合(Set):存储唯一的字符串元素,提供集合操作,如交集、并集等。
  • 有序集合(Sorted Set):存储有序的字符串元素,并为每个元素关联一个分数,适用于排行榜、范围查询等。

Q:Redis的持久化机制是什么?有哪两种方式?

A:Redis提供两种持久化方式:

  • RDB(Redis Database):将Redis数据保存到磁盘的快照文件,可以定期或手动创建。

    • 优点:

      • 只有一个文件 dump.rdb,方便持久化。
      • 容灾性好,一个文件可以保存到安全的磁盘。
      • 性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是 IO 最大化。使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 Redis的高性能。
      • 相对于数据集大时,比 AOF 的启动效率更高。
    • 缺点:

      • 数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 Redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候
  • AOF(Append-Only File):以追加的方式记录每个写操作到日志文件中,用于恢复数据。

    • 优点:
      • 数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次命令操作就记录到 aof 文件中一次。
      • 通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof 工具解决数据一致性问题。
      • AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的 flushall)
    • 缺点:
      • AOF 文件比 RDB 文件大,且恢复速度慢。
      • 数据集大的时候,比 RDB 启动效率低。

Q:Redis的主从复制是什么?有什么作用

A:Redis主从复制是一种机制,通过将主节点的数据复制到一个或多个从节点,以实现数据的冗余和读扩展。主从复制的作用包括:

  • 数据备份:从节点可以用作主节点数据的备份,以防止主节点数据的丢失。
  • 提高读性能:从节点可以处理读取请求,减轻主节点的负载。
  • 故障恢复:如果主节点发生故障,可以将从节点升级为新的主节点

Q:Redis如何处理并发访问和并发写入的问题?

A:Redis是单线程的,通过使用事件驱动的异步IO模型来处理并发访问。Redis的单线程模型可以避免锁竞争和线程上下文切换的开销。此外,Redis还提供了事务和乐观锁等机制来处理并发写入的问题。

Q:Redis的缓存失效策略有哪些?请说明它们的工作原理

A:Redis的缓存失效策略包括:过期时间、LRU(最近最少使用)、LFU(最近最不常用)和随机淘汰。过期时间是通过设置键的过期时间来失效缓存。LRU和LFU是基于访问频率的缓存淘汰策略,LRU淘汰最长时间未被访问的键,而LFU淘汰最不常用的键。随机淘汰是随机选择要淘汰的键。

Q:Redis如何处理并发读写的问题?

A:Redis是单线程的,通过使用事件驱动的异步IO模型来处理并发读写。Redis的单线程模型可以避免锁竞争和线程上下文切换的开销。此外,Redis还提供了乐观锁机制(使用WATCH命令)来处理并发写入的问题

Q: 是否使用过 Redis 集群,集群的原理是什么?

A:

  1. Redis Sentinal 着眼于高可用, 在 master 宕机时会自动将 slave 提升为master, 继续提供服务。
  2. 、Redis Cluster 着眼于扩展性, 在单个 redis 内存不足时, 使用 Cluster 进行分片存储。

Q:Redis 常见性能问题和解决方案?

A:(1) Master 最好不要做任何持久化工作,如 RDB 内存快照和 AOF 日志文件

(2) 如果数据比较重要,某个 Slave 开启 AOF 备份数据,策略设置为每秒同步一次

(3) 为了主从复制的速度和连接的稳定性,Master 和 Slave 最好在同一个局域网内

(4) 尽量避免在压力很大的主库上增加从库

(5) 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3...

这样的结构方便解决单点故障问题,实现 Slave 对 Master 的替换。如果 Master 挂了,可以立刻启用 Slave1 做 Master,其他不变。

Q:Redis 最适合的场景?

A:会话缓存、全页缓存、队列、排行榜/计数器、发布/订阅、

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
2月前
|
存储 NoSQL 算法
阿里面试:亿级 redis 排行榜,如何设计?
本文由40岁老架构师尼恩撰写,针对近期读者在一线互联网企业面试中遇到的高频面试题进行系统化梳理,如使用ZSET排序统计、亿级用户排行榜设计等。文章详细介绍了Redis的四大统计(基数统计、二值统计、排序统计、聚合统计)原理和应用场景,重点讲解了Redis有序集合(Sorted Set)的使用方法和命令,以及如何设计社交点赞系统和游戏玩家排行榜。此外,还探讨了超高并发下Redis热key分治原理、亿级用户排行榜的范围分片设计、Redis Cluster集群持久化方式等内容。文章最后提供了大量面试真题和解决方案,帮助读者提升技术实力,顺利通过面试。
|
2月前
|
存储 NoSQL 算法
面试官:Redis 大 key 多 key,你要怎么拆分?
本文介绍了在Redis中处理大key和多key的几种策略,包括将大value拆分成多个key-value对、对包含大量元素的数据结构进行分桶处理、通过Hash结构减少key数量,以及如何合理拆分大Bitmap或布隆过滤器以提高效率和减少内存占用。这些方法有助于优化Redis性能,特别是在数据量庞大的场景下。
面试官:Redis 大 key 多 key,你要怎么拆分?
|
3月前
|
NoSQL Java API
美团面试:Redis锁如何续期?Redis锁超时,任务没完怎么办?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试一线互联网企业时遇到了关于Redis分布式锁过期及自动续期的问题。尼恩对此进行了系统化的梳理,介绍了两种核心解决方案:一是通过增加版本号实现乐观锁,二是利用watch dog自动续期机制。后者通过后台线程定期检查锁的状态并在必要时延长锁的过期时间,确保锁不会因超时而意外释放。尼恩还分享了详细的代码实现和原理分析,帮助读者深入理解并掌握这些技术点,以便在面试中自信应对相关问题。更多技术细节和面试准备资料可在尼恩的技术文章和《尼恩Java面试宝典》中获取。
美团面试:Redis锁如何续期?Redis锁超时,任务没完怎么办?
|
3月前
|
NoSQL 算法 Redis
Redis面试篇
Redis面试篇
73 5
|
2月前
|
存储 NoSQL Redis
Redis常见面试题:ZSet底层数据结构,SDS、压缩列表ZipList、跳表SkipList
String类型底层数据结构,List类型全面解析,ZSet底层数据结构;简单动态字符串SDS、压缩列表ZipList、哈希表、跳表SkipList、整数数组IntSet
|
3月前
|
缓存 NoSQL 算法
面试题:Redis如何实现分布式锁!
面试题:Redis如何实现分布式锁!
|
5月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
2月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
2月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?