LoadSessionsFromDB的实现,为何不直接将 RetrieveAllSessions的返回值赋值给sessionMap?
来源:3-16 api之session处理与实现(下)
pu2chyh
2019-04-10
请问:
func RetrieveAllSessions() (*sync.Map, error) {}
这个函数的返回值就有sync.Map,为何LoadSessionsFromDB()在调用的时候,不是直接把RetrieveAllSessions的返回值赋给sessionMap,而是要用range方法去取一遍k,v,然后再用sessionMap.Store(k,v)来操作呢?
写回答
2回答
-
这实际上是为了扩展性而做的设计。
表面上来看RetrieveAllSessions返回的Map结构和我们的cache是一致的,但是不能直接赋值,因为LoadSessionFromDB不一定只是在我们服务重启的时候会被调用,当DB宕机时,恢复DB数据的时候也是需要调用的。因此如果出现DB和cache的数据不一致,我们不能简单粗暴的把DB所有的数据直接赋值,这样在线上的新生成的session就会失效。
至于这部分容灾的内容,由于课程内容原因没有添加业务处理,因此这里只有一个简单的通用性的处理方法。
222020-02-04 -
慕桂英0528577
2020-12-07
老师 ,对于这位同学的问题 ,我还是有同样的问题。能否简单讲下调用流程 ,或者是在什么情况下 DB和cache 的数据会不一致
00
相似问题