做全英文网站,厦门云端企业网站建设,佛山网站建设哪家好,wordpress创建子主题缓存热key一旦被击穿#xff0c;流量势必会打到数据库#xff0c;如果数据库崩了#xff0c;游戏直接结束。
从两点来讨论#xff1a;如何监控、如何解决。
如何监控
通过业务评估#xff1a;比如营销活动推出的商品或者热卖的商品。基于LRU的命令#xff0c;redis-cl…缓存热key一旦被击穿流量势必会打到数据库如果数据库崩了游戏直接结束。
从两点来讨论如何监控、如何解决。
如何监控
通过业务评估比如营销活动推出的商品或者热卖的商品。基于LRU的命令redis-cli --hotkeys通过任务调度定时去获取基于redis客户端、或者代理层、或者redis监控策略利用大数据领域的流式计算技术如Storm、Spark Streaming、Flink进行实时数据访问次数的统计一旦发现热点数据即可进行处理。
分析
为什么不直接访问数据库获取数据 因为数据库主要是为了增量数据持久化资源宝贵库的并发连接数也有瓶颈不好抗啊。
为什么要使用缓存 缓存可以抗住海量并发内存操作速度快
怎么保证缓存性能 缓存预热
缓存中间抗不住怎么办 采用多级缓存先访问本地缓存再访问Redis缓存减轻压力增加Redis节点
本地缓存需要注意些什么 缓存核心最热点的数据控制好缓存数据量级堆内存啊别OOM了
缓存失效怎么办 在访问数据库的时候加锁控制流量允许一个请求访问数据库其他流量等待。
加什么锁jvm锁还是分布式锁 加本地锁就够了数据库还没那么不堪一击而且本地锁无网络开销、轻量快捷。
缓存哪些数据 上面说了如何监控热点数据关于动态的热点数据也需要实时监控
还有什么兜底方案吗 针对数据库流量进行限流做最后的防护
怎么做流量预估 业务评估全链路压测
怎么保证可用性 止血方案开关、配置监控降级策略扩容
如何应对RPC线程池溢出造成的QPS瓶颈问题 在客户端做一层缓存同服务端缓存的逻辑一样。
如何解决
评估流量redis和mysql是否能扛得住热key进行拆分分散到不同的redis节点增加redis节点多级缓存本地缓存 -》 redis缓存如下策略加锁限流
伪代码
public class Main {private static final ReentrantLock lock new ReentrantLock();private static final AtomicInteger retryCount new AtomicInteger(0);public String getCacheValue(String key) throws Exception {try{String result cache.get(key);if (result null) {boolean b lock.tryLock(200, TimeUnit.MILLISECONDS);if (b || retryCount.get() 10) {String limit limit.get(key);if (!limit.equals(限流)) {result db.get(key);}} else {Thread.sleep(200);retryCount.incrementAndGet();result this.getCacheValue(key);}}}finally{lock.unlock();}return result;}
}