学习Java第三十二天——黑马点评43~47
文章目录
- Leetcode每日一题:
-
- 实战篇-商户查询缓存-09.缓存击穿问题及解决方案
- 实战篇-商户查询缓存-10.利用互斥锁解决缓存击穿问题
- 实战篇-商户查询缓存-11.利用逻辑过期解决缓存击穿问题
- 实战篇-商户查询缓存-12.封装Redis工具类
- 实战篇-商户查询缓存-13.缓存总结
Leetcode每日一题:
暴力解法:如果直接从前往后两层循环的话,OJ会”超出时间限制“,于是我将第一层循环从后往前,并且加一个判断:if(water > i* height[i]) continue;
,这意味着”如果当前水柱水量拉满,即到 y轴的水量都比当前最大水量少,那么就跳过这次循环“,暴力拿下。
by灵茶山艾府的视频: 中间的任何线都无法和△它构成一个容量更大的容器。换句话说,如果要找到一个容量比蓝色区域更大的容器,那么肯定不会包含这条线,所以可以直接去掉,在剩下的线中继续找。
实战篇-商户查询缓存-09.缓存击穿问题及解决方案
1、高并发访问:这个key啊他访问的非常非常多,可能是正在做活动的某一件商品它的缓存,同一时刻可能有无数个请求来访问这一个key。
2、缓存重置业务较复杂:业务比较复杂时,需要从多个数据库的表当中进行查询,甚至于要去做各种各样的表关联的运算,最终得到这个结果给它缓存起来。这一个业务的耗时就会比较长,相当于在这么长的时间内,我们的redis等于一直都没有缓存。
bym这里穿透、击穿的解决方案都是为了保护数据库,防止访问压力过大。
死锁风险:弹幕——妈妈说:你写完作业我再让你玩游戏。 儿子说:我先玩完游戏再去写作业
在一致性和可用性之间做出抉择。没有孰优孰劣。
实战篇-商户查询缓存-10.利用互斥锁解决缓存击穿问题
互斥锁:也就是说在多个线程并行执行的时候,只能有一个人成功,其他人失败。
核心思路就是利用redis的setnx方法来表示获取锁,该方法含义是redis中如果没有这个key,则插入成功,返回1。
用JMeter做并发测试、压力测试: