运维面试题库之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数据库实现在线游戏中的游戏玩家积分排行榜功能。
相关文章
|
4月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
2月前
|
存储 NoSQL 定位技术
Redis数据类型面试给分情况
Redis常见数据类型包括:string、hash、list、set、zset(有序集合)。此外还包含高级结构如bitmap、hyperloglog、geo。不同场景可选用合适类型,如库存用string,对象存hash,列表用list,去重场景用set,排行用zset,签到用bitmap,统计访问量用hyperloglog,地理位置用geo。
66 5
|
3月前
|
缓存 NoSQL Java
Java Redis 面试题集锦 常见高频面试题目及解析
本文总结了Redis在Java中的核心面试题,包括数据类型操作、单线程高性能原理、键过期策略及分布式锁实现等关键内容。通过Jedis代码示例展示了String、List等数据类型的操作方法,讲解了惰性删除和定期删除相结合的过期策略,并提供了Spring Boot配置Redis过期时间的方案。文章还探讨了缓存穿透、雪崩等问题解决方案,以及基于Redis的分布式锁实现,帮助开发者全面掌握Redis在Java应用中的实践要点。
138 6
|
5月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
8月前
|
存储 缓存 NoSQL
Redis 面试题
Redis 基础面试题
|
10月前
|
存储 NoSQL 算法
阿里面试:亿级 redis 排行榜,如何设计?
本文由40岁老架构师尼恩撰写,针对近期读者在一线互联网企业面试中遇到的高频面试题进行系统化梳理,如使用ZSET排序统计、亿级用户排行榜设计等。文章详细介绍了Redis的四大统计(基数统计、二值统计、排序统计、聚合统计)原理和应用场景,重点讲解了Redis有序集合(Sorted Set)的使用方法和命令,以及如何设计社交点赞系统和游戏玩家排行榜。此外,还探讨了超高并发下Redis热key分治原理、亿级用户排行榜的范围分片设计、Redis Cluster集群持久化方式等内容。文章最后提供了大量面试真题和解决方案,帮助读者提升技术实力,顺利通过面试。
|
10月前
|
存储 NoSQL 算法
面试官:Redis 大 key 多 key,你要怎么拆分?
本文介绍了在Redis中处理大key和多key的几种策略,包括将大value拆分成多个key-value对、对包含大量元素的数据结构进行分桶处理、通过Hash结构减少key数量,以及如何合理拆分大Bitmap或布隆过滤器以提高效率和减少内存占用。这些方法有助于优化Redis性能,特别是在数据量庞大的场景下。
面试官:Redis 大 key 多 key,你要怎么拆分?
|
存储 缓存 移动开发
redis 面试总结
前段时间找工作搜索 golang 面试题时,发现都是比较零散或是基础的题目,覆盖面较小。而自己也在边面试时边总结了一些知识点,为了方便后续回顾,特此整理了一下。
233 0
redis 面试总结
|
存储 NoSQL 数据库
|
存储 NoSQL 数据库
Redis面试总结
什么是redis? Redis 是一个基于内存的高性能key-value数据库。 (有空再补充,有理解错误或不足欢迎指正) Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。
1649 0