ssdb的Yii cache扩展
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);?? ????}?? }??
其实代码很简单,不过由于ssdb默认没有serialize功能,所以在存储之前,得先主动的serialize,然后get的时候unserialize。不然就没有办法存储数组了。
由于ssdb没有flush功能。所以利用hget/hset将所有的key存储下来。flush的时候把hget获取的key读出来删除。然后再清掉这个hget的key
最后还有expire。ssdb里的setx第三个参数。。。居然不是expire,而是ttl。开始的时候,一直都当成expire。结果浪费了很长时间
原文地址:ssdb的Yii cache扩展, 感谢原作者分享。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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 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

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 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 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

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.

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

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
