缓存
一个生产环境的缓存系统,需要根据自己的业务场景和系统瓶颈,来找出最好的方案,这是一门平衡的艺术。
一般来说,缓存有两个原则。
- 二是尽量使用本进程和本机的缓存解决,因为跨了进程和机器甚至机房,缓存的网络开销就会非常大,在高并发的时候会非常明显。
OpenResty 的缓存
使用
我们看下面这段代码:
这里面用的就是 ngx shared dict cache。你可能会奇怪, 是从哪里冒出来的?没错,少贴了 nginx.conf 里面的修改:
使用
直接复制下春哥的示例代码:
可以看出来,这个 cache 是 worker 级别的,不会在 Nginx wokers 之间共享。并且,它是预先分配好 key 的数量,而 shared dict 需要自己用 key 和 value 的大小和数量,来估算需要把内存设置为多少。
如何选择?
你需要考虑的是以下两点:
- 一个是 Lua LRU cache 提供的 API 比较少,现在只有
get
、set
和delete
,而 ngx shared dict 还可以 、replace
、incr
、get_stale
(在 key 过期时也可以返回之前的值)、(获取所有 key,虽然不推荐,但说不定你的业务需要呢);