From 5632b2e6d5b54bcafc06b9979523ecc9b69ec1c4 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sat, 22 Nov 2008 11:33:47 -0500 Subject: [PATCH] use cached fave stream to save DB hits for faves darcs-hash:20081122163347-84dde-abb0dfc800f65f50951c5517af3bfda48013c6ed.gz --- classes/User.php | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/classes/User.php b/classes/User.php index 38a56d1c81..12f1749443 100644 --- a/classes/User.php +++ b/classes/User.php @@ -273,6 +273,28 @@ class User extends Memcached_DataObject } function hasFave($notice) { + $cache = common_memcache(); + + # XXX: Kind of a hack. + + if ($cache) { + # This is the stream of favorite notices, in rev chron + # order. This forces it into cache. + $faves = $this->favoriteNotices(0, NOTICE_CACHE_WINDOW); + + while ($faves->fetch()) { + if ($faves->id > $notice->id) { + # If we passed it, it's not a fave + return false; + } else if ($faves->id == $notice->id) { + # If it matches a cached notice, then it's a fave + return true; + } + } + # If it's past the end of the cache window, + # fall through to the default + } + $fave = Fave::pkeyGet(array('user_id' => $this->id, 'notice_id' => $notice->id)); return ((is_null($fave)) ? false : true);