自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(5)
  • 收藏
  • 关注

原创 【转】缓存雪崩的解决方案

缓存雪崩:当缓存服务器重启或者是在某一时间段大量缓存集体失效的时候,高并发请求集体请求后端数据库系统,就会对数据库系统带来很大压力。解决方案:1.加锁排队:加锁排队可以减轻数据库压力,但无法提高系统吞吐量,真正的高并发情况下,假设缓存重建期间key一直是锁着的,后面的请求都在阻塞,会造成大量用户超时等待。2.随机值缓存。简单来说就是我们将缓存失效时间分散开,在原有失效时间的基础上增加随机值,这样缓存过期时间的重复率就会大大降低,很难引发集体缓存失效的事件。//伪代码public object

2021-12-17 09:32:27 827

原创 【转】缓存击穿的解决方案

缓存击穿:缓存击穿对应的一般都是热点数据。key对应的数据存在,但是到了过期时间,此时如果出现高并发情况,有大量并发请求过来,因为没有缓存数据,所以都回去访问数据库并回设缓存,这时候高并发就可能瞬间把数据库压垮。解决方案:使用互斥锁。算是很常用的方式。简单来说就是在缓存失效的时候不立刻去数据库拿数据,而是先使用缓存中某些带有成功操作后有返回值的操作去set一个mutex key,比如redis的setnx或者memcache的add。当操作成功返回时,再去数据库拿数据并回设缓存。否则就重试整个get

2021-12-17 09:20:00 276

原创 【转】redis缓存穿透解决方案

缓存穿透:缓存对查询不起作用了,每次key对应的数据都不存在缓存中,这时请求就会请求到数据库,从而压垮数据库。比如用一个不存在的用户id访问api,无论缓存中还是数据库都不存在,黑客就可能利用此漏洞攻击很可能会压垮数据库。解决方案:1.很多人经常用的方式。如果一个查询返回的数据为空,不管数据存不存在,我们直接把这个空结果进行缓存,并且设置很短的过期时间。这样就不会让所有请求都打在数据库上,从而压垮数据库。不过缺点也很明显,浪费内存,而且无法抵御随机key的攻击。2.使用布隆过滤器。布隆过滤器可以有效

2021-12-16 17:43:03 638

原创 Redis延时双删实现mysql和redis的数据一致性

在高并发的业务场景下,为了保护数据库,我们一般都会做缓冲。所以,假设我们用redis做一个缓冲操作,让请求先访问redis,而不是直接访问mysql,来缓解数据库的压力。平常的读取缓存没啥问题,但假设涉及到更新数据,特别是需要更新数据库的同时更新缓存,就很容易出现数据库和缓存数据不一致的问题。不管是先写入库在删除缓存,还是先删缓存再写入库,都有可能出现数据不一致的情况。比如:1.删除了缓存,还没来得及入库,另一个线程来读取,发现缓存为空,去数据库拿到的还是旧数据,然后再做缓存,此时缓存中就是脏数据。

2021-12-16 16:31:59 2147

原创 2021php面试题记录

记录一下自己碰到的面试题,能想起来的都记录在此。1.$a='1';$b = &$a;$b = "2$b";echo $a.",".$b;try{ echo 1; thorow new Exception;​ echo 2;}catch(Exception $e){ echo 3;}finally{ echo 4;}3.php常用数组函数和魔术方法。4.php合并数组的几种方式。5.a

2021-04-22 18:19:12 539

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除