本文目录一览:
- 1、Redis、Kafka或RabbitMQ:哪个作为微服务消息代理最合适?
- 2、redis是个单线程的程序,为什么会这么快呢?
- 3、经典面试题——让你设计一个限流的系统怎么做?
- 4、负载均衡,分布式,集群的理解,多台服务器代码如何同步?
- 5、面试中问到Redis持久化的原理,本篇在做详细解答
Kafka和RabbitMq一样是通用意图消息代理,他们都是以分布式部署为目的 。但是他们对消息语义模型的定义的假设是非常不同的 。我对AMQP 更成熟这个论点是持怀疑态度的 。让我们用事实说话来看看用什么解决方案来解决你的问题 。
现在主流的消息队列可以分为两类 , 一类以kafka为代表,一类以RabbitMQ为代表,二者有很多相似的地方,也都有各自的优势 。
rabbitMQ在吞吐量方面稍逊于kafka,他们的出发点不一样 , rabbitMQ支持对消息的可靠的传递,支持事务,不支持批量的操作;基于存储的可靠性的要求存储可以采用内存或者硬盘 。
redis是个单线程的程序,为什么会这么快呢?1、Redis之所以快,是因为它采用了单进程单线程模型的KV数据库,由C语言编写 。这个模型的优点在于,它完全基于内存,绝大部分请求是纯粹的内存操作,非常快速 。此外 , Redis采用单线程避免了不必要的上下文切换和竞争条件 。
2、Redis 的执行效率快的原因有以下几点:- Redis 将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度极快 。
3、Redis快的主要原因是:完全基于内存数据结构简单,对数据操作也简单使用多路 I/O 复用模型第二点不细讲,主要围绕第三点采用多路 I/O 复用技术来展开 。
经典面试题——让你设计一个限流的系统怎么做?【redis做成service服务 redis微服务技巧】最简单的限流算法就是维护一个计数器 Counter,当一个请求来时 , 就做加一操作,当一个请求处理完后就做减一操作 。如果这个 Counter 大于某个数了(我们设定的限流阈值),那么就开始拒绝请求以保护系统的负载了 。
计数器算法(固定窗口):计数器算法是使用计数器在周期内累加访问次数,当达到设定的限流值时,触发限流策略,下一个周期开始时,进行清零,重新计数,实现简单 。计数器算法方式限流对于周期比较长的限流,存在很大的弊端 , 有严重的临界问题 。
首先 , 应该设计出实现目标系统的几种可能的方案 。概要设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系 。
负载均衡,分布式,集群的理解,多台服务器代码如何同步?1、分布式是指将不同的业务分布在不同的地方,集群指的是将几台服务器集中在一起,实现同一业务 。
2、负载均衡是一种方法 , 常用的是nginx反向代理 , 其实负载均衡是可以理解为搭建集群的一部分,属于集群服务器的前置系统 。
3、负载均衡的原理 负载均衡的原理是通过将请求分发到多个服务器或资源上 , 使每个服务器或资源的负载均匀分布 。有多种负载均衡算法可以实现这一目标,如轮询算法、加权轮询算法、最少连接算法等 。
面试中问到Redis持久化的原理,本篇在做详细解答可在redis.conf中配置,会以一段时间内达到指定修改的次数为规则来触发快照操作,快照文件名为dump.rdb 。每当Redis服务重启的时候都会从该文件中把数据加载到内存中 。在60秒内有10000次操作即触发RDB持久化 。
AOF(append only file)持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的 。AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式 。
RDB 持久化机制 :是对 redis 数据执行周期性的持久化 。这种方式就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为 dump.rdb 。客户端也可以使用save或者bgsave命令通知redis做一次快照持久化 。
推荐阅读
- redisson使用场景 redisjson使用
- redis缓存三大问题 redis缓存更新策略
- redis存储大key redis能储存多少数据
- 如何登录愤怒的蛋蛋服务器? 愤怒的蛋蛋服务器怎么登录
- 如何应对飞车游戏中的服务器故障? 飞车与服务器失败怎么办
- mysql底层是什么数据结构 mysql底层封装
- mysql工具书 常用的mysql工具类
- mysql只取一条 mysql一对多取一条