+ if (class_exists('Memcache')) {
+ self::$cache = new Memcache();
+
+ // Can't close persistent connections, making forking painful.
+ //
+ // @fixme only do this in *parent* CLI processes.
+ // single-process and child-processes *should* use persistent.
+ $persist = php_sapi_name() != 'cli';
+ if (is_array($servers)) {
+ foreach($servers as $server) {
+ self::$cache->addServer($server, 11211, $persist);
+ }
+ } else {
+ self::$cache->addServer($servers, 11211, $persist);
+ }
+ }
+
+ self::$base = $dbname;
+ }
+
+ static function cacheKey($k, $v) {
+ return 'statusnet:' . self::$base . ':status_network:'.$k.':'.$v;
+ }
+
+ static function memGet($k, $v)
+ {
+ if (!self::$cache) {
+ return self::staticGet($k, $v);
+ }
+
+ $ck = self::cacheKey($k, $v);
+
+ $sn = self::$cache->get($ck);
+
+ if (empty($sn)) {
+ $sn = self::staticGet($k, $v);
+ if (!empty($sn)) {
+ self::$cache->set($ck, clone($sn));
+ }
+ }
+
+ return $sn;
+ }
+
+ function decache()
+ {
+ if (self::$cache) {
+ $keys = array('nickname', 'hostname', 'pathname');
+ foreach ($keys as $k) {
+ $ck = self::cacheKey($k, $this->$k);
+ self::$cache->delete($ck);
+ }
+ }