标签:统一 直接 实现 过滤 次数 setnx 热点 通过 请求
为何缓存?
目前磁盘IO和网络IO相对于内存IO的大幅度性能劣势,通过将高频使用的数据存储在离近CPU的位置,以减少传输时间,提高处理效率。
系统缓存:
软件设计缓存:
内存数据库(redis)把大量数据存在内存而非硬盘;
缓存Tips:
缓存穿透
收到了一个请求,但是该请求缓存里没有,只能去数据库里查询,然后放进缓存。这里面有两个风险,一个是同时有好多请求访问同一个数据,然后业务系统把这些请求全发到了数据库;第二个是有人恶意构造一个逻辑上不存在的数据,然后大量发送这个请求,这样每次请求都会被发送到数据库,可能导致数据挂掉。
解决方案:
那么非恶意访问呢?这个要结合缓存击穿来讲
缓存击穿
对于热点数据,当数据失效,所有请求都死去数据库请求更新缓存,数据库被压垮。
解决方案:
我们给所有的数据设置了同样的过期时间,然后在某一个历史性时刻,整个缓存的数据全部过期了,然后瞬间所有的请求都被打到了数据库,数据库就崩了。
解决思路要么是分治,划分更小的缓存区间,按区间过期;要么是给每个key的过期时间加个随机值,避免同时过期,达到错峰刷新缓存的目的。
标签:统一 直接 实现 过滤 次数 setnx 热点 通过 请求
原文地址:https://www.cnblogs.com/Samuel1/p/9835428.html