互联网Java工程师面试题·Redis篇·第一弹

news2024/11/18 13:45:50

目录

1、什么是 Redis?

2、Redis 优势

3、Redis 与其他 key-value 存储有什么不同?

4、Redis 的数据类型?

5、使用 Redis 有哪些好处?

6、Redis 相比 Memcached 有哪些优势?

7、Memcache 与 Redis 的区别都有哪些?

8、Redis 的持久化机制是什么?各自的优缺点?

9、Redis 常见性能问题和解决方案:

10、redis 过期键的删除策略?

11、Redis 的回收策略(淘汰策略)?

12、为什么 edis 需要把所有数据放到内存中?

13、Redis 的同步机制了解么?

14、Redis 是单进程单线程的?

15、一个字符串类型的值能存储最大容量是多少?


1、什么是 Redis?

Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
1)Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2)Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list set zset ,hash 等数据结构的存储。
3)Redis 支持数据的备份,即 master-slave 模式的数据备份。

2、Redis 优势

1)性能极高 – Redis 能读的速度是 110000 /s, 写的速度是 81000 /s
2)丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。
3)原子 – Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI EXEC 指令包起来。
4)丰富的特性 – Redis 还支持 publish/subscribe, 通知 , key 过期等等特性。

3、Redis 与其他 key-value 存储有什么不同?

        Redis 有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis 的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
        Redis 运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样 Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

4Redis 的数据类型?

        Redis 支持五种数据类型: string (字符串), hash (哈希), list (列表),set(集合)及 zsetsorted set :有序集合 )
        我们实际项目中比较常用的是 string hash 如果你是 Redis 中高级用户,还需要加上下面几种数据结构 HyperLogLog Geo Pub/Sub
        如果你说还玩过 Redis Module ,像 BloomFilter RedisSearch Redis-ML ,面试官得眼睛就开始发亮了。

5、使用 Redis 有哪些好处?

1 、速度快,因为数据存在内存中,类似于 HashMap HashMap 的优势就是查找和操作的时间复杂度都是 O1)
2 、支持丰富数据类型,支持 string list set Zset hash
3 、支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
4 、丰富的特性:可用于缓存,消息,按 key 设置过期时间,过期后将会自动删除

6Redis 相比 Memcached 有哪些优势?

1 Memcached 所有的值均是简单的字符串, redis 作为其替代者,支持更为丰富的数据类
2 Redis 的速度比 Memcached 快很
3 Redis 可以持久化其数据

7Memcache Redis 的区别都有哪些?

1 、存储方式 Memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。 Redis 有部份存在硬盘上,这样能保证数据的持久性。
2 、数据支持类型 Memcache 对数据类型支持相对简单。 Redis 有复杂的数据类型。
3 、使用底层模型不同 它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。 Redis 直接自己构建了 VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

8Redis 的持久化机制是什么?各自的优缺点?

Redis 提供两种持久化机制 RDB AOF 机制 :
        RDBRedis DataBase) 持久化方式: 是指用数据集快照的方式半持久化模式 ) 记录 redis 数据库的所有键值对 , 在某个时间点将数据写入一个临时文件,持久化 结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。
优点:
1 、只有一个文件 dump.rdb ,方便持久化。
2 、容灾性好,一个文件可以保存到安全的磁盘。
3 、性能最大化, fork 子进程来完成写操作,让主进程继续处理命令,所以是 IO 最大化。使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis的高性能) 4. 相对于数据集大时,比 AOF 的启动效率更高。
缺点:
数据安全性低。 RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生
故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候 )
       
         AOFAppend-only file) 持久化方式: 是指所有的命令行记录以 redis 命令请
求协议的格式完全持久化存储 ) 保存为 aof 文件。
优点:
1 、数据安全, aof 持久化可以配置 appendfsync 属性,有 always ,每进行一次命令操作就记录到 aof 文件中一次。
2 、通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof工具解决数据一致性问题。
3 AOF 机制的 rewrite 模式。 AOF 文件没被 rewrite 之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的 flushall )
缺点:
1 AOF 文件比 RDB 文件大,且恢复速度慢。
2 、数据集大的时候,比 rdb 启动效率低。

9Redis 常见性能问题和解决方案:

1 Master 最好不要写内存快照,如果 Master 写内存快照, save 命令调度 rdbSave 函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务
2 、如果数据比较重要,某个 Slave 开启 AOF 备份数据,策略设置为每秒同步一
3 、为了主从复制的速度和连接的稳定性, Master Slave 最好在同一个局域网
4 、尽量避免在压力很大的主库上增加从
5 、主从复制不要用图状结构,用单向链表结构更为稳定,即: Master <- Slave1<- Slave2 <- Slave3…这样的结构方便解决单点故障问题,实现 Slave Master的替换。如果 Master 挂了,可以立刻启用 Slave1 Master ,其他不变。

10redis 过期键的删除策略?

1 、定时删除 : 在设置键的过期时间的同时,创建一个定时器 timer). 让定时器在键的过期时间来临时,立即执行对键的删除操作。
2 、惰性删除 : 放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键; 如果没有过期,就返回该键。
3 、定期删除 : 每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。

11Redis 的回收策略(淘汰策略)?

volatile-lru :从已设置过期时间的数据集( server.db [ i ] .expires )中挑选最近最少使用的数据淘汰
volatile-ttl :从已设置过期时间的数据集( server.db [ i ] .expires )中挑选将要过期的数据淘汰
volatile-random :从已设置过期时间的数据集( server.db [ i ] .expires )中任意选择数据淘汰
allkeys-lru :从数据集( server.db [ i ] .dict )中挑选最近最少使用的数据淘汰
allkeys-random :从数据集( server.db [ i ] .dict )中任意选择数据淘汰
no-enviction (驱逐):禁止驱逐数据
注意这里的 6 种机制, volatile allkeys 规定了是对已设置过期时间的数据集淘汰数据还是从全部数据集淘汰数据,后面的 lru ttl 以及 random 是三种不同的淘汰策略,再加上一种 no-enviction 永不回收的策略。
使用策略规则:
1 、如果数据呈现幂律分布,也就是一部分数据访问频率高,一部分数据访问频率低,则使用 allkeys-lru
2 、如果数据呈现平等分布,也就是所有的数据访问频率都相同,则使用allkeys-random

12、为什么 edis 需要把所有数据放到内存中?

答: Redis 为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以 redis 具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘 I/O 速度为严重影响 redis 的性能。在内存越来越便宜的今天, redis 将会越来越受欢迎。如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。

13Redis 的同步机制了解么?

答: Redis 可以使用主从同步,从从同步。第一次同步时,主节点做一次 bgsave ,并同时将后续修改操作记录到内存 buffer ,待完成后将 rdb 文件全量同步到复制节点,复制节点接受完成后将 rdb 镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。

14Redis 是单进程单线程的?

Redis 是单进程单线程的, redis 利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。

15、一个字符串类型的值能存储最大容量是多少?

512M

要想了解更多:

千题千解·Java面试宝典_时光の尘的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1065148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatisPlus(十四)主键策略

说明 MyBatis Plus 集成了多种主键策略&#xff0c;帮助用户快速生成主键。 雪花算法ID&#xff08;默认策略&#xff09;&#xff08;推荐&#xff09;UUID自增ID用户输入ID&#xff08;必须用户每次插入数据时&#xff0c;手动传入ID&#xff09; 雪花算法ID&#xff1a;I…

ModelScope-agent体验

7月在魔搭社区hackathon的时候就了解到了魔搭在做的这件事&#xff0c;前段时间开源了&#xff0c;去体验一 本文写的很浅&#xff0c;没有做深入尝试 一.在线体验 体验地址&#xff1a;https://modelscope.cn/studios/damo/ModelScopeGPT/summary 效果还是挺惊艳的 二.部署…

认识File 类和InputStream, OutputStream

Java中通过file类来对一个文件&#xff08;包括目录&#xff09;进行抽象的描述。并且有File类对象&#xff0c;并不代表真实存在该文件。认识File类&#xff0c;就先了解File类的属性&#xff0c;构造方法&#xff0c;方法。 属性&#xff1a; 修饰符及类型 属性 …

最全最详细最高质量 java 面试题

“ 有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top ” 首发博客地址 面试题手册 面试题手册 学习建议 最全最详细最高质量 java 面试题&#xff0c;建议不要死记硬背&#xff0c;每天过一下&#xf…

el-tabs(标签栏)的入门学习

el-tabs(标签栏)的入门学习 适用场景 与导航栏相似&#xff0c;项目中常见的是点击某个导航栏&#xff0c;主页面&#xff08;el-main&#xff09;模块的最上方会显示我们的标签栏集合&#xff0c;点击不同的导航栏&#xff0c;标签栏会在不断追加&#xff0c;若点击到标签集合…

micro-ROS中对消息的内存管理

文章目录 1.背景2.答案2.1.基本类型及其数组&#xff0c;不需要2.1.序列类型&#xff08;复合类型、复合序列类型&#xff09;&#xff0c;需要 3.内存申请方法3.1.手动申请&#xff08;Manual allocation&#xff09;3.1.工具辅助&#xff08;micro-ROS utilities&#xff09;…

css入门知识点

CSS&#xff08;层叠样式表&#xff09;完整知识点 1. 什么是CSS&#xff1f; <a id"what-is-css"></a> CSS是一种用于描述网页上元素样式和布局的样式表语言。它使开发人员能够控制网页的外观和排版&#xff0c;从而提供更好的用户体验。 2. CSS基础…

基于毫米波雷达的可行驶区域检测(Freespace)

说明 随着具备测高能力、更高角度分辨率、更远检测范围的4D毫米波雷达的出现&#xff0c;很多之前只能用摄像头/激光雷达做的事毫米波雷达也开始涉足(并且可以做得很好)&#xff1a;比如目标识别、SLAM、以及本博文将要讨论的可行驶区域检测(Freespace)。以往(至少是我个人)对于…

一、动态规划简单实例

【题目】 当我们给定一个简单序列[1、5、2、4、3]&#xff0c;现在要求输出该序列中&#xff0c;最大子序列的长度&#xff0c;子序列要求从小到大&#xff0c;元素下标可以跳跃&#xff0c;例如子序列[1、2、3]。 【实现方式(暴力实现)】 1、先定义一个函数L(nums,i)&#x…

C# 给某个方法设定执行超时时间

C# 给某个方法设定执行超时时间在某些情况下(例如通过网络访问数据)&#xff0c;常常不希望程序卡住而占用太多时间以至于造成界面假死。 在这时、我们可以通过Thread、Thread Invoke&#xff08;UI&#xff09;或者是 delegate.BeginInvoke 来避免界面假死&#xff0c; 但是…

RocketMQ 基于时间轮算法实现指定时间点的定时消息原理解析

在 RocketMQ 4.x 版本&#xff0c;使用延时消息来实现消息的定时消费。延时消息可以一定程度上实现定时发送&#xff0c;但是有一些局限。 RocketMQ 新版本基于时间轮算法引入了定时消息&#xff0c;目前&#xff0c;精确到秒级的定时消息实现的 pr 已经提交到社区&#xff0c…

unity中绑定动画的行为系统

主要代码逻辑是创建一个action队列,当动画播放结束时就移除队头,执行后面的事件 public class Enemy : MonoBehaviour {public event Action E_AnimatorFin;//当动画播放完毕时public Action DefaultAction;//默认事件public Dictionary<Action, string> EventAnimator n…

数据科学最佳实践:Kedro 的工程化解决方案 | 开源日报 No.47

leonardomso/33-js-concepts Stars: 58.4k License: MIT 这个项目是一个帮助开发者掌握 JavaScript 概念的资源库。该项目基于 Stephen Curtis 撰写的一篇文章&#xff0c;包含了对 33 个重要 JavaScript 概念全面深入地讲解&#xff0c;并被 GitHub 评为 2018 年最佳开源项目…

Python Random模块详解

Random模块详解 随机数 random模块 randint(a, b) 返回[a, b]之间的整数randrange ([start,] stop [,step]) 从指定范围内&#xff0c;按指定基数递增的集合中获取一个随机数&#xff0c;基数 缺省值为1。random.randrange(1,7,2)choice(seq) 从非空序列的元素中随机挑选一个…

驱动器类产品的接口EMC拓扑方案

驱动器类产品的接口EMC拓扑方案 1. 概述 本文以高压伺服驱动器和变频器类产品为例&#xff0c;对常用端口滤波拓扑方案进行总结&#xff0c;后续根据不同的应用场景可进行适当删减&#xff0c;希望对大家有帮助。 2. 驱动器验证等级 本文推荐拓扑的实验结果&#xff0c;满足…

Ps:选择并遮住

选择并遮住 Select and Mask主要用来提高选区边缘的品质&#xff0c;尤其在毛发等复杂边缘的抠图上发挥强大的作用。 Ps菜单&#xff1a;选择/选择并遮住 Select and Mask 快捷键&#xff1a;Ctrl Alt R 在所有选区工具的工具选项栏上以及图层蒙版的属性面板中都可以看到“选…

NAT+ACL+mstp小综合

三、实验一相关知识点 1&#xff0c;实验&#xff1a;NAT 综合实验 2&#xff0c;拓扑&#xff1a; 3&#xff0c;需求: 1&#xff09;&#xff0c;实现VLAN20 的除了20这台主机以外所有主机上网访问外网 2&#xff09;&#xff0c;实现VLAN30 的主机为奇数电脑上网 3&#…

详解C语言—预处理

目录 1、预处理 (1)预定义符号介绍 (2)预处理指令 #define #define 定义标识符&#xff1a; #define 定义宏&#xff1a; #define 替换规则 (3)预处理操作符# (4)预处理操作符## (5)带副作用的宏参数 (6)宏和函数对比 2、命名约定 3、预处理指令 #undef 4、命令行定…

用 Pytorch 自己构建一个Transformer

一、说明 用pytorch自己构建一个transformer并不是难事,本篇使用pytorch随机生成五千个32位数的词向量做为源语言词表,再生成五千个32位数的词向量做为目标语言词表,让它们模拟翻译过程,transformer全部用pytorch实现,具备一定实战意义。 二、论文和概要 …

mac连接easyconnnect显示“本地环境出现异常”

mac连接easyconnnect显示“本地环境出现异常” 解决方法&#xff1a; 终端下输入&#xff1a;vim ~/.zprofile文件内加入如下内容&#xff0c;如下图&#xff1a; ####解决连接easyconnnect显示“本地环境出现异常问题 function EC_start(){/Applications/EasyConnect.app/Co…