NextCloud/OwnCloud 缓存选择 APCu 和 Redis

2017-8-9 12:31 Herald 489 NextCloudowncloudRedis

NextCloud 网盘跑起来以后,大多数用户会关注网盘的性能优化,随着大量文件的存入特别是在音视频文件增多以后,NextCloud 总会有些迟钝的感觉。

其实在管理界面的 安全及设置警告 部分一直会有启用缓存提升性能相关的提示。

NextCloud 是 OwnCloud 的分支,程序结构几乎相同,因此本文同时适用于两者。

NextCloud 支持三种缓存方案,APCu、Memcache 和 Redis。官方手册建议 APCu 和 Redis 搭配使用,前者用作数据缓存,后者用作 filelock 事务锁。当然,也可以任选其一使用。

挑选原则:本地缓存 APCu 比 Redis 更快。如果内存充足,应该考虑同时使用 APCu 和 Redis。反之,内存不充裕的情况下,就应该只使用 Redis。没有绝对的规则,内存的充足与否也是相对的概念。

由于我很好奇 APCu 和 Redis 到底孰优孰劣,Google 一番还真找到了一些资料,现将对比测试结果提供如下:

  • filelocking.enabled + memcache.local APCu + memcache.locking Redis:
    • avatar/name/id: 70ms
    • config: 110ms
    • list: 80ms
    • thumbnails: 115-165ms (5 requests)
    • page ready: 0,95s
    • total: 1,95s
  • filelocking.enabled + memcache.local Redis + memcache.locking Redis:
    • avatar/name/id: 90ms
    • config: 200ms
    • list: 90ms
    • thumbnails: 130-180ms (5 requests)
    • page ready: 1s
    • total: 2,45s
  • filelocking.enabled + memcache.local none + memcache.locking Redis:
    • avatar/name/id: 75ms
    • config: 130ms
    • list: 85ms
    • thumbnails: 130-180ms (5 requests)
    • page ready: 1,05s
    • total: 2,45s
  • filelocking.enabled + memcache.local none + memcache.locking none:
    • avatar/name/id: 75ms
    • config: 460ms
    • list: 1,95s
    • thumbnails: 5-14s (5 requests)
    • page ready: 1,05s
    • total: 35s
  • filelocking.disabled + memcache.local none + memcache.locking none:
    • avatar/name/id: 80ms
    • config: 130ms
    • list: 75ms
    • thumbnails: 115-150ms (5 requests)
    • page ready: 1,05s
    • total: 1,95s

结论

APCu 与 Redis 结合使用的情况下性能最好,但相比全部使用 Redis 性能优势并不明显。综上,最合理的方案应该就是仅使用 Redis。

'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',

参考

{{ headers["x-wp-total"] }} 条评论

{{ post_id = '2675' }}

回复 {{ reply_to }}