博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
缓存中常见的概念及解决方案
阅读量:7179 次
发布时间:2019-06-29

本文共 655 字,大约阅读时间需要 2 分钟。

缓存中常见的概念及解决方案


缓存穿透

1、概念

用户查询数据,在数据库中以及缓存中(redis)都查询不到,导致每次请求来时,缓存(redis)中查询一次,数据库查询一次,最后返回空,每次请求都会有俩次无用的查询,缓存命中率低

2、解决方案

1) 对null值设置缓存,每隔一段时间过期

2) 使用布隆过滤器缓存需要的值,直接过滤 掉找不到值得key

缓存雪崩

1、概念

缓存(redis)服务挂掉,缓存在同一时间发生大面积的实效,请求每次查完数据未能将数据缓存倒数据库中,导致所有的请求都会去查询数据库,造成同一时间数据库的cpu及内存负载过高的问题,甚至宕机。

2、解决方案

1)redis高可用,使用哨兵部署或者集群部署模式,保证缓存服务的高可用

2)为key设置不同的过期时间,让key的过期时间均衡分布,防止同一时间缓存大面积的实效。
3)使用锁和队列,对请求进行异步处理,降低数据库的压力。
4)使用缓存降级策略(使用guava或ehcache等本地缓存 或者对服务访问进行限流、熔断及降级)

缓存击穿

1、概念

某个key非常热点,在不停的坑着大并发,大并发集中对这一个点进行访问,当这个key失效的瞬间,持续的高并发会击破缓存,直接请求数据库,导致数据库的cpu及内存负载过高,甚至宕机。

2、解决方案

1)设置某些热点key的过期时间(延长或者永不过期)

2) mutex key互斥锁

转载于:https://www.cnblogs.com/jakaBlog/p/10759519.html

你可能感兴趣的文章
Nginx + CGI/FastCGI + C/Cpp
查看>>
mysql创建用户
查看>>
暑假期间学习不错的网网页
查看>>
EXPORT_SYMBOL的使用并以使用do_adjtimex调节内核tick_length(滴答长度)为例的说明...
查看>>
设计模式之——设计原则
查看>>
微软发布了ASP.NET MVC框架的第4个预览版本
查看>>
问几个 User.GetUser()的问题。各位高手来帮忙回答一下
查看>>
如何使用Oracle FND_LOAD工具在不同Instance间同步数据(Example)
查看>>
AMF目前有两种版本,AMF0和AMF3
查看>>
this 的使用方法 —— javascript中的this讲解! (share)
查看>>
[转载]基于TFS实践敏捷-实现用户场景
查看>>
ArcSDE中空间数据的备份与恢复
查看>>
android:onKeyDown
查看>>
go指针的一个小坑
查看>>
VSTO Office二次开发对PowerPoint功能简单测试
查看>>
photoshop快捷键大全
查看>>
Android -- EventBus使用
查看>>
利用gulp搭建本地服务器,并能模拟ajax
查看>>
Java一些八卦集合类
查看>>
linux进程地址空间--vma的基本操作【转】
查看>>