我刚刚为一个社交网站设计了一个管理控制台。我的老板现在希望我缓存几个MySQL查询的结果,这些查询构建了这些结果(24小时)。该网站使用Memcached(带有Wordpress W3总缓存)和XCache。我想知道最好的方法是什么。
下面是一个这样的查询的例子,以及我是如何获得结果的(基本上我返回的是用户的聚合统计数据,这意味着我的结果相当简单,例如:
//users who registered in last 365 days
$users_reg_365 = "select ID
from wp_users
where user_registered > NOW() - interval 365 day";
然后使用wpdb查询类来获得结果:
$users_reg_365 = $wpdb->get_results($users_reg_365);
然后在仪表板中显示结果:
<li><?php echo "Total users who registered within last 365 days: <span class='sqlresult'>" . sizeof($users_reg_365) . "</span>"; ?></li>
我对Memcached/XCache的理解是,它基本上存储字符串,所以只缓存sizeof($users_reg_365)有意义吗?
最后一个问题是,我们的Wordpress网站使用W3总缓存,它利用了Memcached,老板要求我不要使用Memcached而是使用XCache,但我发现文档有点混乱。解决这个问题的最佳方法是什么?SQL本身是否可以被告知"记住"这样的某些查询,或者内存缓存是解决问题的方法?
谢谢!
您可以在这里找到更多关于两者差异的信息:Memcache、APC、XCache和其他替代方案之间的差异I';I’我没听说过
一个如何的例子
<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
// cache 24hrs
$cache_expire = 86400;
// users is your key
$users_reg_365 = $m->get('users_reg_365');
if (empty($users_reg_365)) {
$users_reg_365 = "select ID from wp_users where user_registered > NOW() - interval 365 day";
$m->set('users_reg_365', $cache_expire);
}
如果您需要在午夜精确刷新缓存,请更改$cache_expire的值。
您可以在中引用memcached的完整引用http://www.php.net/manual/en/memcached.get.php
嗯。我不确定你的缓存是如何在WordPress内部配置的。如果你将WordPress的对象缓存设置为使用Memcache(d)/XCache进行持久缓存,你可以执行类似的操作:
$key = 'custom-key-to-look-up-later';
$data = sizeof( $users_reg_365 );
$group = 'group-id';
$expire = 60 * 60 * 24 // time in seconds before expiring the cache.
wp_cache_set( $key, $data, $group, $expire );
稍后,您可以查找该值,如下所示:
$data = wp_cache_get( $key, $group );
if( ! is_wp_error( $data ) )
// the data is good. do something with it.
你可以在这里找到关于这些函数的文档。
不过,在开始之前,请确保WordPress已设置为使用Memcache(d)或XCache。:)
如果您想存储任何数组的结果,只需对其进行序列化/jsonen编码并存储为。。