作者回复: 有一个 ffmpeg 的库:https://github.com/daurnimator/ffmpeg-lua-ffi,你可以试下是否满足需求
作者回复: 你这种是主动更新,MySQL 数据变化后主动通知前面的缓存。主动更新的话,也不用主动去删除缓存,而是在 key 里面加入一个版本号,数据变化后版本号变了,那么在缓存中就查找不到数据,这时候就回源到 MySQL 了。
也可以被动更新,根据你的业务特性,给缓存设置一个过期时间,定期的去数据库查询。
第一种版本号的方法是比较合适的,当然实现起来比被动更新复杂一些。
作者回复: 改用 shared dict,或者是使用 lua-resty-worker-event 这样的库
作者回复: OpenResty 中的 worker 是互相独立的,如果你在 worker 中使用 ffi.load 来加载 so,那么有几个 worker 进程,就会有几个 so 实例。
作者回复: 我的理解,OpenResty 的复杂性在于各个子项目之间的配合,还是需要有特定的场景和业务需求来驱动,才会更有感觉。你可以参与到 OpenResty 相关的开源项目中来,切身体会下。
作者回复: 这个没有遇到过。是否是这个 bug:https://github.com/openresty/luajit2/issues/42? 用最新的 OpenResty 版本是否可以重现呢?
如果还是有问题,欢迎给官方提交 issue
作者回复: 可以的,在这个阶段启动一个 timer 去读取数据库,然后放到 shared dict 中。但要注意,这个数据是可以丢失的,代码中要处理这种异常。