📅  最后修改于: 2023-12-03 14:47:03.092000             🧑  作者: Mango
Redis面试问题
Redis (Remote Dictionary Server) 是一种基于内存且开源的 key-value 数据库管理系统。它提供了一个可以持久化的键值存储,可用于缓存、消息队列、任务调度等多种场景。在 Redis 的面试中,我们可能会被问到以下问题:
Redis 的数据结构有哪些?
Redis 支持五种数据结构:
- 字符串 (string)
- 列表 (list)
- 集合 (set)
- 有序集合 (sorted set)
- 哈希 (hash)
Redis 中的哪些操作是原子性的?
Redis 支持很多原子操作,例如:
- SET
- GET
- INCR
- DECR
- LPUSH
- RPUSH
- LPOP
- RPOP
- SADD
- SREM
- ZADD
- ZREM
- HSET
- HGET
- HMSET
- HMGET
- ...
原子操作保证了多个客户端同时访问 Redis 时,不会出现竞态条件。
Redis 的数据淘汰策略有哪些?
Redis 可以设置数据的过期时间,过期时间到了则数据被删除。在内存不足时,Redis 还提供了以下数据淘汰策略:
- volatile-lru:从设置了过期时间的数据集中,删除最近最少使用 (Least Recently Used) 的数据。
- volatile-ttl:从设置了过期时间的数据集中,删除 TTL (Time To Live) 最短的数据。
- volatile-random:从设置了过期时间的数据集中,随机删除一些数据。
- allkeys-lru:从所有数据集中,删除最近最少使用的数据。
- allkeys-random:从所有数据集中,随机删除一些数据。
Redis 的持久化方式有哪些?
Redis 可以将数据保存到硬盘中,有两种方式:
- RDB (Redis Database):快照备份,将 Redis 在某个时间点上的数据保存到硬盘中,以后每次保存时会覆盖上一次的备份。
- AOF (Append Only File):追加日志备份,将 Redis 的操作记录追加到文件末尾,以后每次启动时会重新执行这些操作。
Redis 的主从复制是什么?
Redis 的主从复制 (Master-Slave Replication) 是一种数据备份机制。我们可以将主服务器上的数据复制到从服务器上,这样从服务器就可以作为主服务器的备份,在主服务器出现故障时立即接替它的工作。
Redis 的主从复制是异步的,主服务器将自己的变更记录到内存中的复制缓冲区 (Replication Buffer),并异步地将这些变更发送给所有连接的从服务器。
Redis 的主从复制有哪些问题?
Redis 的主从复制存在主从同步延迟、数据一致性等问题,例如:
- 主从同步延迟:主服务器不断地处理写请求,从服务器可能会因为性能瓶颈或带宽限制,无法及时地接收到主服务器的变更。在主从同步延迟的情况下,从服务器上的数据会滞后于主服务器。
- 数据一致性:由于主从同步延迟的影响,从服务器上的数据可能会和主服务器上的数据不一致。这通常需要进行手动修复。
Redis 的集群是什么?
Redis 的集群 (Cluster) 是一种分布式数据存储方案,可以让多个 Redis 实例作为一个整体对外提供服务。多个 Redis 实例之间通过消息总线 (Message Bus) 进行通信,实现数据的分片存储和故障转移等功能。
Redis 的主从复制和集群有什么区别?
Redis 的主从复制和集群都是 Redis 分布式架构的解决方案,但它们之间有以下区别:
- 架构模式不同:主从复制是一种主-从 (Master-Slave) 模式,一个主节点可以带多个从节点。集群是一种多节点互联的模式,集群中每个节点都是对称的,可以同时提供读写服务。
- 数据分布方式不同:主从复制的数据分片方式是垂直切分,即将数据库按照表格划分为多个集合,每个集合由一个 Redis 主节点和多个从节点组成。集群采用了哈希槽 (Hash Slot) 的方式进行数据分片,将数据划分为多个槽,每个槽由集群中的一个节点负责处理。
- 扩展性不同:主从复制的扩展性受限于主节点的性能,当一个主节点无法满足读写请求时,只能通过增加从节点数量来提高性能。而集群的扩展性更强,只需要增加节点数量就可以提高整个系统的性能。