本文已参与「新人创作礼」活动,一起开启掘金创作之路。
昨天一切发生太快,答辩虽然结束,但结果还不知道,防止老师杀一个回马枪,再加深一下印象。
封包&粘包
封包:按照协议将数据封装起来,将一个完整的包发给服务端。
粘包:当存在 发送的数据有的是完整的,有的是不完整的 情况是,会出现粘包现象。
解包:将前端发来的数据包解析出来
心跳包:在间隔相同的时间内,客户端向服务端发送规定好的一个数据包,用来判断客户端与服务端一直保持连接的。
缓存击穿?
某个极度热点的数据在某个时刻过期了,但恰好这个时间点有大量的并发请求涌来,这些请求发现缓存过期,会从数据库中加载数据并重新设置缓存,但大量的请求并发会瞬间击垮数据库。 解决方法: 1、使用互斥锁,保证每次只有一个线程去查询数据库并更新到缓存; 2、将过期时间设置在 value 中而非缓存中,当发现要过期,在后台通过异步线程进行缓存的构建。
缓存穿透?
查询一个不存在的数据,由于该数据不存在,也就不会写入缓存中,导致以后每次访问这个不存在的数据都要到数据库中访问,失去了缓存的意义。
解决方法:
1、缓存空对象,当从数据库查询到的数据为空,仍然缓存,并设置较短的过期时间;
2、使用布隆过滤器 BloomFilter。
缓存雪崩?
缓存由于某些原因挂掉,所有请求全部到达数据库中,导致数据库无法承载访问压力崩溃。
解决方法:
1、本地缓存,即使分布式缓存挂了,可以将数据库查到的结果缓存到本地,避免后续请求全部到达数据库中;
2、数据库限流,通过设置数据库每秒的请求数,避免将数据库打挂掉。
项目中虽然没怎么用 Redis,但当时在分析项目做需求分析时,有想过使用 Redis,所以也对 Redis 缓存有过了解,答辩时老师也问过其他同学相关问题,所以在此再巩固一下。
有问题请指正
我向你敬礼啊,Salute!