前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >区区5道题,我就跪了……

区区5道题,我就跪了……

原创
作者头像
夕梦
修改于 2021-06-08 02:04:36
修改于 2021-06-08 02:04:36
3940
举报
文章被收录于专栏:每日面试每日面试

1、Redis在你们项目中是怎么用的?

(1)门户系统中的首页内容信息的展示。(商品类目、广告、热门商品等信息)门户系统的首页是用户访问量最大的,而且这些数据一般不会经常修改,因此为了提高用户的体验,我们选择将这些内容放在缓存中; (2)单点登录系统中也用到了redis。因为我们是分布式系统,存在session之间的共享问题,因此在做单点登录的时候,我们利用redis来模拟了session的共享,来存储用户的信息,实现不同系统的session共享; (3)我们项目中同时也将购物车的信息设计存储在redis中,购物车在数据库中没有对应的表,用户登录之后将商品添加到购物车后存储到redis中,key是用户id,value是购物车对象; (4)因为针对评论这块,我们需要一个商品对应多个用户评论,并且按照时间顺序显示评论,为了提高查询效率,因此我们选择了redis的list类型将商品评论放在缓存中; (5)在统计模块中,我们有个功能是做商品销售的排行榜,因此选择redis的zset结构来实现; 还有一些其他的应用场景,主要就是用来作为缓存使用。

2、对redis的持久化了解不?

Redis是内存型数据库,同时它也可以持久化到硬盘中,redis的持久化方式有两种: (1)RDB(半持久化方式): 按照配置不定期的通过异步的方式、快照的形式直接把内存中的数据持久化到磁盘的一个dump.rdb文件(二进制文件)中; 这种方式是redis默认的持久化方式,它在配置文件(redis.conf)中的格式是:save N M,表示的是在N秒之内发生M次修改,则redis抓快照到磁盘中。

原理:当redis需要持久化的时候,redis会fork一个子进程,这个子进程会将数据写到一个临时文件中;当子进程完成写临时文件后,会将原来的.rdb文件替换掉,这样的好处是写时拷贝技术(copy-on-write),可以参考下面的流程图;

优点:只包含一个文件,对于文件备份、灾难恢复而言,比较实用。因为我们可以轻松的将一个单独的文件转移到其他存储媒介上;性能最大化,因为对于这种半持久化方式,使用的是写时拷贝技术,可以极大的避免服务进程执行IO操作;想对于AOF来说,如果数据集很大,RDB的启动效率就会很高。

缺点:如果想保证数据的高可用(最大限度的包装数据丢失),那么RDB这种半持久化方式不是一个很好的选择,因为系统一旦在持久化策略之前出现宕机现象,此前没有来得及持久化的数据将会产生丢失;rdb是通过fork进程来协助完成持久化的,因此当数据集较大的时候,我们就需要等待服务器停止几百毫秒甚至一秒。

(2)AOF(全持久化的方式)     把每一次数据变化都通过write()函数将你所执行的命令追加到一个appendonly.aof文件里面;     Redis默认是不支持这种全持久化方式的,需要将no改成yes

实现文件刷新的三种方式:

no:不会自动同步到磁盘上,需要依靠OS(操作系统)进行刷新,效率快,但是安全性就比较差; always:每提交一个命令都调用fsync刷新到aof文件,非常慢,但是安全; everysec:每秒钟都调用fsync刷新到aof文件中,很快,但是可能丢失一秒内的数据,推荐使用,兼顾了速度和安全。

原理:redis需要持久化的时候,fork出一个子进程,子进程根据内存中的数据库快照,往临时文件中写入重建数据库状态的命令;父进程会继续处理客户端的请求,除了把写命令写到原来的aof中,同时把收到的写命令缓存起来,这样包装如果子进程重写失败的话不会出问题;当子进程把快照内容以命令方式写入临时文件中后,子进程会发送信号给父进程,父进程会把缓存的写命令写入到临时文件中;接下来父进程可以使用临时的aof文件替换原来的aof文件,并重命名,后面收到的写命令也开始往新的aof文件中追加。下面的图为最简单的方式,其实也是利用写时复制原则。 优点:     数据安全性高;     该机制对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机问题,也不会破坏日志文件中已经存在的内容;     如果日志文件过大,可以采用rewriter机制。

缺点: 对于数量相同的数据集来说,aof文件通常要比rdb文件大,因此rdb在恢复大数据集时的速度大于AOF; 根据同步策略的不同,AOF在运行效率上往往慢于RDB,每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样高效; 针对以上两种不同的持久化方式,如果缓存数据安全性要求比较高的话,用aof这种持久化方式(比如项目二中的购物车);如果对于大数据集要求效率高的话,就可以使用默认的。而且这两种持久化方式可以同时使用。 

3、做过redis的集群吗?你们做集群的时候搭建了几台,都是怎么搭建的?

针对这类问题,我们首先考虑的是为什么要搭建集群?(这个需要针对我们的项目来说)

Redis的数据是存放在内存中的,这就意味着redis不适合存储大数据,大数据存储一般公司常用hadoop中的Hbase或者MogoDB。因此redis主要用来处理高并发的,用我们的项目二来说,电商项目如果并发大的话,一台单独的redis是不能足够支持我们的并发,这就需要我们扩展多台设备协同合作,即用到集群。

Redis搭建集群的方式有多种,例如:客户端分片、Twemproxy、Codis等,但是redis3.0之后就支持redis-cluster集群,这种方式采用的是无中心结构,每个节点保存数据和整个集群的状态,每个节点都和其他所有节点连接。我们项目中也使用的是redis-cluster集群。

集群这块直接说是公司运维搭建的,小公司的话也有可能由我们自己搭建,开发环境我们也可以直接用单机版的。但是学员可以了解一下redis的集群版。搭建redis集群的时候,对于用到多少台服务器,每家公司都不一样,大家针对自己项目的大小去衡量。举个简单的例子: 我们项目中redis集群主要搭建了6台,3主(为了保证redis的投票机制)3从(高可用),每个主服务器都有一个从服务器,作为备份机。

4、Throw和throws的区别。

位置不同 1. throws 用在函数上,后面跟的是异常类,可以跟多个;而 throw 用在函数内,后面跟的 是异常对象。 

功能不同: 1. throws 用来声明异常,让调用者只知道该功能可能出现的问题,可以给出预先的处理方 式;throw抛出具体的问题对象,执行到throw,功能就已经结束了,跳转到调用者,并 将具体的问题对象抛给调用者。也就是说 throw 语句独立存在时,下面不要定义其他语 句,因为执行不到。  

2. throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw 则是抛出了异常, 执行throw则一定抛出了某种异常对象。  3.两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异 常,真正的处理异常由函数的上层调用处理。

5、服务熔断机制可以讲一下吗?

微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个 系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不 可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。 

熔断器的原理很简单,如同电力过载保护器。它可以实现快速失败,如果它在一段时间内侦测到 许多类似的错误,会强迫其以后的多个调用快速失败,不再访问远程服务器,从而防止应用程序 不断地尝试执行可能会失败的操作,使得应用程序继续执行而不用等待修正错误,或者浪费 CPU 时间去等到长时间的超时产生。熔断器也可以使应用程序能够诊断错误是否已经修正,如果已经 修正,应用程序会再次尝试调用操作。

Hystrix 断路器机制

断路器很好理解, 当Hystrix Command请求后端服务失败数量超过一定比例(默认50%), 断路器会 切换到开路状态(Open). 这时所有请求会直接失败而不会发送到后端服务. 断路器保持在开路状态 一段时间后(默认 5 秒), 自动切换到半开路状态(HALF-OPEN). 这时会判断下一次请求的返回情况, 如果请求成功, 断路器切回闭路状态(CLOSED), 否则重新切换到开路状态(OPEN). Hystrix的断路器 就像我们家庭电路中的保险丝, 一旦后端服务不可用, 断路器会直接切断请求链, 避免发送大量无效 请求影响系统吞吐量, 并且断路器有自我检测并恢复的能力。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Redis数据结构存储系统:第三章:Redis在项目中如何使用?
String类型是最简单的类型,一个key对应一个value,项目中主要利用单点登录中的token用string类型来存储;
Java廖志伟
2022/09/28
4720
Redis数据结构存储系统:第三章:Redis在项目中如何使用?
【Redis】Redis两种持久化RDB和AOF的区别
Redis持久化备份数据的方式有两种:RDB(Redis DataBase) 、 AOF(Append Only File).
瑞新
2020/12/07
3890
【Redis】Redis两种持久化RDB和AOF的区别
浅谈小白如何读懂Redis高速缓存与持久化并存及主从高可用集群
一、简介 Redis是一个基于键值(K-V)的高速缓存软件,和他具有相同功能的软件有memcached,但其支持更为复杂的数据结构,例如:List,set,sorted set,同时redis具有持久性功能。redis究竟是什么?对于不同的应用场合,对redis的理解也不相同,如下有三种不同的理解。 ①key value store(键值存储),是一个以键值形式存储的数据库,用来作为唯一的存储系统,同时借助于sentinel实现一定意义上的高可用。 ②memory cached(内存缓
小小科
2018/05/04
1.9K0
浅谈小白如何读懂Redis高速缓存与持久化并存及主从高可用集群
Redis持久化机制
上一篇主要针对Redis的内存淘汰机制以及Redis容易引发的三大问题:缓存击穿、缓存穿透以及缓存雪崩进行了详细的讲解以及提供了业界常用的解决方案。本篇主要讲讲Redis的持久化机制,Redis受开发者欢迎的一大原因就是因为可持久化的特性。我们如何保证Redis宕机之后重启可以将数据进行恢复?所以一般情况下我们需要定时进行持久化将内存中的数据写入到硬盘中。而Redis中支持两种不同的持久化机制:RDB持久化以及AOF持久化。
创译科技
2019/09/26
6550
Redis持久化
Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大. 如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式. 你也可以同时开启两种持久化方式, 在这种情况下, 当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件 保存的数据集要完整.
会跳舞的机器人
2018/09/21
9850
Redis持久化
  redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一但服务器进程退出,服务器中的数据库状态也会消失,所有redis提供了持久化功能 redis 提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。 RDB,简而言之,就是在不同的时间点,将 redis 存储的数据生成快照并存储到磁盘等介质上; AOF,则是换了一个角度来实现持久化,那就是将 redis 执行过的所有写指令记录下来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。   其实 RDB 和 AOF 两种方式也可以同时使用,在这种情况下,如果 redis 重启的话,则会优先采用 AOF 方式来进行数据恢复,这是因为 AOF 方式的数据恢复完整度更高。   如果你没有数据持久化的需求,也完全可以关闭 RDB 和 AOF 方式,这样的话,redis 将变成一个纯内存数据库,就像 memcache 一样。
云计算小黑
2022/12/28
3440
Redis持久化
Redis的持久化-RDB
Redis优秀的性能是由于其将所有的数据都存储在内存中,同样memcached也是这样做的,但是为什么Redis能够脱颖而出呢,很大程度上是因为Redis有出色的持久化机制,能够保证服务器重启后,数据不会丢失。下面来看看Redis是如何持久化的。 Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。这两种方式可以单独使用其中一种,或者混合使用。 RDB方式介绍 RDB方式是通过快照完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照,并且存储到硬盘上。就像拍照一样,将这一瞬
老七Linux
2018/05/09
1.3K1
Redis初识~持久化数据
Redis我们都知道Redis的内容是放在内存当中的,如果我们的安装Redis的服务器宕机了,那么我们在内存保存的内容也就丢失了。在Redis当中给提供了不同级别的持久化的方式来进行数据的保存: RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。 AOF持久化方式记录每次对服务器写的操作。当服务器重启的时候会重启执行这些命令来恢复原始的数据,AOF命令以redis协议追加每次写的操作到文件的末尾,Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。 也可以不运行持久化的方式。
用户2196435
2018/07/19
6420
redis的持久化
Redis借助了fork命令的copy on write机制。在生成快照时,将当前进程fork出一个子进程,然后在子进程中循环所有的数据,将数据写成为RDB文件。
程序员小饭
2020/09/07
4610
一文详细揭秘 Redis 持久化,了解一下?
Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持的数据类型很丰富,如字符串、链表、集 合、以及散列等,并且还支持多种排序功能。
崔庆才
2018/11/23
5010
Redis持久化RDB详解
RDB 是Redis默认采用的持久化方式,RDB方式是通过快照完成的,当符合一定条件将自动将内部存的数据进行快照并持久化到磁盘。
小土豆Yuki
2020/06/15
4150
彻底理解Redis持久化
大家都知道Redis一个内存数据库,它支持2种持久化方式:RDB(Snapshot 内存快照) ,AOF(append only file)。持久化功能将内存中的数据同步到磁盘来避免Redis发生异常导致数据丢失的情况。当Redis实例重启时,即可利用之前持久化的文件实现数据恢复。
用户1278550
2020/02/28
8930
彻底理解Redis持久化
Redis持久化RDB&AOF
RDB是一种快照存储持久化方式,具体就是将Redis某一时刻的内存数据保存到硬盘的文件当中,默认保存的文件名为dump.rdb,而在Redis服务器启动时,会重新加载dump.rdb文件的数据到内存当中恢复数据。
Se7en258
2021/05/18
3620
Redis持久化RDB&AOF
Redis持久化数据之RDB和AOF
Redis由于读取效率快而常常被用作缓存来使用,之所以读取的速度非常快,是因为Redis将数据都存储在内存中,我们大家都知道存储在内存中的数据最大的特点就是:断电即丢失,这就容易出现数据不安全的问题。关系型数据库MySQL就是将数据持久化到磁盘上。那么Redis官方也提供了RDB和AOF两种方式,可以将数据持久化到磁盘来确保数据的安全性。
百思不得小赵
2022/12/01
4270
Redis持久化数据之RDB和AOF
一文搞懂Redis持久化
文章目录 1. 前言 2. RDB 2.1. 手动触发 2.2. 自动触发 2.3. RDB执行流程 2.4. RDB的优点 2.5. RDB的缺点 3. AOF 3.1. 如何开启AOF 3.2. AOF整体的执行流程 3.3. 命令写入 3.4. 文件同步 3.5. 文件重写机制 3.6. AOF的优点 3.7. AOF的缺点 4. AOF和RDB的区别 5. 重启加载 6. 性能问题与解决方案 7. 总结 前言 Redis目前已经成为主流的内存数据库了,但是大部分人仅仅是停留在会用的阶段,你真的了
爱撒谎的男孩
2020/04/22
3840
Redis6--持久化篇
在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里
大忽悠爱学习
2021/11/15
3760
Redis进阶知识一览
  RDB会丢失最后一次备份的rdb文件,但是其实也无所谓,其实也可以忽略不计,毕竟是缓存,丢了就丢了,但是如果追求数据的完整性,那就的考虑使用AOF了。 AOF特点
用户7353950
2022/06/23
3010
Redis进阶知识一览
超详细!彻底说明白Redis持久化
Redis作为一款被广泛应用的内存数据库,想必大家都用过,而作为内存数据库,其持久化机制是确保数据安全和稳定性的关键所在。
BookSea
2024/02/29
3.8K1
超详细!彻底说明白Redis持久化
redis持久化策略梳理及主从环境下的策略调整记录
redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。可以不定期的通过异步方式保存到磁盘上(即“半持久化模式”);也可以把每一次数据变化都写入到一个Append Only File(AOF)里面(即“完全持久化模式”)。redis支持两种持久化方式,一种是默认方式的RDB(Snapshotting快照)持久化,另一种是AOF(Append-only file)持久化方式。这两种持久化方式都可以将内存中的数据库状态保存到磁盘上,redis对应的也有两种落地文件
洗尽了浮华
2018/01/23
1.3K0
Redis数据库 专题
高性能:从内存读取数据比从硬盘读取要快很多。如果数据库中对应的数据改变之后,同步改变缓存中相应的数据即可。
Steve Wang
2022/05/10
7690
Redis数据库 专题
相关推荐
Redis数据结构存储系统:第三章:Redis在项目中如何使用?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档