我们有一个运行在 LAMP 堆栈上的 Web 应用程序,该应用程序依赖于各种服务。这些服务从缓存(memcached)中获取数据,这些数据正在使用 cron(来自 MySQL)进行刷新。Cron 进程每 5 分钟运行一次。
在这种方法中,我们无法提供最近更新的数据,因为缓存每 5 分钟刷新一次。
是否存在任何机制可以在 MySQL 中的数据更新后立即触发缓存刷新?
我不知道这是否是最好的解决方案,但您可以做的是创建 MySQL 触发器,该触发器在插入/更新/删除时执行。
在那个 MySQL 触发器里面执行一个UDF
. 从那里,UDF
您可以使用sys_exec()
.
我对这个问题的解决方案是在一个带有 memcached 查询的函数中使用 MySQL 查询,例如(在 Python 中,因为我不了解 PHP,你可以将其更改为 PHP):
def insert(user,value):
#execute on memcached first
key="user:"+user
memcClient.set(key,value)
#then execute it on MySQL
cursor.execute("INSERT INTO tables VALUES (%s,%s)",(user,value))
db.commit()
你会为删除和更新做同样的事情,抱歉我不能用 PHP 做,我只是一个青少年编码器,祝你好运。
仅在 php 级别识别 mysql 更新并相应地刷新 memcache 怎么样?
<?php
if($update_db){ // if we need to update the db then update db & memcacache together !
// Code to Update the database ....
// Code to Reset the memcached keyvalue pair.
}
?>
在 Manu 建议的方法中,我们使用了昂贵的 db 触发器,这实际上不需要实现缓存更新。