开发者

memcaching php resource objects

Say I have this code in PHP :

$query = mysql_query("SELECT ...");

the statement returns a resource object. Normally it would get passed to mysql_fetch_array() or one of the mysql_fetch_* functions to populate the data set.

I'm wondering if the resouce object - the $query variable in this case can be cached in memcache and then a while later can be fetched and used just like the moment it's created.

// cache it
$memcache->set('query', $query);

// restore it later
$query = $memcache->get('query');

// reuse it
while(mysql_fetch_array($query)) { ... }

I have googled the question, didn开发者_C百科't got much luck.

I'm asking this is because it looks way much light-weighted than the manner of "populate the result array first then cache".

So is it possible?


I doubt it. From the serialize manual entry

serialize() handles all types, except the resource-type.

Edit: Resources are generally tied to the service that created them. I don't know if memcached uses serialize however I'd guess it would be subject to the same limitations.


The Memcache extension serializes objects before sending them to the Memcached server. As the other poster mentioned, resources can't be serialized. A resource is basically a reference to a network connection to the database server. You can't cache a network connection and reuse it later. You can only cache the data that gets transmitted over the connection.

With queries like that, you should fetch all rows before caching them.

$all_results = array();
while ($row = mysql_fetch_array($query)) {
    $all_results[] = $row;
}
$memcache->set('query', $all_results);

Modern database drivers such as MySQLi and PDO have a fetch_all() function that will fetch all rows. This simplifies things a bit.

When you retrieve that array later, you can just use foreach() to iterate over it. This doesn't work with very large query results (Memcached has a 1MB limit) but for most purposes you shouldn't have any problem with it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜