public static function getBlockedIDs($profile_id, $offset, $limit) { $cacheKey = 'qvitterblocked:' . $profile_id; $queryoffset = $offset; $querylimit = $limit; if ($offset + $limit <= self::CACHE_WINDOW) { // Oh, it seems it should be cached $ids = self::cacheGet($cacheKey); if (is_array($ids)) { return array_slice($ids, $offset, $limit); } // Being here indicates we didn't find anything cached // so we'll have to fill it up simultaneously $queryoffset = 0; $querylimit = self::CACHE_WINDOW; } $blocks = new Profile_block(); $blocks->blocker = $profile_id; $blocks->selectAdd('blocked'); $blocks->whereAdd("blocked != {$profile_id}"); $blocks->orderBy('modified DESC'); $blocks->limit($queryoffset, $querylimit); if (!$blocks->find()) { return array(); } $ids = $blocks->fetchAll('blocked'); // If we're simultaneously filling up cache, remember to slice if ($queryoffset === 0 && $querylimit === self::CACHE_WINDOW) { self::cacheSet($cacheKey, $ids); return array_slice($ids, $offset, $limit); } return $ids; }