Redis面试题, redis 和 memcached 有什么区别?
Redis面试题, redis 和 memcached 有什么区别?
QA
Step 1
Q:: Redis 和 Memcached 有什么区别?
A:: Redis 和 Memcached 都是常用的内存缓存系统,但它们之间有一些关键区别:
1.
数据类型:Redis 支持更丰富的数据结构,如字符串、列表、集合、有序集合、哈希等,而 Memcached 仅支持字符串类型。
2.
持久化:Redis 支持数据持久化,可以将数据保存到磁盘上,而 Memcached 是一个纯内存存储系统,数据在服务器重启或崩溃时会丢失。
3.
分布式:Redis 原生支持主从复制、哨兵模式、集群模式,而 Memcached 需要额外的工具(如一致性哈希)来实现分布式。
4.
内存管理:Redis 可以将不常用的键自动移到 swap(如果启用),并且它有一个 LRU(最近最少使用)策略,而 Memcached 的内存管理更加简单,使用的是一个 slab 分配机制。
5.
性能:在简单的键值对存储中,Memcached 通常性能较高,因为它更加轻量,但在复杂操作和需要持久化的场景下,Redis 更具优势。
Step 2
Q:: Redis 的持久化机制有哪些?
A:: Redis 提供了两种持久化机制:
1.
RDB(Redis Database):通过创建数据快照将数据库状态保存到磁盘中。RDB 适合定时备份,因为它会在指定的时间间隔内保存快照,这样的好处是 Redis 可以在重启后快速恢复数据。
2.
AOF(Append Only File):通过将每一个写操作记录下来并追加到日志文件中,实现持久化。AOF 适合需要更高数据可靠性的场景,因为它能记录所有修改操作,即使 Redis 异常退出,也可以通过 AOF 文件恢复数据。AOF 文件在达到一定大小时可以通过重写机制进行压缩。
Step 3
Q:: Redis 如何实现高可用?
A:: Redis 通过以下几种方式实现高可用:
1.
主从复制:Redis 可以设置一个主服务器和多个从服务器,从服务器可以自动同步主服务器的数据,达到数据冗余和读取分流的效果。
2.
哨兵模式:哨兵(Sentinel)是用于监控 Redis 服务器集群的守护进程,当主服务器宕机时,它会自动选举新的主服务器,并通知其他从服务器进行数据切换,确保服务的高可用性。
3.
Redis Cluster:Redis 集群允许将数据分片存储在不同的节点上,分布式存储和访问数据,同时也实现了负载均衡和自动故障转移。
Step 4
Q:: 什么是 Redis 缓存穿透?如何解决?
A:: 缓存穿透是指大量请求查询一个数据库中根本不存在的数据,而这些请求绕过了缓存直接打到数据库上,造成数据库压力过大。通常是因为用户请求的 key 在缓存和数据库中都不存在,且不加以限制。
解决办法包括:
1.
缓存空结果:对于查询结果为空的请求,也缓存一个空结果,并设置一个合理的过期时间,以避免持续查询数据库。
2.
布隆过滤器:在访问 Redis 之前,使用布隆过滤器判断该 key 是否存在。布隆过滤器可以有效地判断某个元素是否在集合中,从而避免无效查询。
3.
参数校验:对输入参数进行校验,过滤掉明显无效的请求。