1

我们有一个运行在 LAMP 堆栈上的 Web 应用程序,该应用程序依赖于各种服务。这些服务从缓存(memcached)中获取数据,这些数据正在使用 cron(来自 MySQL)进行刷新。Cron 进程每 5 分钟运行一次。

在这种方法中,我们无法提供最近更新的数据,因为缓存每 5 分钟刷新一次。

是否存在任何机制可以在 MySQL 中的数据更新后立即触发缓存刷新?

4

3 回答 3

2

我不知道这是否是最好的解决方案,但您可以做的是创建 MySQL 触发器,该触发器在插入/更新/删除时执行。

在那个 MySQL 触发器里面执行一个UDF. 从那里,UDF您可以使用sys_exec().

阅读触发器

阅读有关 UDF 的信息

阅读有关使用sys_exec()和更多信息

于 2013-05-04T18:42:30.713 回答
1

我对这个问题的解决方案是在一个带有 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 做,我只是一个青少年编码器,祝你好运。

于 2015-09-27T19:42:20.187 回答
0

仅在 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 触发器,这实际上不需要实现缓存更新。

于 2013-05-06T16:25:27.390 回答