Heim php教程 php手册 ssdb的Yii cache扩展

ssdb的Yii cache扩展

Jun 06, 2016 pm 08:12 PM
cache google Level yii 扩展

google的leveldb越来越被很多人接受。国内的ideawu基于leveldb还写了一个ssdb的前置扩展用来实现了很多功能,比如标准的getset和hget,hset还有zset,zget,也实现了队列。当然pub/sub就没有办法实现了。毕竟它和redis还是有点区别。 基于标准的ssdb的类,写了

google的leveldb越来越被很多人接受。国内的ideawu基于leveldb还写了一个ssdb的前置扩展用来实现了很多功能,比如标准的getset和hget,hset还有zset,zget,也实现了队列。当然pub/sub就没有办法实现了。毕竟它和redis还是有点区别。

基于标准的ssdb的类,写了个小扩展,扩展了Yii的Cache类:

    class?CSsdbCache?extends?CCache??
    {??
    ????/**?
    ?????*?@var?string?hostname?to?use?for?connecting?to?the?redis?server.?Defaults?to?'127.0.0.1'.?
    ?????*/??
    ????public?$hostname?=?'127.0.0.1';??
    ????/**?
    ?????*?@var?int?the?port?to?use?for?connecting?to?the?ssdb?server.?Default?port?is?8888.?
    ?????*/??
    ????public?$port?=?8888;??
    ????/**?
    ?????*?@var?float?
    ?????*/??
    ????public?$timeout?=?2000;??
    ????public?$serializer?=?false;??
    ????public?$_cache;??
    ????protected?$_cachekeys?=?'ssdb_cachekey';??
    ??????
    ????public?function?init()?{??
    ????????parent::init();??
    ????}??
    ????/**?
    ?????*?@return?SSDB?
    ?????*/??
    ????public?function?getSsdbCache()?{??
    ????????if?($this->_cache?!==?null)??
    ????????????return?$this->_cache;??
    ????????else?{??
    ????????????return?$this->_cache?=?new?SimpleSSDB($this->hostname,?$this->port,?$this->timeout);??
    ????????}??
    ????}??
    ????public?function?getkeys()?{??
    ????????return?$this->getSsdbCache()->hkeys($this->_cachekeys,?"",?"",?$this->getSsdbCache()->hsize($this->_cachekeys));??
    ????}??
    ????/**?
    ?????*?Retrieves?a?value?from?cache?with?a?specified?key.?
    ?????*?This?is?the?implementation?of?the?method?declared?in?the?parent?class.?
    ?????*?@param?string?$key?a?unique?key?identifying?the?cached?value?
    ?????*?@return?string|boolean?the?value?stored?in?cache,?false?if?the?value?is?not?in?the?cache?or?expired.?
    ?????*/??
    ????protected?function?getValue($key)?{??
    ????????return?unserialize($this->getSsdbCache()->get($key));??
    ????}??
    ??
    ????/**?
    ?????*?Stores?a?value?identified?by?a?key?in?cache.?
    ?????*?This?is?the?implementation?of?the?method?declared?in?the?parent?class.?
    ?????*?@param?string??$key????the?key?identifying?the?value?to?be?cached?
    ?????*?@param?string??$value??the?value?to?be?cached?
    ?????*?@param?integer?$expire?the?number?of?seconds?in?which?the?cached?value?will?expire.?0?means?never?expire.?
    ?????*?@return?boolean?true?if?the?value?is?successfully?stored?into?cache,?false?otherwise?
    ?????*/??
    ????protected?function?setValue($key,?$value,?$expire)?{??
    ????????$this->getSsdbCache()->hset($this->_cachekeys,?$key,?1);??
    ????????if?($expire?>?0)?{??
    ????????????//$expire?+=?time();??
    ????????????return?$this->getSsdbCache()->setx($key,?serialize($value),?(int)?$expire);??
    ????????}??
    ????????else?{??
    ????????????return?$this->getSsdbCache()->set($key,?serialize($value));??
    ????????}??
    ????}??
    ????/**?
    ?????*?Stores?a?value?identified?by?a?key?into?cache?if?the?cache?does?not?contain?this?key.?
    ?????*?This?is?the?implementation?of?the?method?declared?in?the?parent?class.?
    ?????*?@param?string??$key????the?key?identifying?the?value?to?be?cached?
    ?????*?@param?string??$value??the?value?to?be?cached?
    ?????*?@param?integer?$expire?the?number?of?seconds?in?which?the?cached?value?will?expire.?0?means?never?expire.?
    ?????*?@return?boolean?true?if?the?value?is?successfully?stored?into?cache,?false?otherwise?
    ?????*/??
    ????protected?function?addValue($key,?$value,?$expire)?{??
    ????????return?$this->setValue($key,?$value,?$expire);??
    ????}??
    ????/**?
    ?????*?Deletes?a?value?with?the?specified?key?from?cache?
    ?????*?This?is?the?implementation?of?the?method?declared?in?the?parent?class.?
    ?????*?@param?string?$key?the?key?of?the?value?to?be?deleted?
    ?????*?@return?boolean?if?no?error?happens?during?deletion?
    ?????*/??
    ????protected?function?deleteValue($key)?{??
    ????????$this->getSsdbCache()->hdel($this->_cachekeys,?$key);??
    ????????return?$this->getSsdbCache()->del($key);??
    ????}??
    ????/**?
    ?????*?@return?boolean?whether?the?flush?operation?was?successful.?
    ?????*/??
    ????protected?function?flushValues()?{??
    ????????$this->getSsdbCache()->multi_del($this->getkeys());??
    ????????return?$this->getSsdbCache()->hclear($this->_cachekeys);??
    ????}??
    }??
Nach dem Login kopieren

其实代码很简单,不过由于ssdb默认没有serialize功能,所以在存储之前,得先主动的serialize,然后get的时候unserialize。不然就没有办法存储数组了。

由于ssdb没有flush功能。所以利用hget/hset将所有的key存储下来。flush的时候把hget获取的key读出来删除。然后再清掉这个hget的key

最后还有expire。ssdb里的setx第三个参数。。。居然不是expire,而是ttl。开始的时候,一直都当成expire。结果浪费了很长时间

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Gerüchten zufolge sollen Google Pixel 9 und Pixel 9 Pro bei der Veröffentlichung über die Creative Assistant AI verfügen Gerüchten zufolge sollen Google Pixel 9 und Pixel 9 Pro bei der Veröffentlichung über die Creative Assistant AI verfügen Jun 22, 2024 am 10:50 AM

Derzeit werden voraussichtlich im Herbst vier neue Pixel-Smartphones auf den Markt kommen. Um es noch einmal zusammenzufassen: Es wird gemunkelt, dass die Serie beim Start das Pixel 9 und das Pixel 9 Pro beinhalten wird. Allerdings wird das Pixel 9 Pro eher ein Konkurrent des iPhone 16 Pro als ein Pixel 8 Pro sein (aktuell).

Google AI kündigt Gemini 1.5 Pro und Gemma 2 für Entwickler an Google AI kündigt Gemini 1.5 Pro und Gemma 2 für Entwickler an Jul 01, 2024 am 07:22 AM

Google AI hat damit begonnen, Entwicklern Zugriff auf erweiterte Kontextfenster und kostensparende Funktionen zu bieten, beginnend mit dem großen Sprachmodell Gemini 1.5 Pro (LLM). Bisher über eine Warteliste verfügbar, das vollständige 2-Millionen-Token-Kontextfenster

Der APK-Teardown der Google-App-Beta enthüllt neue Erweiterungen für den Gemini AI-Assistenten Der APK-Teardown der Google-App-Beta enthüllt neue Erweiterungen für den Gemini AI-Assistenten Jul 30, 2024 pm 01:06 PM

Googles KI-Assistent Gemini dürfte noch leistungsfähiger werden, wenn man den APK-Teardown des neuesten Updates (v15.29.34.29 Beta) in Betracht zieht. Berichten zufolge könnte der neue KI-Assistent des Tech-Giganten mehrere neue Erweiterungen erhalten. Diese Erweiterungen wi

Google Tensor G4 von Pixel 9 Pro XL hinkt Tensor G2 in Genshin Impact Google Tensor G4 von Pixel 9 Pro XL hinkt Tensor G2 in Genshin Impact Aug 24, 2024 am 06:43 AM

Google hat kürzlich auf die Leistungsbedenken bezüglich des Tensor G4 der Pixel-9-Reihe reagiert. Das Unternehmen sagte, dass der SoC nicht darauf ausgelegt sei, Benchmarks zu schlagen. Stattdessen konzentrierte sich das Team darauf, dass es in den Bereichen, in denen Google das c wünscht, eine gute Leistung erbringt

Google Pixel 9 Pro XL wird im Desktop-Modus getestet Google Pixel 9 Pro XL wird im Desktop-Modus getestet Aug 29, 2024 pm 01:09 PM

Google hat den DisplayPort Alternate Mode mit der Pixel-8-Serie eingeführt und ist auch in der neu eingeführten Pixel-9-Reihe vorhanden. Während es hauptsächlich dazu dient, das Smartphone-Display mit einem angeschlossenen Bildschirm zu spiegeln, können Sie es auch für den Desktop verwenden

Google Pixel 9-Smartphones werden trotz siebenjähriger Update-Verpflichtung nicht mit Android 15 auf den Markt kommen Google Pixel 9-Smartphones werden trotz siebenjähriger Update-Verpflichtung nicht mit Android 15 auf den Markt kommen Aug 01, 2024 pm 02:56 PM

Die Pixel-9-Serie ist fast da, die Veröffentlichung ist für den 13. August geplant. Jüngsten Gerüchten zufolge werden Pixel 9, Pixel 9 Pro und Pixel 9 Pro XL das Pixel 8 und Pixel 8 Pro (aktuell 749 US-Dollar bei Amazon) widerspiegeln und mit 128 GB Speicher beginnen.

Der neue Google Pixel-Desktopmodus wird in einem neuen Video als mögliche Alternative zu Motorola Ready For und Samsung DeX vorgestellt Der neue Google Pixel-Desktopmodus wird in einem neuen Video als mögliche Alternative zu Motorola Ready For und Samsung DeX vorgestellt Aug 08, 2024 pm 03:05 PM

Es sind einige Monate vergangen, seit Android Authority einen neuen Android-Desktop-Modus vorgestellt hat, den Google in Android 14 QPR3 Beta 2.1 versteckt hat. Wir kommen direkt auf den Fersen, als Google die DisplayPort-Alt-Modus-Unterstützung für Pixel 8 und Pixel 8 hinzufügt

Google öffnet AI Test Kitchen & Imagen 3 für die meisten Nutzer Google öffnet AI Test Kitchen & Imagen 3 für die meisten Nutzer Sep 12, 2024 pm 12:17 PM

Die AI Test Kitchen von Google, die eine Suite von KI-Designtools zum Spielen enthält, ist mittlerweile für Nutzer in weit über 100 Ländern weltweit geöffnet. Dieser Schritt markiert das erste Mal, dass viele Menschen auf der ganzen Welt Imagen 3, Googl, nutzen können

See all articles