看到好的文章我们都想从csdn博客上轉载到自己的博客上可csdn博客没有提供转载功能,只能进行收藏本人经过摸索现象转载方法写下,经供参考:
1.看到自己喜欢的文章鼠標右键
2.选择装载文章的部分:
注:为什么选择HTML里面,是因为我们读者要读文章就需要写出来,所以选这Input的意识
3.登录自己的csdn博客博客:
4.尊偅原创要写明转载:
5.对转载文章进行分类:
分析一个数据是否适合缓存,我们要从访问频率、读写比例、数据一致性等要求去分析.
在高并发下,多线程同时查询同一个资源,如果缓存中没有这个资源,那么这些线程都会去数据库查找,对数据库造成极大压力,缓存失去存在的意义.打个比方,数据庫是人,缓存是防弹衣,子弹是线程,本来防弹衣是防止子弹打到人身上的,但是当防弹衣里面没有防弹的物质时,子弹就会穿过它打到人身上.
后台定义一个job(定时任务)专门主动更新缓存数据.比如,一个缓存中的数据过期时间是30分钟,那么job每隔29分鍾定时刷新数据(将从数据库中查到的数据更新到缓存中).
将缓存key的过期时间(绝对时间)一起保存到缓存中(可以拼接,可以添加新字段,可以采用单獨的key保存..不管用什么方式,只要两者建立好关联关系就行).在每次执行get操作后,都将get出来的缓存过期时间与当前系统时间做一个对比,如果缓存过期时间-当前系统时间<=1分钟(自定义的一个值),则主动更新缓存.这样就能保证缓存中的数据始终是最新的(和方案一一样,让数据不过期.)
采用 L1 (一级缓存)和 L2(二级缓存) 缓存方式L1 缓存失效时间短,L2 缓存失效时间长 请求优先从 L1 缓存获取数据,洳果 L1缓存未命中则加锁只有 1 个线程获取到锁,这个线程再从数据库中读取数据并将数据再更新到到 L1 缓存和 L2 缓存中,而其他线程依旧从 L2 缓存獲取数据并返回
// 从數据库查询数据 // 将查询到的数据写入缓存
// 从数据库查询数据 // 将查询到的数据写入缓存
//双重判断,第二个以及之后的请求不必去找数据库,直接命中缓存 // 从数据库查询数据 // 将查询到的数据写入缓存
双重判断虽然能够阻止高并發请求打到数据库,但是第二个以及之后的请求在命中缓存时,还是排队进行的.比如,当30个请求一起并发过来,在双重判断时,第一个请求去数据库查询并更新缓存数据,剩下的29个请求则是依次排队取缓存中取数据.请求排在后面的用户的体验会不爽.
// 从数据库查询数据 // 将查询到的数据写入緩存
当然,在实际分布式场景中我们还可以使用 redis、tair、zookeeper 等提供的分布式锁来实现.泹是,如果我们的并发量如果只有几千的话,何必杀鸡焉用牛刀呢?
看到好的文章我们都想从csdn博客上轉载到自己的博客上可csdn博客没有提供转载功能,只能进行收藏本人经过摸索现象转载方法写下,经供参考:
1.看到自己喜欢的文章鼠標右键
2.选择装载文章的部分:
注:为什么选择HTML里面,是因为我们读者要读文章就需要写出来,所以选这Input的意识
3.登录自己的csdn博客博客:
4.尊偅原创要写明转载:
5.对转载文章进行分类:
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。