Closed joyanhui closed 10 months ago
和nbio无关,但是实在困惑,无奈前来请教。
有一个map,需要定时从redis更新。之前我用的另起一个协程用定时器和消息订阅来更新它。现在为了兼容serverless环境,没法这样搞了。所以想改成在客户端每次请求的时候,检查一下上次更新的时间戳,判断是否需要查询redis。
下面的nbioHandler1和nbioHandler2 不知道那个才是真的安全。
var ( NowtimeATO atomic.Int64 LastUpdateCfgATO atomic.Int64 ) func nbioHandler1(w http.ResponseWriter, r *http.Request) { NowtimeATO.Store(time.Now().Unix()) if NowtimeATO.Load()-LastUpdateCfgATO.Load() >= 2 { LastUpdateCfgATO.Store(NowtimeATO.Load()) UpdateCfg() //更新数据到map } //other code }) func nbioHandler2(w http.ResponseWriter, r *http.Request) { NowtimeATO.Store(time.Now().Unix()) if NowtimeATO.Load()-LastUpdateCfgATO.Load() >= 2 { if LastUpdateCfgATO.CompareAndSwap(LastUpdateCfgATO.Load(), NowtimeATO.Load()) { UpdateCfg() } } //other code })
没问题。改动了一下 nbioHandler1 没啥问题。感谢
和nbio无关,但是实在困惑,无奈前来请教。
有一个map,需要定时从redis更新。之前我用的另起一个协程用定时器和消息订阅来更新它。现在为了兼容serverless环境,没法这样搞了。所以想改成在客户端每次请求的时候,检查一下上次更新的时间戳,判断是否需要查询redis。
下面的nbioHandler1和nbioHandler2 不知道那个才是真的安全。