极简面试题 --- Redis

什么是 Redis?

Redis 是一个基于内存的键值存储系统,也被称为数据结构服务器。它支持多种数据结构,例如字符串、哈希表、列表、集合和有序集合,并且可以在内存中快速读写。

Redis 的优势有哪些?

  • 快速:由于 Redis 是基于内存的,所以可以快速读写数据。
  • 可扩展性:Redis 支持主从复制和分片功能,可以轻松地扩展数据存储能力。
  • 多种数据结构:Redis 支持多种数据结构,使其可以适用于各种应用程序场景。
  • 持久化:Redis 支持持久化选项,可以将数据保存在磁盘上,以防止数据丢失。
  • 开源免费:Redis 是开源的,可以免费使用。

Redis 的常用数据结构有哪些?

Redis 支持以下数据结构:

  • 字符串
  • 哈希表
  • 列表
  • 集合
  • 有序集合

Redis 是否支持事务?

是的,Redis 支持事务。Redis 事务类似于数据库事务,可以将多个命令作为一个原子操作进行执行。

Redis 支持哪些数据淘汰策略?

  • noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)。
  • allkeys-lru:从所有 key 中使用 LRU 算法进行淘汰(LRU 算法:即最近最少使用算法)。
  • volatile-lru:从设置了过期时间的 key 中使用 LRU 算法进行淘汰。
  • allkeys-random:从所有 key 中随机淘汰数据。
  • volatile-random:从设置了过期时间的 key 中随机淘汰。
  • volatile-ttl:在设置了过期时间的 key 中,淘汰过期时间剩余最短的。当使用
  • volatile-lru、volatile-random、volatile-ttl 这三种策略时,如果没有 key 可以被淘汰,则和 noeviction 一样返回错误。

Redis 如何实现主从复制?

Redis 主从复制是通过在从服务器上启动一个 Redis 进程来实现的,该进程会连接到主服务器并接收主服务器发送的数据更新命令。从服务器也会周期性地向主服务器发送心跳包以保持连接。

Redis 如何实现分布式?

Redis 可以通过以下方式实现分布式:

  • 哈希槽分片:将数据分散到多个节点中,每个节点负责处理一部分数据。
  • 主从复制:每个节点都可以有一个或多个从节点,以提高可用性和可扩展性。
  • Redis Cluster:Redis 3.0 及以上版本支持 Redis Cluster 功能,可以轻松地实现分布式部署。

Redis 的持久化有哪几种方式?

Redis 支持两种持久化方式:

  • RDB 持久化:将 Redis 数据集快照保存到磁盘上。
  • AOF 持久化:将 Redis 的写操作追加到日志文件中,以便在服务器重启时重新构建数据集。

Redis 的主从架构有什么优缺点?

优点:

  • 高可用性:如果主节点失效,从节点可以继续服务。
  • 可扩展性:可以增加从节点来扩展读取能力。
  • 读写分离:主节点负责写操作,从节点负责读操作,可以提高性能。

缺点:

  • 单点故障:如果所有的从节点都失效,那么整个系统就不可用了。
  • 数据延迟:从节点不能立即接收到主节点发送的更新命令,可能会导致数据延迟。

如何设置 Redis 的密码?

可以通过以下方式设置 Redis 的密码:
- 在配置文件中添加 `requirepass` 选项并设置密码。
- 使用 `CONFIG SET` 命令设置密码。

Redis 是否支持集群?

是的,Redis 支持集群部署。Redis Cluster 可以将数据分片到多个节点中,并且可以自动重新分片以适应动态环境。

Redis 的过期键如何删除?

Redis 使用定期和惰性删除两种方法来删除过期键。定期删除会在指定时间间隔内扫描所有键并删除过期键,而惰性删除则是在访问键时检查它是否过期,并在需要时删除过期键。

Redis 如何实现发布/订阅功能?

Redis 的发布/订阅功能使用两个命令 `PUBLISH` 和 `SUBSCRIBE` 来实现。一个客户端可以通过 `SUBSCRIBE` 命令订阅一个或多个频道,另一个客户端可以通过 `PUBLISH` 命令向一个或多个频道发布消息。

Redis 的事务是怎样执行的?

Redis 的事务是通过 `MULTI`、`EXEC` 和 `DISCARD` 命令实现的。在事务中,客户端可以将多个命令缓存起来,然后通过 `EXEC` 命令原子地执行这些命令。

Redis 如何保证数据一致性?

Redis 使用主从复制和 Sentinel 机制来保证数据一致性。在主从复制中,主节点可以将更新命令发送给所有从节点,从而确保数据的一致性。在 Sentinel 中,Sentinel 进程会监视主节点和从节点,并在主节点失效时自动切换到一个可用的从节点。

Redis 的 Lua 脚本是如何执行的?

Redis 使用 Lua 解释器来执行 Lua 脚本。客户端可以使用 `EVAL` 命令将 Lua 脚本发送到 Redis 服务器,服务器会将其编译并执行。

Redis 的事务是否支持回滚?

Redis 的事务不支持回滚。如果在事务执行期间发生错误,那么这些错误不会导致 Redis 回滚已经执行的命令。

Redis 是否支持多个数据库?

是的,Redis 支持多个数据库,默认情况下有16个编号为0-15的数据库。

Redis 的性能瓶颈是什么?

Redis 的性能瓶颈通常在以下方面:
- 网络带宽限制
- 内存瓶颈
- CPU 瓶颈
- I/O 瓶颈

Redis 如何处理缓存穿透问题?

Redis 可以通过以下方式处理缓存穿透问题:
- 使用布隆过滤器:布隆过滤器可以快速确定一个元素是否在集合中,从而减少对后端存储系统的不必要查询。
- 使用缓存空对象:如果查询数据库返回 null 或空结果,可以将这些结果写入缓存中以防止未来的查询。

你可能感兴趣的:(笔记,redis,缓存,数据库)