这个问题是关于架构的最佳实践。
我们目前的架构
我有一个PHP类,可访问MySQL获取用户信息。叫它User
。 User
可以多次访问,因此我们实现了缓存层以减少负载。
第一层是我们所谓的“每个请求”缓存。从MySQL检索数据后,我们将数据存储在的私有属性中User
。任何后续的数据请求都返回该属性,而不是从MySQL重新请求数据。
由于Web请求是根据每个请求生存和终止的,因此此缓存仅阻止应用程序在单个请求中多次访问MySQL。
我们的第二层是Memcached。当私有属性为空时,我们首先检查Memcached中的数据。如果Memcached为空,我们向MySQL查询数据,更新Memcached,然后更新的private属性User
。
问题
我们的应用程序是一个游戏,有时必须使某些数据尽可能最新。在大约五分钟的时间内,对用户数据的读取请求可能会发生10到11次;那么可能会发生更新。随后的读取请求必须是最新的,否则游戏机制将失败。
因此,我们要做的是实现在数据库更新发生时执行的一段代码。此代码使用更新的数据在Memcached中设置密钥,因此所有后续对Memcached的请求都是最新的。
这是最优的吗?在尝试维护此类“活动缓存”时,是否应注意性能问题或其他“陷阱”?