我的 ROR 项目目前正在 AWS elasticached 上利用 memcached(3 个节点)来规避从数据库的读取。当尝试删除密钥时,Rails 或 Memcached 似乎通常只删除一个或几个节点上的密钥,因为从缓存中读取会返回过时的数据。
rails 或 memcached 上是否有任何配置可以阻止此操作或在节点上失败时重试密钥删除?
我的另一个选择是向 Rails 键添加版本号,如果没有更好的解决方案,我会这样做。
您查看过文档吗? Fragment Caching 和 ActiveSupport::Cache::MemCacheStore 的指南文档可能会涉及配置错误的内容。
Memcached 应该会自动删除旧的缓存文件,所以听起来你正在手动管理过期;根据您正在执行的操作,最好设置默认到期时间作为故障保护。您可能需要向缓存存储配置添加其他服务器或确保
MEMCACHE_SERVERS
正在更新(最好确保定义 MEMCACHE_SERVERS
,以便两个 Rails + Dalli::Client Server Configuration 都可以使用它作为保持服务器信息最新的共享事实来源)。 Memcached服务器之间是相互独立的,没有办法进行通信;他们依赖 Memcached 客户端向所有相关服务器发送并行请求,因此删除可能会以绕过客户端的方式发生。