SSDB 是一個(gè)高性能 NoSQL 數(shù)據(jù)庫, 支持 zset 數(shù)據(jù)結(jié)構(gòu), 用于替代 Redis. 官方網(wǎng)站是 http://ssdb.io. 本文檔介紹了 SSDB 的 PHP 客戶端 API.
注意: SSDB 所使用的名詞 "hashmap", "hash", "map" 表示相同的意思.
<?php include_once('SSDB.php'); try{ $ssdb = new SimpleSSDB('127.0.0.1', 8888); }catch(SSDBException $e){ die(LINE . ' ' . $e->getMessage()); } $ret = $ssdb->set('key', 'value'); if($ret === false){ // error! } echo $ssdb->get('key');
如果無法連接到 SSDB 服務(wù)器, SimpleSSDB 將拋出異常. 大多數(shù)的方法(除了少數(shù)幾個(gè)例外)通過返回 false 來標(biāo)明出錯(cuò). 所以要使用強(qiáng)制等于(===)來判斷返回值.
如果出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤, 所有的方法將會(huì)拋出 SSDBException 異常.
注意: 因?yàn)閷?shí)現(xiàn)的原因, 請(qǐng)保證所有的參數(shù)加起來不超過 10MB 大小.
創(chuàng)建 SimpleSSDB 的實(shí)例, 并連接到 SSDB 服務(wù)器. 如果無法連接到服務(wù)器, 將拋出異常.
SimpleSSDB 的實(shí)例.
$ssdb = new SimpleSSDB('127.0.0.1', 8888);
Since: 1.7.0.0
配置密碼, 之后將用于向服務(wù)器校驗(yàn). 這個(gè)校驗(yàn)不是立即進(jìn)行的, 而是等你執(zhí)行第一條命令的時(shí)候才發(fā)給服務(wù)器. 注意, 密碼是明文傳輸?shù)?
出錯(cuò)則返回 false, 否則返回 null.
$ssdb->auth('very-strong-password');
設(shè)置指定 key 的值內(nèi)容.
出錯(cuò)則返回 false, 其它值表示正常.
$ssdb->set('key', 'value');
設(shè)置指定 key 的值內(nèi)容, 同時(shí)設(shè)置存活時(shí)間.
出錯(cuò)則返回 false, 其它值表示正常.
$ssdb->setx('key', 'value', 60);
當(dāng) key 不存在時(shí), 設(shè)置指定 key 的值內(nèi)容. 如果已存在, 則不設(shè)置.
出錯(cuò)則返回 false, 1: value 已經(jīng)設(shè)置, 0: key 已經(jīng)存在, 不更新.
$ssdb->setnx('key', 'value');
設(shè)置 key(只針對(duì) KV 類型) 的存活時(shí)間.
出錯(cuò)則返回 false. 如果 key 存在并設(shè)置成功, 返回 1, 如果 key 不存在, 返回 0.
$ssdb->expire('key', 60);
返回 key(只針對(duì) KV 類型) 的存活時(shí)間.
出錯(cuò)則返回 false, 否則返回 key 的存活時(shí)間(秒), -1 表示沒有設(shè)置存活時(shí)間.
$ssdb->ttl('key');
獲取指定 key 的值內(nèi)容.
如果 key 不存在則返回 null, 如果出錯(cuò)則返回 false, 否則返回 key 對(duì)應(yīng)的值內(nèi)容.
$ssdb->get('key');
更新 key 對(duì)應(yīng)的 value, 并返回更新前的舊的 value.
如果 key 不存在則返回 null, 如果出錯(cuò)則返回 false, 否則返回 key 對(duì)應(yīng)的值內(nèi)容.
$ssdb->getset('key', 'value');
刪除指定的 key.
如果出錯(cuò)則返回 false, 其它值表示正常. 你無法通過返回值來判斷被刪除的 key 是否存在.
$ssdb->del('key');
從 1.7.0.1 起, 如果 value 不能轉(zhuǎn)換成整數(shù), incr 會(huì)返回錯(cuò)誤.
使 key 對(duì)應(yīng)的值增加 num. 參數(shù) num 可以為負(fù)數(shù). 如果原來的值不是整數(shù)(字符串形式的整數(shù)), 它會(huì)被先轉(zhuǎn)換成整數(shù).
如果出錯(cuò)則返回 false, 否則返回新的值.
$ssdb->incr('key', 1);
判斷指定的 key 是否存在.
如果存在, 返回 true, 否則返回 false.
$ssdb->exists('key');
獲取字符串內(nèi)指定位置的位值(BIT).
返回位值(0 或 1), 如果 key 不存在或者偏移超過活字符串長(zhǎng)度范圍, 返回 0.
$ssdb->getbit('key', 9);
設(shè)置字符串內(nèi)指定位置的位值(BIT), 字符串的長(zhǎng)度會(huì)自動(dòng)擴(kuò)展.
返回原來的位值. 如果 val 不是 0 或者 1, 返回 false.
$ssdb->setbit('key', 9, 1);
計(jì)算字符串的子串所包含的位值為 1 的個(gè)數(shù). 若 start 是負(fù)數(shù), 則從字符串末尾算起. 若 end 是負(fù)數(shù), 則表示從字符串末尾算起(包含). 類似 Redis 的 bitcount
返回位值為 1 的個(gè)數(shù). 出錯(cuò)返回 false.
$ssdb->bitcount('key', 2, 10);
計(jì)算字符串的子串所包含的位值為 1 的個(gè)數(shù). 若 start 是負(fù)數(shù), 則從字符串末尾算起. 若 size 是負(fù)數(shù), 則表示從字符串末尾算起, 忽略掉那么多字節(jié).
返回位值為 1 的個(gè)數(shù). 出錯(cuò)返回 false.
$ssdb->countbit('key', 2, 10);
獲取字符串的子串. 若 start 是負(fù)數(shù), 則從字符串末尾算起. 若 size 是負(fù)數(shù), 則表示從字符串末尾算起, 忽略掉那么多字節(jié)(類似 PHP 的 substr()).
字符串的子串.
$ssdb->substr('key', 2, 10);
計(jì)算字符串的長(zhǎng)度(字節(jié)數(shù)).
返回字符串的長(zhǎng)度, key 不存在則返回 0.
$ssdb->strlen('key');
列出處于區(qū)間 (key_start, key_end] 的 key 列表.
("", ""] 表示整個(gè)區(qū)間.
如果出錯(cuò)則返回 false, 否則返回包含 key 的數(shù)組.
$ssdb->keys('a', 'z', 10);
列出處于區(qū)間 (key_start, key_end] 的 key-value 列表.
("", ""] 表示整個(gè)區(qū)間.
如果出錯(cuò)則返回 false, 否則返回包含 key-value 的數(shù)關(guān)聯(lián)組.
$ssdb->scan('a', 'z', 10);遍歷 key-value 對(duì)列表
$start = ''; $limit = 1000; while(1){ $kvs = $ssdb->scan($start, '', $limit); if(!$kvs){ break; } // do something on key-value pairs... $keys = array_keys(array_slice($kvs, -1, 1, true)); $max_key = $keys[0]; $start = $max_key; }
列出處于區(qū)間 (key_start, key_end] 的 key-value 列表, 反向順序.
("", ""] 表示整個(gè)區(qū)間.
如果出錯(cuò)則返回 false, 否則返回包含 key-value 的數(shù)關(guān)聯(lián)組.
$ssdb->rscan('a', 'z', 10);
批量設(shè)置一批 key-value.
出錯(cuò)則返回 false, 其它值表示正常.
$ssdb->multi_set(array( 'a' => 1, 'b' => 2, ));
批量獲取一批 key 對(duì)應(yīng)的值內(nèi)容.
如果出錯(cuò)則返回 false, 否則返回包含 key-value 的關(guān)聯(lián)數(shù)組, 如果某個(gè) key 不存在, 則它不會(huì)出現(xiàn)在返回?cái)?shù)組中.
$ssdb->multi_get(array('k1', 'k2'));
批量刪除一批 key 和其對(duì)應(yīng)的值內(nèi)容.
出錯(cuò)則返回 false, 其它值表示正常.
$ssdb->multi_del(array('k1', 'k2'));
設(shè)置 hashmap 中指定 key 對(duì)應(yīng)的值內(nèi)容.
出錯(cuò)則返回 false, 其它值表示正常.
$ssdb->hset('h', 'key', 'value');
獲取 hashmap 中指定 key 的值內(nèi)容.
如果 key 不存在則返回 null, 如果出錯(cuò)則返回 false, 否則返回 key 對(duì)應(yīng)的值內(nèi)容.
$ssdb->hget('h', 'key');
獲取 hashmap 中的指定 key.
如果出錯(cuò)則返回 false, 其它值表示正常. 你無法通過返回值來判斷被刪除的 key 是否存在.
$ssdb->hdel('h', 'key');
從 1.7.0.1 起, 如果 value 不能轉(zhuǎn)換成整數(shù), incr 會(huì)返回錯(cuò)誤.
使 hashmap 中的 key 對(duì)應(yīng)的值增加 num. 參數(shù) num 可以為負(fù)數(shù). 如果原來的值不是整數(shù)(字符串形式的整數(shù)), 它會(huì)被先轉(zhuǎn)換成整數(shù).
如果出錯(cuò)則返回 false, 否則返回新的值.
$ssdb->hincr('h', 'key', 1);
判斷指定的 key 是否存在于 hashmap 中.
如果存在, 返回 true, 否則返回 false.
$ssdb->hexists('h', 'key');
返回 hashmap 中的元素個(gè)數(shù).
出錯(cuò)則返回 false, 否則返回元素的個(gè)數(shù), 0 表示不存在 hashmap(空).
$ssdb->hsize('h');
列出名字處于區(qū)間 (name_start, name_end] 的 hashmap.
("", ""] 表示整個(gè)區(qū)間.
出錯(cuò)則返回 false, 返回返回包含名字的數(shù)組.
$ssdb->hlist('a', 'z', 10);
列出 hashmap 中處于區(qū)間 (key_start, key_end] 的 key 列表.
("", ""] 表示整個(gè)區(qū)間.
如果出錯(cuò)則返回 false, 否則返回包含 key 的數(shù)組.
$ssdb->hkeys('h', 'a', 'z', 10);
返回整個(gè) hashmap.
如果出錯(cuò)則返回 false, 否則返回包含 key-value 的關(guān)聯(lián)數(shù)組.
$ssdb->hgetall('h');
列出 hashmap 中處于區(qū)間 (key_start, key_end] 的 key-value 列表.
("", ""] 表示整個(gè)區(qū)間.
如果出錯(cuò)則返回 false, 否則返回包含 key-value 的關(guān)聯(lián)數(shù)組.
$ssdb->hscan('h', 'a', 'z', 10);
遍歷 hash:
$start = ''; while(1){ $kvs = $ssdb->hscan($name, $start, '', 10); if(!$kvs){ break; } // do sth on kvs here$keys = array_keys($kvs); $start = $keys[count($keys) - 1];}
列出 hashmap 中處于區(qū)間 (key_start, key_end] 的 key-value 列表, 反向順序.
("", ""] 表示整個(gè)區(qū)間.
如果出錯(cuò)則返回 false, 否則返回包含 key-score 的關(guān)聯(lián)數(shù)組.
$ssdb->hrscan('h', 'a', 'z', 10);
刪除 hashmap 中的所有 key.
如果出錯(cuò)則返回 false, 否則返回刪除的 key 的數(shù)量.
$ssdb->hclear('h');
批量設(shè)置 hashmap 中的 key-value.
出錯(cuò)則返回 false, 其它值表示正常.
$ssdb->multi_hset('h', array( 'a' => 1, 'b' => 2, ));
批量獲取 hashmap 中多個(gè) key 對(duì)應(yīng)的權(quán)重值.
如果出錯(cuò)則返回 false, 否則返回包含 key-value 的關(guān)聯(lián)數(shù)組, 如果某個(gè) key 不存在, 則它不會(huì)出現(xiàn)在返回?cái)?shù)組中.
$ssdb->multi_hget('h', array('k1', 'k2'));
批量刪除 hashmap 中的 key.
出錯(cuò)則返回 false, 其它值表示正常.
$ssdb->multi_hdel('h', array('k1', 'k2'));
設(shè)置 zset 中指定 key 對(duì)應(yīng)的權(quán)重值.
出錯(cuò)則返回 false, 其它值表示正常.
$ssdb->zset('z', 'key', 100);
獲取 zset 中指定 key 的權(quán)重值.
如果 key 不存在則返回 null, 如果出錯(cuò)則返回 false, 否則返回 key 對(duì)應(yīng)的權(quán)重值.
$ssdb->zget('z', 'key');
獲取 zset 中的指定 key.
如果出錯(cuò)則返回 false, 其它值表示正常. 你無法通過返回值來判斷被刪除的 key 是否存在.
$ssdb->zdel('hz, 'key');
使 zset 中的 key 對(duì)應(yīng)的值增加 num. 參數(shù) num 可以為負(fù)數(shù). 如果原來的值不是整數(shù)(字符串形式的整數(shù)), 它會(huì)被先轉(zhuǎn)換成整數(shù).
如果出錯(cuò)則返回 false, 否則返回新的值.
$ssdb->zincr('z', 'key', 1);
判斷指定的 key 是否存在于 zset 中.
如果存在, 返回 true, 否則返回 false.
$ssdb->zexists('z', 'key');
返回 zset 中的元素個(gè)數(shù).
出錯(cuò)則返回 false, 否則返回元素的個(gè)數(shù), 0 表示不存在 zset(空).
$ssdb->zsize('z');
列出名字處于區(qū)間 (name_start, name_end] 的 zset.
("", ""] 表示整個(gè)區(qū)間.
出錯(cuò)則返回 false, 否則返回包含名字的數(shù)組.
$ssdb->zlist('a', 'z', 10);
列出 zset 中的 key 列表. 參見 zscan().
如果出錯(cuò)則返回 false, 否則返回包含 key 的數(shù)組.
$ssdb->zkeys('z', '', 1, 100, 10);
列出 zset 中處于區(qū)間 (key_start+score_start, score_end] 的 key-score 列表. 如果 key_start 為空, 那么對(duì)應(yīng)權(quán)重值大于或者等于 score_start 的 key 將被返回. 如果 key_start 不為空, 那么對(duì)應(yīng)權(quán)重值大于 score_start 的 key, 或者大于 key_start 且對(duì)應(yīng)權(quán)重值等于 score_start 的 key 將被返回.
也就是說, 返回的 key 在 (key.score == score_start && key > key_start || key.score > score_start), 并且 key.score <= score_end 區(qū)間. 先判斷 score_start, score_end, 然后判斷 key_start.
("", ""] 表示整個(gè)區(qū)間.
如果出錯(cuò)則返回 false, 否則返回包含 key-score 的關(guān)聯(lián)數(shù)組.
$ssdb->zscan('z', '', 1, 100, 10);
遍歷 zset:
$key_start = ''; $score_start = ''; while(1){ $items = $ssdb->zscan($zname, $key_start, $score_start, '', 10); if(!$items){ break; } foreach($items as $key=>$score){ // process($key, $score)...// 記住最大的元素和它的權(quán)重 $key_start = $key; $score_start = $score; }}
列出 zset 中的 key-score 列表, 反向順序. 參見 zkeys().
如果出錯(cuò)則返回 false, 否則返回包含 key-score 的關(guān)聯(lián)數(shù)組.
$ssdb->zrscan('z', '', 100, 1, 10);
注意! 本方法可能會(huì)非常慢! 請(qǐng)?jiān)陔x線環(huán)境中使用.
返回指定 key 在 zset 中的排序位置(排名), 排名從 0 開始. zrrank 獲取是是倒序排名.
出錯(cuò)則返回 false, null 表示 key 不存在于 zset, 否則返回排名.
$ssdb->zrank('z', 'k1');
注意! 本方法在 offset 越來越大時(shí), 會(huì)越慢!
根據(jù)下標(biāo)索引區(qū)間 [offset, offset + limit) 獲取 key-score 對(duì), 下標(biāo)從 0 開始. zrrange 是反向順序獲取.
如果出錯(cuò)則返回 false, 否則返回包含 key-score 的關(guān)聯(lián)數(shù)組.
$ssdb->zrange('z', 0, 10);
刪除 zset 中的所有 key.
如果出錯(cuò)則返回 false, 否則返回刪除的 key 的數(shù)量.
$ssdb->zclear('z');
返回處于區(qū)間 [start,end] key 數(shù)量.
如果出錯(cuò)則返回 false, 否則返回符合條件的 key 的數(shù)量.
$ssdb->zcount('z', 0, 100);
返回 key 處于區(qū)間 [start,end] 的 score 的和.
如果出錯(cuò)則返回 false, 否則返回符合條件的 score 的求和.
$ssdb->zsum('z', 0, 100);
返回 key 處于區(qū)間 [start,end] 的 score 的平均值.
如果出錯(cuò)則返回 false, 否則返回符合條件的 score 的平均值.
$ssdb->zavg('z', 0, 100);
刪除位置處于區(qū)間 [start,end] 的元素.
出錯(cuò)則返回 false, 否則返回被刪除的元素個(gè)數(shù).
$ssdb->zremrangebyrank('z', 1, 2);
刪除權(quán)重處于區(qū)間 [start,end] 的元素.
出錯(cuò)則返回 false, 否則返回被刪除的元素個(gè)數(shù).
$ssdb->zremrangebyscore('z', 1, 2);
從 zset 首部刪除并返回 limit 個(gè)元素.
如果出錯(cuò)則返回 false, 否則返回包含 key-score 的關(guān)聯(lián)數(shù)組.
$ssdb->zpop_front('z', 3);
從 zset 尾部刪除并返回 limit 個(gè)元素.
如果出錯(cuò)則返回 false, 否則返回包含 key-score 的關(guān)聯(lián)數(shù)組.
$ssdb->zpop_back('z', 3);
批量設(shè)置 zset 中的 key-score.
出錯(cuò)則返回 false, 其它值表示正常.
$ssdb->multi_zset('z', array( 'a' => 1, 'b' => 2, ));
批量獲取 zset 中多個(gè) key 對(duì)應(yīng)的權(quán)重值.
如果出錯(cuò)則返回 false, 否則返回包含 key-score 的關(guān)聯(lián)數(shù)組, 如果某個(gè) key 不存在, 則它不會(huì)出現(xiàn)在返回?cái)?shù)組中.
$ssdb->multi_zget('z', array('k1', 'k2'));
批量刪除 zset 中的 key.
出錯(cuò)則返回 false, 其它值表示正常.
$ssdb->multi_zdel('z', array('k1', 'k2'));
返回隊(duì)列的長(zhǎng)度.
出錯(cuò)返回 false, 否則返回一個(gè)整數(shù), 0 表示隊(duì)列不存在(或者為空).
$ssdb->qsize('q');
列出名字處于區(qū)間 (name_start, name_end] 的 queue/list.
("", ""] 表示整個(gè)區(qū)間.
出錯(cuò)則返回 false, 返回返回包含名字的數(shù)組.
$ssdb->qlist('a', 'z', 10);
清空一個(gè)隊(duì)列.
出錯(cuò)返回 false.
$ssdb->qclear('q');
返回隊(duì)列的第一個(gè)元素.
出錯(cuò)返回 false, 隊(duì)列不存在(或者為空)則返回 null, 否則返回一個(gè)元素.
$ssdb->qfront('q');
返回隊(duì)列的最后一個(gè)元素.
出錯(cuò)返回 false, 隊(duì)列不存在(或者為空)則返回 null, 否則返回一個(gè)元素.
$ssdb->qback('q');
返回指定位置的元素. 0 表示第一個(gè)元素, 1 是第二個(gè) ... -1 是最后一個(gè).
出錯(cuò)返回 false, 如果指定位置不存在一個(gè)元素, 則返回 null, 否則返回一個(gè)元素.
$ssdb->qget('q', -2);
Since: 1.7.0.0
更新位于 index 位置的元素. 如果超過現(xiàn)有的元素范圍, 會(huì)返回錯(cuò)誤.
出錯(cuò)則返回 false, 其它值表示正常.
$ssdb->qset('q', 0, 'new val');
返回下標(biāo)處于區(qū)域 [offset, offset + limit] 的元素.
如果出錯(cuò)則返回 false, 否則返回?cái)?shù)組.
$ssdb->qrange('q', 0, 10);
返回下標(biāo)處于區(qū)域 [begin, end] 的元素. begin 和 end 可以是負(fù)數(shù)
出錯(cuò)返回 false, 否則返回包含元素的數(shù)組.
$ssdb->qslice('q', 0, -1);
本函數(shù)是 qpush_back() 的別名.
往隊(duì)列的首部添加一個(gè)或者多個(gè)元素
添加元素之后, 隊(duì)列的長(zhǎng)度, 出錯(cuò)返回 false.
$ssdb->qpush_front('q', 'a');
往隊(duì)列的尾部添加一個(gè)或者多個(gè)元素
添加元素之后, 隊(duì)列的長(zhǎng)度, 出錯(cuò)返回 false.
$ssdb->qpush_back('q', 'a');
本函數(shù)是 qpop_front() 的別名.
從隊(duì)列首部彈出一個(gè)或者多個(gè)元素.
出錯(cuò)返回 false. 當(dāng) size 未指定或者小于等于 1 時(shí), 隊(duì)列不存在(或者為空)則返回 null, 否則刪除并返回一個(gè)元素. 當(dāng) size 大于等于 2 時(shí), 返回一個(gè)數(shù)組包含彈出的元素.
$ssdb->qpop_front('q');
從隊(duì)列尾部彈出一個(gè)或者多個(gè)元素.
出錯(cuò)返回 false. 當(dāng) size 未指定或者小于等于 1 時(shí), 隊(duì)列不存在(或者為空)則返回 null, 否則刪除并返回一個(gè)元素. 當(dāng) size 大于等于 2 時(shí), 返回一個(gè)數(shù)組包含彈出的元素.
$ssdb->qpop_back('q');
從隊(duì)列頭部刪除多個(gè)元素.
出錯(cuò)返回 false. 返回被刪除的元素?cái)?shù)量.
$ssdb->qtrim_front('q', 3);
從隊(duì)列頭部刪除多個(gè)元素.
出錯(cuò)返回 false. 返回被刪除的元素?cái)?shù)量.
$ssdb->qtrim_back('q', 3);
批量執(zhí)行一批命令. 批量命令可以減少客戶端和服務(wù)器之間的交互延時(shí), 能提高性能和響應(yīng)速度.
這個(gè)特性是在客戶端實(shí)現(xiàn)的, ssdb-server 不支持批量命令, 而是當(dāng)作獨(dú)立的一個(gè)命令一個(gè)命令地執(zhí)行. 所有命令和參數(shù)的大小應(yīng)小于 10MB.
如果 exec() 出錯(cuò)則返回 false, 否則返回一個(gè)數(shù)組包含對(duì)應(yīng)每一條命令的結(jié)果.
$ret = $ssdb->batch() ->set('a', 1) ->get('a') ->exec(); // 或者 $ssdb->batch(); $ssdb->set('a', 1); $ssdb->get('a'); $ret = $ssdb->exec();
返回?cái)?shù)據(jù)庫的估計(jì)大小, 以字節(jié)為單位. 如果服務(wù)器開啟了壓縮, 返回壓縮后的大小.
出錯(cuò)返回 false. 返回?cái)?shù)據(jù)庫大小.
$ssdb->dbsize();
返回服務(wù)器的信息.
出錯(cuò)返回 false. 返回服務(wù)器信息的關(guān)聯(lián)數(shù)組.
$ssdb->info();
更多建議: