CNSRE / ABTestingGateway

MIT License
2.35k stars 768 forks source link

能讲下cache模块具体实现吗? #38

Open functionin opened 8 years ago

functionin commented 8 years ago

能讲下cache模块具体实现吗? 线上系统打算使用,但是目前不清楚缓存模块逻辑

BG2BKK commented 8 years ago

你好,ngx_lua的cache有多种,ngx_shared_dict、srcache等等,这个项目里用到了ngx_shared_dict,是ngx_lua的一个模块,基于ngx shm实现,可以实现进程间共享,原子操作,十分高效;ngx_lua的任务同步机制,或者说缓存锁,有两种实现方式,一种是lua-resty-lock,基于ngx_shared_dict实现,进程间共享,该repo的README中提到了经典用法;另一种是新版本ngx_lua中的semaphore,基于luajit的ffi实现,在worker内的级别实现锁机制。

具体到本项目,cache模块缓存的是运行时信息和用户特征对应的分流结果,有缓存失效机制,确保lua代码实时拉取运行时信息;缓存失效时有同步机制,目前采用的是semaphore方式,减轻对后端redis的压力。