中间件Redis面试题

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

谈谈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数据节点,然后进行故障自动转移,实现高可用。

下面是一些常见的Redis面试题及其回答: 1. Redis是什么?它的特点是什么? Redis是一个开源的内存数据存储系统,它可以用作数据库、缓存和消息中间件Redis的特点包括高性能、支持多种数据结构(如字符串、哈希、列表、集合、有序集合等)、数据持久化、支持分布式等。 2. Redis常见的数据结构有哪些? Redis支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。 3. Redis的持久化方式有哪些? Redis提供了两种持久化方式:RDB(Redis DataBase)和AOF(Append Only File)。RDB是通过将内存中的数据定期保存到磁盘上的快照文件,而AOF则是通过将写操作追加到文件末尾来记录数据库状态的。 4. Redis的主从复制是什么?有什么作用? Redis的主从复制是指将一个Redis服务器的数据复制到其他服务器上,其中一个服务器作为主服务器(Master),其他服务器作为从服务器(Slave)。主从复制可以实现数据的备份、读写分离、故障恢复等功能。 5. Redis如何实现分布式? Redis可以通过分片(Sharding)和复制(Replication)来实现分布式。分片将数据分散存储在多个Redis节点上,复制则将数据复制到多个节点上以提高数据的可用性和读取性能。 这些问题只是Redis面试中的一部分,希望能帮助到你准备面试。在面试过程中,最重要的是理解Redis的基本概念和特点,并能够结合实际项目经验进行回答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值