Skip to content

Commit 52cbcf7

Browse files
committed
debug: 缓存失效问题
1 parent f5d8591 commit 52cbcf7

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

debug/index.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,14 @@ RPC/Web 框架
234234
- redigo: 注意go的一个常用 redis 库如果查询不到 key 会返回 redis.ErrNil,需要和其他的 err 做区分。
235235
- redis cluster 集群错误:有时候要实现 redis lua 原子操作,对于 redis cluster,操作的所有key必须在一个slot上(或者可以指定hash tag 落到同一个 slot),否则返回错误信息。
236236
同理 redis cluster 下 mset/mget/pipeline 等都需要操作同一个 slot,腾讯云 redis 在 proxy 层给你实现了,可以直接批量操作。
237+
- 缓存失效。如果新上线的代码修改了数据结构导致和已有缓存的数据结构不同,那么上线的代码必须设计好失效机制让老的缓存数据先失效,否则有严重的业务问题(如果缓存失效期比较短问题倒是不大):
238+
239+
- 上线期间灰度部署新老代码都在跑,老代码会读到新的缓存数据结构导致现有逻辑可能出问题(比如字段含义改变甚至不兼容的时候)
240+
- 上线之后新代码读取还没失效的老的缓存数据,也可能会导致现有逻辑有问题(比如新加的字段读不到)
241+
- 稳妥的开发和上线方式:
242+
243+
1. 只新增字段,不要修改数据结构老字段或者改变其含义(类型、长度等)。 这样保证灰度期间老的代码逻辑不会影响
244+
2. 新上线代码判断获取的缓存有没有新字段,如果没有认为是过期缓存,删除对应的缓存数据并回源重建。这样保证新代码没有影响
237245

238246
参考:
239247

0 commit comments

Comments
 (0)