Redis函數

PHPRedis手冊

https://github.com/phpredis/p...php

鏈接操做

$redis = new Redis();
$redis->connect("127.0.0.1", 6379, 1); //TCP短鏈接,1秒超時,返回bool
$redis->connect('/tmp/redis.sock'); //套接字
$redis->connect("127.0.0.1", 6379, 1, NULL, 100);//從新鏈接之間間隔100毫秒

$redis->pconnect("127.0.0.1", 6379, 1); //長鏈接,進程結束前,請求關閉結束時鏈接不釋放。線程版不能使用.返回bool

$redis->auth("mima"); //密碼,返回bool
$redis->select(0); //選擇redis數據庫,0-15個庫,返回bool
$redis->swapdb(0,1);//原子交換兩個數據庫,返回bool

$redis->setOption(Redis::OPT_PREFIX, 'myAppName:');//在全部鍵上使用指定前綴
$redis->_prefix('my');//添加key的前綴,與上一步會合並myAppName:my

$redis->close(); //關閉鏈接,返回bool
$redis->ping(); //檢查鏈接,返回字符串‘+PONG’
$redis->echo("1"); //發送字符串到redis。redis原值返回
$redis->isConnected(); //鏈接redis成功與否,返回bool

Server操做

$redis->bgSave(); //異步在後臺保存數據到磁盤。返回bool
$redis->save();//同步保存數據到磁盤。返回bool
$redis->bgRewriteAOF(); //啓動AOF的後臺重寫

$redis->config("GET","*max-*-entries*");//獲取配置項值
$redis->config("SET","dir","/var/run/redis/dumps/");//設置配置值

$redis->dbSize(); //返回當前庫中的key個數
$redis->flushAll();//清空全部庫中的全部key。總返回true
$redis->flushDb();//清空當前庫中的全部key。總返回true

$redis->info(); //返回redis的全部狀態數據。
$redis->info("CPU"); //傳參返回指定狀態數據
$redis->resetStat(); //重置info中的狀態數據。
$redis->lastSave();//返回最後一次保存數據到磁盤的時間戳

$redis->time();//返回當前服務器時間
$redis->slowLog(」get「,10);//獲取10條慢日誌
$redis->slowLog("reset");//重置慢日誌

事務操做

$redis->multi(Redis::MULTI);//開啓事務,事務塊內支線的多條命令按照前後順序放進一個隊列中,最後由EXEC命令原子執行。
$redis->multi(Redis::PIPELINE);//開啓管道,事務塊內支線的多條命令按照前後順序放進一個隊列中,最後由EXEC命令原子執行。
.....事務命令塊....
$redis->exec();//執行事務塊內的命令,事務塊內全部命令的返回值,安命令的執行順序排列,當操做被打斷時,返回false


$redis->multi()
    ->set('key1', 'val1')
    ->get('key1')
    ->set('key2', 'val2')
    ->get('key2')
    ->exec();//返回每個命令的返回值的索引數組

Key操做

$redis->delete('key1','key2');//刪除指定鍵,返回刪除key個數 
$redis->delete(array('key1','key2'));
$redis->unlink('key1','key2');//redis>=4.0.0 異步非阻塞刪除。
$redis->unlink(array('key1','key2'));

$redis->exists('key');//驗證指定key是否存在,返回bool,redis>4.0.0存在返回1,不存在返回0

$redis->incr('key1');//自增1,返回自增後的整數
$redis->incrBy('key1',10);//增長指定數。
$redis->decr('key');//自減1,返回自減後的整數
$redis->decrBy('key',10);//減小指定數

$redis->mGet(array('key','key2'));//查詢多個key的值,不存在的key值爲false,返回數組
$redis->getSet('key',2);//設置key一個新值,返回key的設置以前的值
$redis->randomKey();//隨機返回一個key名
$redis->move('key',1);//將key移動到1庫中,返回bool
$redis->rename('oldkey','newkey');//重命名key
$redis->renameNx('oldkey','newkey');//重命名key,key存在撤銷

$redis->expire('key',3);//設置key過時時間,單位秒,返回bool
$redis->setTimeout('key',3);//同上
$redis->expireAt('key',time()+3);//設置key的到期時期時間戳,時間戳爲秒
$redis->ttl('key');//返回key的剩餘存活秒數,沒有設置過時時間返回-1,key不存在返回-2
$redis->persist('key');//刪除key的過時時間,返回bool

$redis->keys('key*'); //返回符合匹配模式的key數組或字符串。*爲匹配符
$redis->type('key');//返回key的數據類型

$redis->migrate('127.0.0.1',6379,array('key1','key2'),0,3600,true,true);//遷移多個鍵值到備份redis的0庫中,遷移最大時間3600秒,遷移複製替換。redis<3.0.6,只支持單個key遷移

$redis->sort('key',array('sort'=>'desc','limit'=>array(0,1)));//對列表,集合,有序集合的元素進行排序,返回數組

String操做

$redis->get('key');//獲取key值,key不存在返回false
$redis->set('key','value');//設置key值,返回bool
$redis->setEx('key',3600,'value');//設置key值和過時時間單位秒
$redis->setNx('key','value');//分佈式鎖。。redis中不存在key設置key值,存在不操做,返回bool

$redis->append('key','value');//將值追加到指定key的字符串後面,返回新值長度
$redis->getRange('key',0,5);//返回key的值的指定範圍的子字符串
$redis->setRange('key',5,'value');//修改替換key的指定位置以後的字符,返回長度
$redis->strLen('key');//獲取key的值字符串長度

$redis->setBit('key',10,1);//設置位圖指定位的狀態值,0或1,返回設置以前的狀態0或1
$redis->getBit('key',10);//獲取位圖指定位的狀態值,0或1
$redis->bitCout('key');//統計位圖中狀態爲1的個數

$redis->mSet(array('key1'=>1,'key2'=>2));//批量設置多個key的值,返回bool

Lists 操做

$redis->lIndex('key',0);//返回指定index序號的列表中的元素值,-1倒序第一個,0順序第一個,位置不存在值返回false
$redis->lRange('key',0,-1);//返回指定開始和結束索引位置範圍內的元素數組
$redis->lTrim('key',0,1);//修剪列表,只保留指定索引範圍內的元素,返回bool
$redis->lInsert('key',Redis::BEFORE,'a','b');//將值b插入值a前面,Redis::AFTER是後面,指定值不存在返回-1
$redis->lSet('key',0,'value');//設置指定索引位置的值,返回bool,超出範圍返回false

$redis->lPop('key');//刪除列表第一個元素,並返回值,空列表返回false
$redis->lPush('key','value');//在列表頭部添加值,返回列表長度,不存在列表建立,key不是列表類型返回false。
$redis->rPush('key','value);//在列表尾部添加值,返回列表長度,不存在列表建立,key不是列表類型返回false。
$redis->rPop('key');//刪除列表末尾的元素,並返回值,空列表返回false
$redis->rpoplpush('key1','key2');//將key1的尾部彈出一個值存入key2列表的頭部,並返回這個值,

$redis->lLen('key');//返回列表的元素個數
$redis->lRem('key','a',2);//從頭開始刪除兩個值爲a的元素,0,刪除所有a元素,負數倒序刪除,返回刪除個數

Sets 操做

$redis->sAdd('key', '1');//添加值到集合中,值已存在返回false,返回集合當前的元素數量
$redis->sCard('key');//發返集合的元素個數,集合不存在返回0

$redis->sDiff('key1','key2','key3');//返回集合之間的差集,數組
$redis->sDiffStore('stare','key1','key2');//返回集合之間的差集個數,差集元素存儲在第一個集合stare中
$redis->sInter('key1','key2','key3');//返回多個集合之間的交集數組,無交集返回空數組
$redis->sInterStore('store','key1','key2');//返回多個集合的交集元素個數,交接結果保存在第一個參數集合中。
$redis->sUnion('key1','key2');//返回多個集合之間的並集數組
$redis->sUnionStore('store','key1','key2');//返回多個集合的並集元素個數,並集結果保存在第一個參數的集合中。

$redis->sContains('key','value');//判斷值是否在集合中,返回bool
$redis->sMembers('key');//返回無序的集合全部的元素數組。

$redis->sMove('from','to','value');//從一個集合中移動一個元素到另外一個集合,返回bool
$redis->sPop('key1',10);//從集合中隨機刪除一個元素並返回值。集合爲空或不存在返回false;帶個數參數,將返回指定個數的元素
$redis->sRandMember('key',10);//從集合中隨機返回一個元素的值,如帶個數參數,將返回指定個數的元素
$redis->sRemove('key','value1','value2');//刪除集合中指定的元素,返回元素個數

Sorted Sets 操做

$redis->zAdd('key',1,'value');//添加元素到有序集合,添加成功返回1,不然0

$redis->zCard('key');//返回集合元素個數,$redis->zSize();
$redis->zCount('key',0,100);//返回指定範圍內的集合元素個數

$redis->zIncrBy('key',1,'value');//給指定的元素增長指定數,返回新的值

$redis->zInter('key',array('key2','key3'));//將數組中的多個集合的交集存放在第一個參數的集合中,返回新交集集合的元素個數
$redis->zUnion('key',array('key2','key3'));//將數組中 多個集合的並集存放在第一個參數的集合中,返回新並集的集合元素個數

$redis->zRange('key',0,-1);//返回指定索引範圍的元素數組,0表示第一個,-1表示倒數第一個$redis->zRevRange('key',0,-1)反序返回
$redis->zRangeByScore('key',0,10);//返回指定排序值範圍內的元素數組。
$redis->zRangeByScore('key',0,10,array('withscores'=>TRUE));//返回值爲健名,排序值爲健值的數組。
$redis->zRevRangeByScore('key',0,10);//反序zRangeByScore

$redis->zRank('key','value');//返回指定元素的索引位置值
$redis->zScore('key','value');//返回指定元素的排序值

$redis->zDelete('key','value');//刪除指定元素,成功返回1,失敗返回0
$redis->zDeleteRangeByRank('key',0,1);//按索引的範圍刪除元素,返回刪除個數
$redis->zDeleteRangeByScore('key',0,10);//按排序的範圍刪除元素,返回刪除個數

Hash 操做

$redis->hSet('key','hashKey','value');//設置修改哈希表key中的hashkey對應的值,不存在添加返回1,存在修改返回0,錯誤返回false
$redis->hGet('key','hashKey');//獲取值,不存在返回false
$reids->hSetNx('key','hashKey','value');//鎖機制,不存在時設置,存在不設置,不存在設置返回true,存在設置返回false

$redis->hLen('key');//返回hash表元素個數
$redis->hStrLen('key','hashKey');//返回hash表中指定元素值的字符串長度,不存在字段返回0
$redis->hDel('key','hashKey1','hashKey2');//從hash表中刪除元素,hash表不存在返回false,hashkey不存在返回0,存在返回刪除個數

$redis->hKeys('key');//返回hash表中的key索引數組
$redis->hVals('key');//返回hash表中的value值索引數組
$redis->hGetAll('key');//返回hash表中的key和value組成的關聯數組

$redis->hExists('key','hashkey');//驗證hashkey是否存在hash表中,返回bool
$redis->hIncrBy('key','hashkey',10);//給hash表中指定的hashkey值增長指定數,返回新值
$redis->hMSet('key',array('a'=>1,'b'=>2));//給hash表中設置多個鍵值對,元素值爲NULL的設置空字符串,非字符串強制轉爲字符串,返回bool
$redis->hMGet('key',array('a','b'));//獲取多個指定的hashkey的值,返回關聯數組

Pub/Sub 操做

$redis->publish('chan-1', 'hello, world!');//發佈消息到頻道
$redis->subscribe(array('chan-1', 'chan-2', 'chan-3'), 'f');//訂閱頻道,並執行回調函數,頻道,消息體
function f($redis, $chan, $msg) {
    switch($chan) {
        case 'chan-1':
            ...
            break;

        case 'chan-2':
            ...
            break;

        case 'chan-2':
            ...
            break;
    }
}

Geocoding地理位置 操做

要求 redis >= 3.2 

$redis->geoAdd(
    "key",
    37.773, -122.431, "San Francisco",
    -157.858, 21.315, "Honolulu"
);//添加城市經緯度數據到key,返回添加成功個數

$redis->geoHash("key", "San Francisco");//查詢多個成員地理位置編碼後的字符串,返回數組
$redis->geoPos("key", "Honolulu", "Maui");//查詢多個成員的經緯度,返回二維數組
$redis->geoDist("key", "Honolulu", "Maui", 'km');//查詢成員之間的距離,默認單位米m,單位千米km,萬里mi,步feet,
$redis->geoRadius("", -157.858, 21.306, 300, 'mi');//返回指定地點經緯度半徑300萬里內的全部其餘成員名的集合,返回數組。判斷商圈範圍
$redis->geoRadiusByMember("key", "Honolulu", 300, 'mi'));//使用成員名半徑300萬里內的其餘成員集合
其餘解決方案:postgresql / gis

Script 操做

$redis->eval('return 1');//執行lua腳本,返回複合類型數據
$redis->getLastError();//返回執行lua腳本後的最後一條錯誤信息,如無,返回false

迭代大數據鍵

SCAN 命令用於迭代當前數據庫中的數據庫鍵。
SSCAN 命令用於迭代集合鍵中的元素。
HSCAN 命令用於迭代哈希鍵中的鍵值對。
ZSCAN 命令用於迭代有序集合中的元素(包括元素成員和元素分值)。

都支持增量式迭代, 它們每次執行都只會返回少許元素, 因此這些命令能夠用於生產環境, 而不會出現像 KEYS 命令、 SMEMBERS 命令帶來的問題 —— 當 KEYS 命令被用於處理一個大的數據庫時, 又或者 SMEMBERS 命令被用於處理一個大的集合鍵時, 它們可能會阻塞服務器達數秒之久

定位大key

爲了不對線上redis帶來卡頓,這就要用到scan指令,對於掃描出來的每個key,使用type指令得到key的類型,而後使用相應數據結構的size或者len方法來獲得它的大小,對於每一種類型,保留大小的前N名做爲掃描結果展現出來。
上面這樣的過程redis官方已經在redis-cli指令中提供了這樣的掃描功能,咱們能夠直接拿來即用。

redis-cli -h 127.0.0.1 -p 6370 –-bigkeys
若是你擔憂這個指令會大幅擡升redis的ops致使線上報警,還能夠增長一個休眠參數。

redis-cli -h 127.0.0.1 -p 6370 –-bigkeys -i 0.1
上面這個指令每隔100條scan指令就會休眠0.1s,ops`就不會劇烈擡升,可是掃描的時間會變長。
相關文章
相關標籤/搜索