![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
缓存
文章平均质量分 73
STZ程序猿
简洁、直观、美。
展开
-
缓存问题之面试问题汇总
当然,这个过程也要加互斥锁,但由于重建缓存是异步的,而且获取锁失败也无需等待,而是返回旧数据,这样性能几乎不受影响。:缓存击穿往往是由热点Key引起的,当热点Key过期时,大量请求涌入同时查询,发现缓存未命中都会去访问数据库,导致数据库压力激增。第一种是基于互斥锁,当发现缓存未命中时需要先获取互斥锁,再重建缓存,缓存重建完成释放锁。需要注意的是,无论是采用哪种方式,在获取互斥锁后一定要再次判断缓存是否命中,做dubbo check. 因为当你获取锁成功时,可能是在你之前有其它线程已经重建缓存了。原创 2024-08-07 23:44:22 · 253 阅读 · 0 评论 -
缓存问题之缓存击穿
当某个key缓存失效时,如果这个key是热点key,并发访问量比较高。就会在一瞬间涌入大量请求,都发现缓存未命中,于是都会去查询数据库,尝试重建缓存。问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。线程1发现缓存未命中,准备查询数据库,重建缓存,但是因为数据比较复杂,导致查询数据库耗时较久。在这个过程中,一下次来了3个新的线程,就都会发现缓存未命中,都去查询数据库。逻辑过期:热点key不要设置过期时间,在活动结束后手动删除。原创 2024-08-07 23:42:41 · 162 阅读 · 0 评论 -
缓存问题之缓存雪崩
给业务添加多级缓存,比如先查询本地缓存,本地缓存未命中再查询Redis,Redis未命中再查询数据库。即便Redis宕机,也还有本地缓存可以抗压力。缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。给不同的Key的TTL添加随机值,这样KEY的过期时间不同,不会大量KEY同时过期。利用Redis集群提高服务的可用性,避免缓存服务宕机。给缓存业务添加降级限流策略。原创 2024-08-07 23:41:09 · 207 阅读 · 0 评论 -
缓存问题之缓存穿透
什么是缓存穿透呢?我们知道,当请求查询缓存未命中时,需要查询数据库以加载缓存。但是大家思考一下这样的场景:如果我访问一个数据库中也不存在的数据。会出现什么现象?由于数据库中不存在该数据,那么缓存中肯定也不存在。因此不管请求该数据多少次,缓存永远不可能建立,请求永远会直达数据库。假如有不怀好意的人,开启很多线程频繁的访问一个数据库中也不存在的数据。由于缓存不可能生效,那么所有的请求都访问数据库,可能就会导致数据库因过高的压力而宕机。解决这个问题有两种思路:缓存空值布隆过滤器。原创 2024-08-07 23:40:13 · 897 阅读 · 0 评论 -
缓存问题之缓存一致性
要知道线程1执行写缓存的速度在毫秒之间,速度非常快,在这么短的时间要完成数据库和缓存的操作,概率非常之低。,添加缓存的目的是为了提高系统性能,而你要付出的代价就是缓存与数据库的强一致性。此时线程2来查询,发现缓存未命中,于是查询数据库,写入缓存。同时我们还要给缓存加上过期时间,一旦发生缓存不一致,当缓存过期后会重新加载,数据最终还是能保证一致。的写操作是要在更新数据库的同时删除缓存,那为什么不选择更新数据库的同时更新缓存,而是删除呢?线程1将数据写入缓存之前,线程2来了,更新数据库,删除缓存。原创 2024-08-07 23:37:39 · 406 阅读 · 0 评论 -
Redis内存回收
Redis之所以性能强,最主要的原因就是基于内存存储。然而单节点的Redis其内存大小不宜过大,会影响持久化或主从同步性能。当内存达到上限,就无法存储更多数据了。因此,Redis内部会有两套内存回收的策略:内存过期策略内存淘汰策略。原创 2024-08-07 23:33:00 · 680 阅读 · 0 评论 -
分布式缓存之搭建Redis分片集群
主从模式可以解决高可用、高并发读的问题。但依然有两个问题没有解决:海量数据存储高并发写要解决这两个问题就需要用到分片集群了。分片的意思,就是把数据拆分存储到不同节点,这样整个集群的存储数据量就更大了。Redis分片集群的结构如图:分片集群特征:集群中有多个master,每个master保存不同分片数据 ,解决海量数据存储问题每个master都可以有多个slave节点 ,确保高可用master之间通过ping监测彼此健康状态 ,类似哨兵作用。原创 2024-08-07 23:15:22 · 599 阅读 · 0 评论 -
分布式缓存之搭建Redis主从集群+全量同步/增量同步
简述全量同步和增量同步区别?全量同步:master将完整内存数据生成RDB,发送RDB到slave。后续命令则记录在repl_baklog,逐个发送给slave。增量同步:slave提交自己的offset到master,master获取repl_baklog中从offset之后的命令给slave什么时候执行全量同步?slave节点第一次连接master节点时slave节点断开时间太久,repl_baklog中的offset已经被覆盖时什么时候执行增量同步?原创 2024-08-07 22:58:45 · 857 阅读 · 0 评论 -
Redis持久化RDB/AOF
RDB方式bgsave的基本流程?fork主进程得到一个子进程,共享内存空间子进程读取内存数据并写入新的RDB文件用新RDB文件替换旧的RDB文件RDB会在什么时候执行?save 60 1000代表什么含义?默认是服务停止时代表60秒内至少执行1000次修改则触发RDBRDB的缺点?RDB执行间隔时间长,两次RDB之间写入数据有丢失的风险fork子进程、压缩、写出RDB文件都比较耗时。原创 2024-08-07 20:41:24 · 674 阅读 · 0 评论