Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wushizhenking
advanced-java
提交
c4cad8a0
A
advanced-java
项目概览
wushizhenking
/
advanced-java
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
advanced-java
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c4cad8a0
编写于
4月 26, 2020
作者:
Y
yanglbme
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: update why-cache.md
上级
954735ab
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
6 addition
and
4 deletion
+6
-4
docs/high-concurrency/redis-caching-avalanche-and-caching-penetration.md
...rrency/redis-caching-avalanche-and-caching-penetration.md
+4
-3
docs/high-concurrency/why-cache.md
docs/high-concurrency/why-cache.md
+2
-1
未找到文件。
docs/high-concurrency/redis-caching-avalanche-and-caching-penetration.md
浏览文件 @
c4cad8a0
...
...
@@ -23,12 +23,12 @@
用户发送一个请求,系统 A 收到请求后,先查本地 ehcache 缓存,如果没查到再查 redis。如果 ehcache 和 redis 都没有,再查数据库,将数据库中的结果,写入 ehcache 和 redis 中。
限流组件,可以设置每秒的请求,有多少能通过组件,剩余的未通过的请求,怎么办?
**走降级**
!可以返回一些默认的值,或者友情提示,或者空
白的
值。
限流组件,可以设置每秒的请求,有多少能通过组件,剩余的未通过的请求,怎么办?
**走降级**
!可以返回一些默认的值,或者友情提示,或者空值。
好处:
-
数据库绝对不会死,限流组件确保了每秒只有多少个请求能通过。
-
只要数据库不死,就是说,对用户来说,2/5 的请求都是可以被处理的。
-
只要有 2/5 的请求可以被处理,就意味着你的系统没死,对用户来说,可能就是点击几次刷不出来页面,但是多点几次,就可以刷出来
一次
。
-
只要有 2/5 的请求可以被处理,就意味着你的系统没死,对用户来说,可能就是点击几次刷不出来页面,但是多点几次,就可以刷出来
了
。
### 缓存穿透
对于系统A,假设一秒 5000 个请求,结果其中 4000 个请求是黑客发出的恶意攻击。
...
...
@@ -45,6 +45,7 @@
缓存击穿,就是说某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个 key 在失效的瞬间,大量的请求就击穿了缓存,直接请求数据库,就像是在一道屏障上凿开了一个洞。
不同场景下的解决方式可如下:
-
若缓存的数据是基本不会发生更新的,则可尝试将该热点数据设置为永不过期。
-
若缓存的数据更新不频繁,且缓存刷新的整个流程耗时较少的情况下,则可以采用基于 redis、zookeeper 等分布式中间件的分布式互斥锁,或者本地互斥锁以保证仅少量的请求能请求数据库并重新构建缓存,其余线程则在锁释放后能访问到新缓存。
-
若缓存的数据更新频繁或者
缓存刷新的流程耗时较长的情况下,可以利用定时线程在缓存过期前主动的
重新构建缓存或者延后缓存的过期时间,以保证所有的请求能一直访问到对应的缓存。
-
若缓存的数据更新频繁或者
在缓存刷新的流程耗时较长的情况下,可以利用定时线程在缓存过期前主动地
重新构建缓存或者延后缓存的过期时间,以保证所有的请求能一直访问到对应的缓存。
docs/high-concurrency/why-cache.md
浏览文件 @
c4cad8a0
...
...
@@ -32,8 +32,9 @@ mysql 这么重的数据库,压根儿设计不是让你玩儿高并发的,
### 用了缓存之后会有什么不良后果?
常见的缓存问题有以下几个:
-
[
缓存与数据库双写不一致
](
/docs/high-concurrency/redis-consistence.md
)
-
[
缓存雪崩、缓存穿透、缓存击穿
](
/docs/high-concurrency/redis-caching-avalanche-and-caching-penetration.md
)
-
[
缓存并发竞争
](
/docs/high-concurrency/redis-cas.md
)
后面再详细说明
。
点击超链接,可直接查看缓存相关问题及解决方案
。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录