hi all, 我有一个需求,需要对磁盘文件的头做一个内存缓存。打算用春哥下面两个模块来做 ngx.shared.DICT 和 lua-resty-lock 我考虑到以下情况:1. 对于写cache的set操作 要加锁2. 如果LRU策略正在淘汰的key被访问,也会有问题吧3. 加了很多锁,会不会影响性能考虑到cache出问题会很坑爹,所以想到自己考虑的肯定不周全,恳请有相关经验的朋友指点!谢谢 另外还有没有什么更上层的模块可以用的?-- Best Regards, Harold Miao --
Hello! 2013/11/19 Harold.Miao: > 我考虑到以下情况: > > 1. 对于写cache的set操作 要加锁 由于共享内存字典相关的操作并不涉及任何 IO,甚至不涉及任何系统调用,所以锁的负面效应经常会被夸大。 只有当你有非常多的 nginx worker 进程,同时在单个共享字典中有极多的 key-value 个数(比如百万级或者更多),锁的效应才会比较明显。 建议针对你的实际负载和数据量进行实际测量。你可以通过 off-CPU 和 on-CPU 火焰图量化锁的效应(如果锁的效应足够明显的话)。见 https://github.com/agentzh/nginx-systemtap-toolkit#sample-bt-off-cpu https://github.com/agentzh/nginx-systemtap-toolkit#sample-bt > 2. 如果LRU策略正在淘汰的key被访问,也会有问题吧 共享内存字典会保证数据的一致性。对于正在访问的 key 只存在合法和不合法两种情况。 > 3. 加了很多锁,会不会影响性能 > 见我上面对 1) 的评论。 Regards, -agentzh
前两天agentzh推荐过一个cloudflare的缓存模块,你可以在本列表搜索一下Lance 2013/11/19 Harold.Miao <miaoh...@gmail.com> hi all, 我有一个需求,需要对磁盘文件的头做一个内存缓存。打算用春哥下面两个模块来做 ngx.shared.DICT 和 lua-resty-lock 我考虑到以下情况:1. 对于写cache的set操作 要加锁2. 如果LRU策略正在淘汰的key被访问,也会有问题吧3. 加了很多锁,会不会影响性能考虑到cache出问题会很坑爹,所以想到自己考虑的肯定不周全,恳请有相关经验的朋友指点!谢谢 另外还有没有什么更上层的模块可以用的?-- Best Regards, Harold Miao -- class="HOEnZb"> --
hi all, 我有一个需求,需要对磁盘文件的头做一个内存缓存。打算用春哥下面两个模块来做 ngx.shared.DICT 和 lua-resty-lock 我考虑到以下情况:1. 对于写cache的set操作 要加锁2. 如果LRU策略正在淘汰的key被访问,也会有问题吧3. 加了很多锁,会不会影响性能考虑到cache出问题会很坑爹,所以想到自己考虑的肯定不周全,恳请有相关经验的朋友指点!谢谢 另外还有没有什么更上层的模块可以用的?-- Best Regards, Harold Miao -- class="HOEnZb">
由于共享内存字典相关的操作并不涉及任何 IO,甚至不涉及任何系统调用,所以锁的负面效应经常会被夸大。 只有当你有非常多的 nginx worker 进程,同时在单个共享字典中有极多的 key-value 个数(比如百万级或者更多),锁的效应才会比较明显。