温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
White列表和owner查询都是读多写少,数据库单次查询只要20ms。有人问,这真的值得加瑞斯吗?今天我们把缓存从本地一路推到多实例。先别急着上read v1用spring cash加本地缓存cash manager管住key和t TL at cash报读at cash写。单实力足够快,也最简单。本地缓存看着简单,但多实例不属实,A实例更新了honor b实例的本地缓存还是旧数据。缓存不共享,一致性马上出问题。所以VR把缓存provider切到VS,所有实例读写同一份缓存,At cash的key规则不变,TTL统一由cash manager配置,共享问题先解决。瑞不是银蛋。网络抖动、连接池耗尽、大P托曼响应,这些都会把20ms的优势吃掉。
01:02
容量和故障降级必须提前设计。我们还主动制造了T冲突,两个业务用了同一个T前缀,结果A的缓存被B覆盖,T命名不规范,缓存越用越脏。还有穿透。大量不存在的owner ID直接打到数据库,缓存形同虚设。空值缓存或不能过滤,至少要选一个兜底。修改后缓存未失效,更隐蔽。At cash漏了一个更新入口,就数据一直对外失效,策略必须跟着写路径走,不能只靠TTL。瑞迪容量也要规划。Wet列表数据量一大,内存长得很快。Max memory和淘汰策略,不配好缓存会变成新的故障源。回到最初的问题,20ms值得加read吗?如果只是单实例,低并发,本地缓存够了,多实例、共享和一致性才是上radius的理由。
02:04
所以缓存工程真正困难的不是set和get,而是一致性失效容量和故障降级。先想清楚这些问题,再决定要不要把瑞请进来。
我来说两句