- ngx lua文档:https://www.nginx.com/resources/wiki/modules/lua/
- openresty的七个执行阶段
- set_by_lua
- rewrite_by_lua
- access_by_lua
- content_by_lua
- header_filter_by_lua
- body_filter_by_lua
- log_by_lua
- lua-resty-lock模块
为了解决高并发下缓存失效后引发的雪崩效应,可以使用lua-resty-lock(异步非阻塞锁)来解决这个问题。lua-resty-lock是一个基于Nginx共享内存(ngx.shared.DICT)的非阻塞锁(基于Nginx的时间事件实现),说它是非阻塞的是因为它不会阻塞Nginx的worker进程,当某个key(请求)获取到该锁后,后续试图对该key再一次获取锁时都会『阻塞』在这里,但不会阻塞其它的key。当第一个获取锁的key将获取到的数据更新到缓存后,后续的key就不会再回源后端应用了,从而可以起到保护后端应用的作用。
详细的api文档请参考:https://github.com/openresty/lua-resty-lock#for-cache-locks