【Redis】高频面试题

这篇具有很好参考价值的文章主要介绍了【Redis】高频面试题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提供五种常见的数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)

1、为什么用Redis作为MySQL的缓存

Redis具有高性能高并发两种特性

2、Redis为什么快

1、Redis 的大部分操作都在内存中完成,并且采用了高效的数据结构
2、采用单线程模型可以避免了多线程之间的竞争,省去了多线程切换带来的时间和性能上的开销,而且也不会导致死锁问题
3、Redis 采用了 I/O 多路复用机制处理大量的客户端 Socket 请求,IO 多路复用机制是指一个线程处理多个 IO 流,就是我们经常听到的 select/epoll 机制

3、Redis主从复制

将从前的一台 Redis 服务器,同步数据到多台从 Redis 服务器上,即一主多从的模式,且主从服务器之间采用的是「读写分离」的方式。
主服务器可以进行读写操作,当发生写操作时自动将写操作同步给从服务器,而从服务器一般是只读,并接受主服务器同步过来写操作命令,然后执行这条命令。
主从服务器之间的命令复制是异步进行的

4、Redis持久化

Redis 的读写操作都是在内存中,所以 Redis 性能才会高,但是当 Redis 重启后,内存中的数据就会丢失,那为了保证内存中的数据不会丢失,Redis 实现了数据持久化的机制,这个机制会把数据存储到磁盘,这样在 Redis 重启就能够从磁盘中恢复原有的数据。

AOF 日志:每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里
RDB 快照:将某一时刻的内存数据,以二进制的方式写入磁盘
混合持久化方式:Redis 4.0 新增的方式,集成了 AOF 和 RBD 的优点

AOF日志/RDB快照是如何实现配合完成持久化

1、AOF持久化
AOF 持久化通过记录 Redis 服务器收到的写命令来记录数据变更。
每个写命令都会以文本方式追加到 AOF 文件末尾,保证了数据的持久化。
当 Redis 重启时,会通过重新执行 AOF 文件中的命令来还原数据状态。

2、RDB持久化
RDB 持久化通过生成一个二进制的 RDB 快照文件来保存 Redis 在某个时间点的数据快照。
RDB 快照是 Redis 数据在某个时刻的完整备份,通常用于全量恢复数据。
可以通过配置定时保存或手动触发生成 RDB 快照文件。

5、Redis和MySQL不一致如何解决

1、定期同步数据:定期将 MySQL 中的数据同步到 Redis 中,确保数据的一致性。可以通过编写脚本或使用定时任务来实现数据同步的操作。

2、使用消息队列:将 MySQL 的数据变更通过消息队列发送到 Redis,然后在 Redis 中进行相应的更新操作,确保数据的同步性。这种方式可以减少直接对数据库的读写操作,提高系统的性能。

3、采用双写模式:对于写操作,先更新 MySQL,然后再更新 Redis,确保两者数据的一致性。这种方式虽然会增加写操作的时间,但可以保证数据的准确性。

4、实现数据同步机制:可以通过监听 MySQL 数据库的 binlog 或者使用类似 Canal 这样的工具来捕获数据变更,然后同步到 Redis 中,保持数据的一致性。

5、处理数据冲突:如果出现数据不一致的情况,可以编写相应的逻辑来处理数据冲突,例如选择某个数据源作为主数据源,或者进行数据合并等操作。

6、Redis缓存【雪崩】【击穿】【穿透】

1、缓存雪崩:大量数据同时过期、redis故障

2、缓存击穿:热点数据缓存过期

3、缓存穿透:数据既不在缓存,也不知数据库

7、Redis过期删除策略和内存淘汰策略

1、过期删除策略:对 key 设置过期时间

# 设置过期时间
set key1 20 ex 100    # 秒
setex key1 100 20     # 秒
set key1 20 px 100    # 毫秒

# 查看过期时间还剩多少
ttl key1

# 取消过期时间
persist key1
# 使用完 persist 命令之后,查下 key1 的存活时间结果是 -1,表明 key1 永不过期 
> ttl key1 
(integer) -1

2、内存淘汰策略:当 Redis 的运行内存已经超过 Redis 设置的最大内存之后,则会使用内存淘汰策略删除符合条件的 key,以此来保障 Redis 高效的运行

使用 config get maxmemory-policy 命令,来查看当前 Redis 的内存淘汰策略

通过“config set maxmemory-policy <策略>”命令设置。它的优点是设置之后立即生效,不需要重启 Redis 服务,缺点是重启 Redis 之后,设置就会失效。

通过修改 Redis 配置文件修改,设置“maxmemory-policy <策略>”,它的优点是重启 Redis 服务后配置不会丢失,缺点是必须重启 Redis 服务,设置才能生效。

8、Redis大Key问题

存储在 Redis 中占用大量内存空间的 Key
内存占用过高、影响性能、内存碎片问题

【解决】

1、分布式存储:将大 Key 拆分为多个小 Key,并分布存储在不同的 Redis 实例或节点中,避免单个 Key 过大造成问题。

2、数据分页:对于大数据量的 Key,可以采用分页查询的方式,按需加载数据,而不是一次性获取所有数据。

3、合理设计数据结构:根据业务需求合理设计数据结构,避免存储过大的数据对象,尽量将数据拆分为多个小 Key 存储。

4、定时清理:定期清理不再需要的大 Key,释放内存空间,避免内存占用过高。

5、监控和优化:通过监控 Redis 实例的内存占用情况,及时发现并优化存在大 Key 的情况,保持 Redis 实例的健康运行。

9、布隆过滤器是?底层原理是?

布隆过滤器(Bloom Filter)是一种空间效率高、适合大规模数据集的概率型数据结构,用于快速判断一个元素是否存在于一个集合中。它可以有效地减少对存储系统的查询压力,特别适用于需要快速判断某个元素是否可能存在于一个大型集合中的场景。

布隆过滤器的底层原理主要基于以下两个关键组件:

  1. 位数组(Bit Array):布隆过滤器使用一个足够长的二进制位数组来存储数据。数组的每一位都初始化为0,当向过滤器中添加元素时,会通过一系列哈希函数计算出元素在数组中的位置,并将这些位置对应的位设置为1。
  2. 哈希函数(Hash Functions):布隆过滤器使用多个哈希函数来计算元素在位数组中的位置。每个哈希函数都会将元素映射到位数组中的一个特定位置。当元素被添加到过滤器中时,所有哈希函数都会计算出对应的位置,并将这些位置的位设置为1。同样地,当查询一个元素时,也会使用相同的哈希函数来计算元素在位数组中的位置,并检查这些位置的位是否都为1。如果所有位置的位都为1,则认为元素可能存在于集合中;否则,认为元素一定不存在于集合中。

10、Redis实现分布式锁

Redis通过使用SETNX(SET if Not eXists)指令来实现分布式锁,客户端尝试在Redis中设置指定的键值对,如果该键不存在则设置成功并获得锁,否则设置失败表示锁已被其他客户端获取,这种方式能够确保在分布式环境下实现原子性的加锁操作。

具体略文章来源地址https://www.toymoban.com/news/detail-843751.html

到了这里,关于【Redis】高频面试题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 13、Redis高频面试题

    我们项目中之所以选择Redis,主要是因为Redis有下面这些优点: 操作速度快:Redis的数据都保存在内存中,相比于其它硬盘类的存储,速度要快很多 数据类型丰富:Redis支持 string,list,set,Zset,hash 等数据类型,基本满足我们开发中的各种使用场景 使用场景丰富:Redis可用于

    2024年02月02日
    浏览(31)
  • Redis高频面试题

    2023年04月24日
    浏览(41)
  • Redis为什么快?蕞全面试回答,带解析

    面试原题:Redis为什么这么快?(网易一面 · 2023) 题目来自牛客网 参考答案 后面有 详细答案解析,帮助更快记忆~ 参考答案共496字符,阅读约需1分2秒;全文共4867字符,阅读约需6分钟 这个问题实际上考察的是对于Redis的架构了解多少,我们可以从多个角度来进行回答。

    2024年02月12日
    浏览(49)
  • Redis 高频面试题 2023 最新版

    是什么 缓存穿透就是根据某条件查询一个数据,首先进入到redis中进行查询,redis中没有该数据时进入到数据库中查询,但是在数据库中也没有查到该数据,这个时候数据库直接将没有查到数据这一结果返回,而没有将它缓存到redis中,导致每次按照该条件查询都会进入到数据

    2024年02月16日
    浏览(59)
  • 126、高频Redis面试题:如何保证Redis和数据库数据一致性

    问题:如果数据库中的某条数据放入缓存后,又马上被更新了,那我们应该如何更新缓存 缺点: 如果先更新缓存成功,在更新数据库的时候失败,这时候会导致数据不一致;缓存的作用是不是临时将我们数据保存在内存,便于提高查询速度;但是如果某条数据在数据库中都

    2024年02月13日
    浏览(40)
  • Redis数据结构:高频面试题及解析

    Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能

    2024年02月08日
    浏览(62)
  • 互联网大厂技术-Redis-集群模型、架构原理、难点应用场景、高频面试问题详解

    目录 一、Redis集群模型 1.1、主从模式 1.1.1 主从模式优缺点 1.2、哨兵模式 1.2.1 哨兵模式的作用: 1.2.2 哨兵实现原理 1.2.3 主观下线和客观下线 1.2.4 哨兵模式优缺点 1.3、各大厂的Redis集群方案 1.3.1 客户端分片 1.3.2 代理分片 Twemproxy的优点: Twemproxy的不足: 1.3.3 Codis 1.4、Redis

    2024年02月16日
    浏览(80)
  • 计算机网络面试高频:输入域名会发生那些操作,开放性回答

    更多大厂面试内容可见 - http://11come.cn 当在浏览器中输入 www.baidu.com 并按下回车键时,会触发一系列复杂的网络过程,包括DNS解析、TCP连接建立、HTTP请求和响应等。以下是这个过程中发生的详细步骤,分层次地说明每一个环节, 域名 www.baidu.com 其实最后还有一个点,即 www.

    2024年04月28日
    浏览(40)
  • Redis 高频数据类型使用详解

    目录 一、前言 二、Redis常用数据类型 2.1 常见的数据类型 三、String 类型

    2024年02月14日
    浏览(46)
  • 大厂整理的23年前端工程师面试手册,高频面试题终结篇,github上标星16k!

    前端开发所需掌握知识点概要: HTMLCSS:浏览器内核、渲染原理、依赖管理、兼容性、CSS语法、层次关系,常用属性、布局、选择器、权重、CSS盒模型、Hack、CSS预处理器、CSS3动画 JavaScript: 数据类型、运算、对象、Function、继承、闭包、作用域、事件、Prototype、RegExp、JSON、

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包