X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fcachingnoticestream.php;h=e68bb3a1f2a476ec1ba7aac218a571a5d585ebd5;hb=035aae2745e25d44ab9fe1b7bdffbcaa505ba970;hp=a1b3b3fe82d77efe216b1e0fc5b314948f20d6d5;hpb=44bcc942b874c742a079fb1b18cac834bf96c986;p=quix0rs-gnu-social.git diff --git a/lib/cachingnoticestream.php b/lib/cachingnoticestream.php index a1b3b3fe82..e68bb3a1f2 100644 --- a/lib/cachingnoticestream.php +++ b/lib/cachingnoticestream.php @@ -4,7 +4,7 @@ * Copyright (C) 2011, StatusNet, Inc. * * A stream of notices - * + * * PHP version 5 * * This program is free software: you can redistribute it and/or modify @@ -51,14 +51,16 @@ class CachingNoticeStream extends NoticeStream public $stream = null; public $cachekey = null; + public $useLast = true; - function __construct($stream, $cachekey) + function __construct($stream, $cachekey, $useLast = true) { $this->stream = $stream; $this->cachekey = $cachekey; + $this->useLast = $useLast; } - function getNoticeIds($offset=0, $limit=20, $sinceId=0, $maxId=0) + function getNoticeIds($offset, $limit, $sinceId, $maxId) { $cache = Cache::instance(); @@ -85,29 +87,31 @@ class CachingNoticeStream extends NoticeStream return $ids; } - // Check the cache to see if we have a "last-known-good" version. - // The actual cache gets blown away when new notices are added, but - // the "last" value holds a lot of info. We might need to only generate - // a few at the "tip", which can bound our queries and save lots - // of time. + if ($this->useLast) { + // Check the cache to see if we have a "last-known-good" version. + // The actual cache gets blown away when new notices are added, but + // the "last" value holds a lot of info. We might need to only generate + // a few at the "tip", which can bound our queries and save lots + // of time. - $laststr = $cache->get($idkey.';last'); + $laststr = $cache->get($idkey.';last'); - if ($laststr !== false) { - $window = explode(',', $laststr); - $last_id = $window[0]; - $new_ids = $this->stream->getNoticeIds(0, self::CACHE_WINDOW, $last_id, 0); + if ($laststr !== false) { + $window = explode(',', $laststr); + $last_id = $window[0]; + $new_ids = $this->stream->getNoticeIds(0, self::CACHE_WINDOW, $last_id, 0); - $new_window = array_merge($new_ids, $window); + $new_window = array_merge($new_ids, $window); - $new_windowstr = implode(',', $new_window); + $new_windowstr = implode(',', $new_window); - $result = $cache->set($idkey, $new_windowstr); - $result = $cache->set($idkey . ';last', $new_windowstr); + $result = $cache->set($idkey, $new_windowstr); + $result = $cache->set($idkey . ';last', $new_windowstr); - $ids = array_slice($new_window, $offset, $limit); + $ids = array_slice($new_window, $offset, $limit); - return $ids; + return $ids; + } } // No cache hits :( Generate directly and stick the results @@ -118,7 +122,10 @@ class CachingNoticeStream extends NoticeStream $windowstr = implode(',', $window); $result = $cache->set($idkey, $windowstr); - $result = $cache->set($idkey . ';last', $windowstr); + + if ($this->useLast) { + $result = $cache->set($idkey . ';last', $windowstr); + } // Return just the slice that was requested