中间件Redis面试题

本文详细介绍了Redis的内存数据库特性,包括其基础数据结构如String、List、Hash和Set的应用场景,全局指令以及过期数据的删除策略。讨论了缓存问题及解决方案,如缓存穿透、击穿和雪崩,以及Redis的两种持久化方式RDB和AOF。最后探讨了Redis的系统架构设计和主从集群同步机制,以及应对主节点故障的哨兵模式。

谈谈Redis

Redis是一个基于内存的非关系型数据库,以键值对的形式存储数据,可以用作分布式缓存、消息队列、分布式锁,也可以搭建高可用集群。

Redis的基础数据有哪些

  • String 场景:存储普通的字符串、不经常变动的对象、计数器、分布式锁。
  • List 场景: 有序可重复的,可作为消息队列,适合存储一对多关系的数据。
  • Hash 场景:能够很好的处理对象属性映射关系,适合存储经常变动的信息。
  • Set 场景: 无需不可重复的,可用作并集、交集、差集,朋友圈点赞等。
  • ZSet 场景: 可以多存储一个分值用作排序,适用于排行榜。

Redis的全局指令

  • keys (查看所有的键)
  • del (删除键值对)
  • flushall (删除所有信息)
  • expired (设置过期时间)
  • save (RDB形式持久化保存)
  • type (查看键值对类型)

Redis中过期数据的删除策略

惰性删除

惰性删除指的是,不会主动检查数据是否过期,会在每次访问的时候查看数据是否过期,若过期则删除,那么如果过期数据很久都没有被访问,则会一直存在于内存中,是一个问题。

 定时删除

定期删除指的是,每隔一段时间都会主动检查部分数据是否过期,若过期则删除。

缓存中都有遇到什么问题,都如何解决?

缓存穿透

        缓存穿透指的是,缓存中没有改请求数据的缓存,从而让请求直接打到数据库中,而数据库中也不存在改数据也无从缓存,如果有大量的这类请求,会给数据库造成极大压力甚至冲垮。

缓存穿透-解决方案
  • 对参数校验,拦截不合法的请求,比如商品id为负数,购买数量为为负数。
  • 分布式锁缓存null,根据业务设置过期时间。
  • 布隆过滤器。
缓存击穿

       缓存击穿指的是,某一热点数据在某一时刻失效,此时有大量并发请求进入数据库,对数据库造成极大压力甚至冲垮。

缓存击穿-解决方案
  • 热点数据不过期。
  • 分布式锁查询数据并做缓存。
  • 循环依赖。
缓存雪崩

        缓存雪崩指的是,某一时刻有大量的缓存数据同时失效,导致有大量并发请求进入数据库造成冲击。

缓存雪崩-解决方案
  • 设置随机过期时间。
  • 分布式锁查询数据并做缓存。
  • 热电数据不过期。

Redis的持久化方式你了解吗?

持久化方式分为RDB、AOF

RDB具体说说

     RDB是以一种快照(二进制)的形式存储数据,比如每5秒或者每1000条数据进行一次持久化缓存。优点:可以很便捷的根据时间查询持久化的数据。缺点:如果服务突然关闭,最多会损失4.59秒的数据。

AOF具体说说

       AOF存储方式会将每次执行的写命令追加到一个文件夹的后面,服务重启时会自动读取该文件夹中的命令并且执行来恢复数据,如果不小心执行了flushall,在这种持久化方式下,只需要关闭服务,找到对应文件将末尾的fluashall命令删除重启启动服务即可。优点:数据不易丢失。缺点:更占用空间。

Redis常用的系统架构设计

  • 一主一丛
  • 一主多从
  • 一主多从从

部署集群时,Redis的数据同步方式

Redis同步方式分为全量同步、增量同步。

全量同步

全量同步发生在Slave第一次连接Master时,同步过程:

  1. Slave第一次连接Master。
  2. Master执行bgsave,对数据持久化。
  3. 主节点将.rdb文件发送给从节点。
  4. 从节点根据.rdb文件进行恢复数据。

可能存在的问题:

  • 当Master生成.rdb文件发送给Slave、Slave恢复数据这段时间,Master有可能还在接受新的请求,那么这可能导致主节点从节点数据不一致。
  • 如果.rdb文件过大,同步到Slave时,因网络阻塞或中断,还可能导致部分数据丢失。
增量同步

增量同步出现了中断或着全量同步之后,Master又有了写操作,此时会触发增量同步,同步过程:

  1. 从节点发送同步请求。
  2. 主节点基于数据同步请求写指令同步到从节点。
  3. 从节点执行指令将数据进行同步。

Redis主从架构可能遇到的问题

如果主节点故障的话,就需要手动的将从节点升级为主节点,解决方案:哨兵模式,监控Redis数据节点,然后进行故障自动转移,实现高可用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值