我正在AWS上构建一个架构,其中有多个EC2实例作为Web服务器和一个中央MySQL数据库(RDS)。 EC2实例安装了Redis以缓存单个数据库行。 当MySQL中的行更改时,我希望每个实例也更新相应的缓存条目。在AWS环境中,最好的方法是什么?
不要使用触发器来处理此事。确保事务已正确提交(而不是回滚),然后在应用程序层中刷新缓存。如果不这样做,可能会出现并发请求重新使用旧数据填充缓存的情况(因为它们还没有看到新数据),因为在SQL触发器中该数据将被删除。
如果您正在使用队列服务器(Amazon SQS、Redis PubSub等),您可以为每个要过期的记录将条目放入队列中,并有一个工作程序监听队列,当它收到一条消息告诉它要使哪个记录无效时,它将连接到缓存并使该记录过期。如果您只有一个缓存服务器或多个缓存服务器,这种方法都适用,您只需要为每个缓存服务器拥有一个工作程序,或者一个工作程序可以连接到每个缓存服务器。使用多个工作程序可以提高可扩展性。