架构知识总结--3、分布式缓存架构(上)

目录

(1)在项目中缓存是如何使用的?

(2)为什么要用缓存呢? 

1)高性能 

2)高并发 

(3)用了缓存之后会有啥不良的后果? 

(4)redis和memcached有啥区别

(5)redis的线程模型 

 (6)为啥redis单线程模型也能效率这么高?

(7) redis都有哪些数据类型?分别在哪些场景下使用比较合适?

(8) redis的过期策略都有哪些?内存淘汰机制都有哪些?

redis的过期策略都有哪些

内存淘汰机制

 

(10)如何保证Redis的高并发和高可用?

高并发:

高可用:

1、主从架构的核心原理 

 

 

 


(1)在项目中缓存是如何使用的?

在我的微服务电商项目中,通过redis缓存来保存商品的数据。

(2)为什么要用缓存呢? 

高性能和高并发

1)高性能 

redis查询走的是缓存,速度远比数据库查询快很多

架构知识总结--3、分布式缓存架构(上)_第1张图片

2)高并发 

我自己之前通过jmeter对mysql进行压测,2核cpu支撑到2000的qps,基本上就不行了。

而我使用redis进行压测的时候,2核cpu支撑到4000的qps。

理论上redis的性能应该远高于mysql的几十倍,但是这的电脑上进行压测的时候没有达到预期的10万qps效果,但是也足以证明redis性能比mysql要好。

(3)用了缓存之后会有啥不良的后果? 

1)缓存与数据库双写不一致

2)缓存雪崩

3)缓存穿透

4)缓存并发竞争

(4)redis和memcached有啥区别

1)redis支撑过多的数据类型

2)redis支持redis cluster集群模式的

(5)redis的线程模型 

1)文件事件处理器

redis基于reactor模式开发的文件事件处理器,由一个IO多路复用机制同时监听多个socket,用队列模式将并发访问变成串行访问。,所以多客户端对Redis的连接并不存在竞争关系。

文件事件处理器的结构包含4个部分:socket,IO多路复用程序,文件事件分派器,事件处理器(命令请求处理器、命令回复处理器、连接应答处理器,等等)。 

2)客户端与redis通信的一次流程

在redis启动初始化的时候,redis会将连接应答处理器跟AE_READABLE事件关联起来,接着如果一个客户端跟redis发起连接,此时会产生一个AE_READABLE事件,然后由连接应答处理器来处理,跟客户端建立连接,创建客户端对应的socket,同时将这个socket的AE_READABLE事件跟命令请求处理器关联起来。 

当客户端向redis发起请求的时候(不管是读请求还是写请求,都一样),首先就会在socket产生一个AE_READABLE事件,然后由对应的命令请求处理器来处理。这个命令请求处理器就会从socket中读取请求相关数据,然后进行执行和处理。 

接着redis准备好了客户端的响应数据之后,就会将socket的AE_WRITABLE事件跟命令回复处理器关联起来,当客户端这边准备好读取响应数据时,就会在socket上产生一个AE_WRITABLE事件,会由对应的命令回复处理器来处理,将准备好的响应数据写入到socket,供客户端来读取。 

命令回复处理器写完之后,就会删除这个socket的AE_WRITABLE事件和命令回复处理器的关联关系。

架构知识总结--3、分布式缓存架构(上)_第2张图片

 (6)为啥redis单线程模型也能效率这么高?

1)纯内存操作

2)核心是基于非阻塞的IO多路复用机制

3)单线程反而避免了多线程的上下文切换问题

(7) redis都有哪些数据类型?分别在哪些场景下使用比较合适?

(1)string

(2)hash

存储复杂类型

(3)list

存储集合

(4)set

 (5)sorted set

(8) redis的过期策略都有哪些?内存淘汰机制都有哪些?

redis的过期策略都有哪些

定期删除+惰性删除:

定期删除:指的是redis默认是每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。

惰性删除:获取某个key的时候,redis会检查一下 ,这个key如果设置了过期时间,如果过期了此时就会删除,不会给你返回任何东西。 

内存淘汰机制

过期策略导致redis存储了大量数据,内存不足。

1)allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key

 

(10)如何保证Redis的高并发和高可用?

高并发:

 redis高并发:主从架构,实现读写分离

高可用:

Redis采用两种持久化方式,AOF(实时写入,出现故障不会出现数据丢失)和RDB(每隔一段时间拷贝,适合冷备份到云上),AOF持久化是指追加写命令到aof文件的方式,RDB是指定期保存内存快照到rdb文件的方式。 

1、主从架构的核心原理 

主从复制原理:

如果slave 节点是重启的话,slave节点会通过他保存的master id,连接到master节点,master节点将backlog文件保存的offset位置之后的数据复制给slave节点;(slave节点在backlog文件中也保存了一个offset来于master的offset同步)

如果是第一次连接就会直接在内存中产生一个RDB快照(不经过磁盘),发送给slave节点,slave先将RDB快照 持久化到磁盘上,然后写入到slave内存中

架构知识总结--3、分布式缓存架构(上)_第3张图片

 

 

 

 

你可能感兴趣的:(面试问题,缓存)