transient or not transient

时间:2018-04-23 作者:Steffy Kristiensen

我有一个连接到专用数据库的风捕捉器。

捕获者的数据每分钟推送到db。

我可以使用连接到第二个db并将数据打印到wp页面


    $meteodb = new wpdb(\'xx\',\'xx\',\'xx\',\'xx\');
$meteoValues = $meteodb->get_results( 
    "
    SELECT average, min, max, direction, timestamp 
    FROM wind
    ORDER BY timestamp 
    "
);
我对短暂的概念完全陌生。我尽量减少使用db请求的效率

与每次用户查看页面时直接连接到第二个数据库不同,我认为最好创建一个临时数据库,即每5分钟使用cron将新的数据集从第二个数据库直接拉到wp数据库。我只保留当天(早上6点到晚上8点)的数据,并在24小时后自动擦除

你认为这是一个明智的想法吗?

是否更明智的做法是每5分钟记录一次新的瞬态,仅记录新数据,然后调用所有可用的瞬态(少于24小时)

2°单个瞬态每5分钟刷新一次,阵列包含过去24小时的所有数据?

有效期仅为5分钟(甚至2分钟),使用transient听起来明智吗?

提前谢谢你

德菲

1 个回复
SO网友:Krzysiek Dróżdż

瞬态是一种将缓存数据临时存储在数据库中的简单方法,它为缓存数据提供一个自定义名称和一个时间段,在该时间段之后,缓存数据将过期并被删除。所以,是的,从第二个DB中获取数据并将其存储为瞬态将是一个好主意。

你首先要记住的是:

每个人似乎都误解了瞬时过期的工作原理,所以它的长短是:瞬时过期时间是最长的时间。没有最低年龄。瞬态可能会在设置后的一秒钟或24小时内消失,但它们在过期后将永远不会出现。

当然,很难用你的名字来选择过去24小时内的所有瞬态-瞬态名称的后缀是随机值(或者可能是哈希-在这种情况下并不重要)。

鉴于这两个事实,恐怕你的两种方法都行不通。

用cron设置瞬态没有任何意义-它们可能会在那之后立即消失。而且您不能存储过去24小时的值并从DB中选择所有值。

那么在这种情况下,我将如何使用瞬态呢

假设有一个函数可以从第二个DB中获取所有数据作为一个数组。我们调用这个函数get_remote_db_data(). 我的代码如下所示:

$data = get_transient(\'my_transient_name\');
if ( ! $data ) {
    $data = get_remote_db_data();
    set_transient(\'my_transient_name\', $data, 5*60);
}
// ... do your stuff with $data
到期时间应该是多长?这取决于刷新数据的频率。

结束

相关推荐

Transients API and multisite

我们正在使用Atlas HTML站点地图插件,该插件使用transients API缓存站点地图,调用如下:set_transient( \'dmac_html_sitemap\', $output, 60*60*24*7 ); 现在,我们还有一个多站点设置,我想知道瞬态存储在哪里,WP multisite是否将它们分开。它将选项分开,因为每个站点(博客)都有自己的DB表前缀(例如wp\\U 29\\U选项)。我在某个地方读到,瞬态可以用memcached存储,所以我猜后端存储是可插入的。这个问