首頁 後端開發 php教程 PHP操作Redis詳解案例

PHP操作Redis詳解案例

Jan 23, 2017 pm 03:39 PM
php redis

$redis = new Redis();

connect, open 連結redis服務

參數

host: string,服務位址

號loat ,連結時長 (可選, 預設為0 ,不限連結時間)

註: 在redis.conf中也有時間,預設為300pconnect, popen 不會主動關閉的連結

參考上面

pconnect, popen 不會主動關閉的連結

參考上面

setOption

setOption設置redis模式

getOption 查看redis設置的模式

ping 查看連接狀態

get 得到某個key的值(string值)

如果該key不存在,return false

set 寫入key 和value(string值)

如果寫入成功,return ture

setex 帶生存時間的寫入值

$redis->setex('key', 3600, 'value'); // sets key → value, with 1h TTL.
登入後複製

setnx 判斷是否重複的,寫入值

$redis->setnx('key', 'value');
$redis->setnx('key', 'value');
登入後複製

delete 刪除指定key的值

數(長整數)

$redis->delete('key1', 'key2');
$redis->delete(array('key3', 'key4', 'key5'));
登入後複製

得到一個key的生存時間

persist

移除生存時間到期的key

如果key到期true 如果不到期false

mset (redis版本1.1以上才可以用1.1以上才可以用1.1以上才可以用1.1以上才可以用1.1以上才可以用1.1以上才可以用1.1以上才可以用1.1以上才可以用1.1以上才可以用1.1以上才可以用1.1以上才可以用1.1以上才可以用1.1以上才可以用1.1以上才可以用1.1以上才可以用。 )

同時賦值多個key

$redis->mset(array('key0' => 'value0', 'key1' => 'value1'));
登入後複製

multi, exec, discard

進入或退出交易模式

參數可選Redis::MULTI或Redis::PIPELINERed.預設是Redis::MULTITI MULTI:將多個操作當成一個事務執行

Redis::PIPELINE:讓(多條)執行命令簡單的,更加快速的發送給伺服器,但是沒有任何原子性的保證

discard:刪除一個事務

傳回值

multi(),返回一個redis對象,並進入multi-mode模式,一旦進入multi-mode模式,以後調用的所有方法都會返回相同的對象,只到exec()方法被呼叫。

watch, unwatch (程式碼測試後,不能達到所說的效果)

監測一個key的值是否被其它的程式更改。如果這個key在watch 和exec (方法)間被修改,這個MULTI/EXEC 事務的執行將失敗(return false)

unwatch 取消被這個程式監控的所有key

參數,一對key的列表

$redis->watch('x');
$ret = $redis->multi() ->incr('x') ->exec();
subscribe *
登入後複製

方法回調。請注意,該方法可能在未來發生改變

publish *

發佈內容到某一個通道。注意,該方法可能在未來發生改變

exists

判斷key是否存在。存在true 不在false

incr, incrBy

key中的值進行自增1,如果填入了第二個參數,者自增第二個參數所填的值

$redis->incr('key1');
$redis->incrBy('key1', 10);
登入後複製

decr, decrBy

做減法,使用方法同incr

getMultiple

傳參

由key組成的陣列

回傳參數

如果key存在回傳value,不存在回傳false

reee

list相關運算

為key的list左邊(頭)加上一個值為value的元素

rPush

$redis->set('key1', 'value1'); $redis->set('key2', 'value2'); $redis->set('key3', 'value3'); $redis->getMultiple(array('key1', 'key2', 'key3'));
$redis->lRem('key1', 'A', 2);
$redis->lRange('key1', 0, -1);
登入後複製

在名稱為key的list右邊(尾)加上一個值為value的元素lPushx/rPushx

$redis->lPush(key, value);
登入後複製

reee

在名稱為key的list左邊(頭)/右邊(尾)添加一個值為value的元素,如果value已經存在,則不添加

lPop/rPop

$redis->rPush(key, value);
登入後複製

輸出名稱為key的list左(頭)起/右(尾)起的第一個元素,刪除該元素

blPop/brPop

$redis->lPushx(key, value);
登入後複製

lpop指令的block版本。即當timeout為0時,若遇到名稱為key i的list不存在或該list為空,則指令結束。如果timeout>0,則遇到上述情況時,等待timeout秒,如果問題沒有解決,則對keyi+1開始的list執行pop操作

lSize

$redis->lPop('key');
登入後複製

回傳名稱為key的list有多少個元素

lIndex, lGet

$redis->blPop('key1', 'key2', 10);
登入後複製

回傳名稱為key的list中index位置的元素

lSet

$redis->lSize('key');
登入後複製

給名稱為key的list中index位置的元素賦值為value

lRange, lGetRange, letRange list中start至end之間的元素(end為-1 ,返回所有)

lTrim, listTrim

$redis->lGet('key', 0);
登入後複製

截取名稱為key的list,保留start至end之間的元素

lRem, lRemove

$redis->lSet('key', 0, 'X');
登入後複製

$redis->lRange('key1', 0, -1);
登入後複製
count個名稱為key的list中值為value的元素。 count為0,刪除所有值為value的元素,count>0從頭到尾刪除count個值為value的元素,count<0從尾到頭刪除|count|個值為value的元素

lInsert

在名稱在為key的list中,找到值為pivot 的value,並根據參數Redis::BEFORE | Redis::AFTER,來確定,newvalue 是放在pivot 的前面,或者後面。如果key不存在,不會插入,如果pivot不存在,return -1

$redis->lTrim(&#39;key&#39;, start, end);
登入後複製

rpoplpush

返回並刪除名稱為srckey的list的尾元素,並將該元素添加到名稱為dstkey的list的頭部

$redis->lRem(&#39;key&#39;, &#39;A&#39;, 2);
登入後複製

SET操作相關

sAdd

向名稱為key的set中添加元素value,如果value存在,不寫入,return false

$redis->delete('key1'); $redis->lInsert('key1', Redis::AFTER, 'A', 'X'); $redis->lPush('key1', 'A'); $redis->lPush('key1', 'B'); $redis->lPush('key1', 'C'); $redis->lInsert('key1', Redis::BEFORE, 'C', 'X');
$redis->lRange(&#39;key1&#39;, 0, -1);
$redis->lInsert('key1', Redis::AFTER, 'C', 'Y');
$redis->lRange(&#39;key1&#39;, 0, -1);
$redis->lInsert('key1', Redis::AFTER, 'W', 'value');
登入後複製

sRem, sRemove

$redis->delete(&#39;x&#39;, &#39;y&#39;);
$redis->lPush(&#39;x&#39;, &#39;abc&#39;); $redis->lPush(&#39;x&#39;, &#39;def&#39;); $redis->lPush(&#39;y&#39;, &#39;123&#39;); $redis->lPush(&#39;y&#39;, &#39;456&#39;); // move the last of x to the front of y. var_dump($redis->rpoplpush(&#39;x&#39;, &#39;y&#39;));
var_dump($redis->lRange(&#39;x&#39;, 0, -1));
var_dump($redis->lRange(&#39;y&#39;, 0, -1));
string(3) "abc"
array(1) { [0]=> string(3) "def" }
array(3) { [0]=> string(3) "abc" [1]=> string(3) "456" [2]=> string(3) "123" }
登入後複製

sMove

將value元素從名稱為srckey的集合移到名稱為dstkey的集合

$redis->sAdd(key , value);
登入後複製

sIsMember, sContains

名稱為key的集合中查找是否有value元素,有ture 沒有falseCture

sSize

返回名称为key的set的元素个数

sPop

随机返回并删除名称为key的set中一个元素

sRandMember

随机返回名称为key的set中一个元素,不删除

sInter

求交集

sInterStore

求交集并将交集保存到output的集合

$redis->sInterStore(&#39;output&#39;, &#39;key1&#39;, &#39;key2&#39;, &#39;key3&#39;)
登入後複製

sUnion

求并集

$redis->sUnion(&#39;s0&#39;, &#39;s1&#39;, &#39;s2&#39;);
登入後複製

s0,s1,s2 同时求并集

sUnionStore

求并集并将并集保存到output的集合

$redis->sUnionStore(&#39;output&#39;, &#39;key1&#39;, &#39;key2&#39;, &#39;key3&#39;);
登入後複製

sDiff

求差集

sDiffStore

求差集并将差集保存到output的集合

sMembers, sGetMembers

返回名称为key的set的所有元素

sort

排序,分页等

参数

&#39;by&#39; => &#39;some_pattern_*&#39;,
&#39;limit&#39; => array(0, 1),
&#39;get&#39; => &#39;some_other_pattern_*&#39; or an array of patterns,
&#39;sort&#39; => &#39;asc&#39; or &#39;desc&#39;,
&#39;alpha&#39; => TRUE,
&#39;store&#39; => &#39;external-key&#39;
登入後複製

例子

$redis->delete(&#39;s&#39;); $redis->sadd(&#39;s&#39;, 5); $redis->sadd(&#39;s&#39;, 4); $redis->sadd(&#39;s&#39;, 2); $redis->sadd(&#39;s&#39;, 1); $redis->sadd(&#39;s&#39;, 3);
var_dump($redis->sort(&#39;s&#39;)); // 1,2,3,4,5
var_dump($redis->sort(&#39;s&#39;, array(&#39;sort&#39; => &#39;desc&#39;))); // 5,4,3,2,1
var_dump($redis->sort(&#39;s&#39;, array(&#39;sort&#39; => &#39;desc&#39;, &#39;store&#39; => &#39;out&#39;))); // (int)5
登入後複製

string命令

getSet

返回原来key中的值,并将value写入key

$redis->set(&#39;x&#39;, &#39;42&#39;);
$exValue = $redis->getSet(&#39;x&#39;, &#39;lol&#39;); // return &#39;42&#39;, replaces x by &#39;lol&#39;
$newValue = $redis->get(&#39;x&#39;)&#39; // return &#39;lol&#39;
登入後複製

append

string,名称为key的string的值在后面加上value

$redis->set(&#39;key&#39;, &#39;value1&#39;);
$redis->append(&#39;key&#39;, &#39;value2&#39;);
$redis->get(&#39;key&#39;);
登入後複製

getRange (方法不存在)

返回名称为key的string中start至end之间的字符

$redis->set(&#39;key&#39;, &#39;string value&#39;);
$redis->getRange(&#39;key&#39;, 0, 5);
$redis->getRange(&#39;key&#39;, -5, -1);
登入後複製

setRange (方法不存在)

改变key的string中start至end之间的字符为value

$redis->set(&#39;key&#39;, &#39;Hello world&#39;);
$redis->setRange(&#39;key&#39;, 6, "redis");
$redis->get(&#39;key&#39;);
登入後複製

strlen

得到key的string的长度

$redis->strlen(&#39;key&#39;);
登入後複製

getBit/setBit

返回2进制信息

zset(sorted set)操作相关

zAdd(key, score, member):向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。

$redis->zAdd(&#39;key&#39;, 1, &#39;val1&#39;);
$redis->zAdd(&#39;key&#39;, 0, &#39;val0&#39;);
$redis->zAdd(&#39;key&#39;, 5, &#39;val5&#39;);
$redis->zRange(&#39;key&#39;, 0, -1); // array(val0, val1, val5)
登入後複製

zRange(key, start, end,withscores):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素

$redis->zAdd(&#39;key1&#39;, 0, &#39;val0&#39;);
$redis->zAdd(&#39;key1&#39;, 2, &#39;val2&#39;);
$redis->zAdd(&#39;key1&#39;, 10, &#39;val10&#39;);
$redis->zRange(&#39;key1&#39;, 0, -1); // with scores $redis->zRange(&#39;key1&#39;, 0, -1, true);
登入後複製

zDelete, zRem

zRem(key, member) :删除名称为key的zset中的元素member

$redis->zAdd(&#39;key&#39;, 0, &#39;val0&#39;);
$redis->zAdd(&#39;key&#39;, 2, &#39;val2&#39;);
$redis->zAdd(&#39;key&#39;, 10, &#39;val10&#39;);
$redis->zDelete(&#39;key&#39;, &#39;val2&#39;);
$redis->zRange(&#39;key&#39;, 0, -1);
登入後複製

zRevRange(key, start, end,withscores):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素.withscores: 是否输出socre的值,默认false,不输出

$redis->zAdd(&#39;key&#39;, 0, &#39;val0&#39;);
$redis->zAdd(&#39;key&#39;, 2, &#39;val2&#39;);
$redis->zAdd(&#39;key&#39;, 10, &#39;val10&#39;);
$redis->zRevRange(&#39;key&#39;, 0, -1); // with scores $redis->zRevRange(&#39;key&#39;, 0, -1, true);
zRangeByScore, zRevRangeByScore
$redis->zRangeByScore(key, star, end, array(withscores, limit ));
登入後複製

返回名称为key的zset中score >= star且score <= end的所有元素

zCount

$redis->zCount(key, star, end);
登入後複製

返回名称为key的zset中score >= star且score <= end的所有元素的个数

zRemRangeByScore, zDeleteRangeByScore
$redis->zRemRangeByScore(&#39;key&#39;, star, end);
登入後複製

删除名称为key的zset中score >= star且score <= end的所有元素,返回删除个数

zSize, zCard

返回名称为key的zset的所有元素的个数

zScore

$redis->zScore(key, val2);
登入後複製

返回名称为key的zset中元素val2的score

zRank, zRevRank

$redis->zRevRank(key, val);
登入後複製

返回名称为key的zset(元素已按score从小到大排序)中val元素的rank(即index,从0开始),若没有val元素,返回“null”。zRevRank 是从大到小排序

zIncrBy

$redis->zIncrBy(&#39;key&#39;, increment, &#39;member&#39;);
登入後複製

如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment

zUnion/zInter

参数

keyOutput

arrayZSetKeys

arrayWeights

aggregateFunction Either "SUM", "MIN", or "MAX": defines the behaviour to use on duplicate entries during the zUnion.

对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。

Hash操作

hSet

$redis->hSet(&#39;h&#39;, &#39;key1&#39;, &#39;hello&#39;);
登入後複製

向名称为h的hash中添加元素key1—>hello

hGet

$redis->hGet(&#39;h&#39;, &#39;key1&#39;);
登入後複製

返回名称为h的hash中key1对应的value(hello)

hLen

$redis->hLen(&#39;h&#39;);
登入後複製

返回名称为h的hash中元素个数

hDel

$redis->hDel(&#39;h&#39;, &#39;key1&#39;);
登入後複製

删除名称为h的hash中键为key1的域

hKeys

$redis->hKeys(&#39;h&#39;);
登入後複製

返回名称为key的hash中所有键

hVals

$redis->hVals(&#39;h&#39;)
登入後複製

返回名称为h的hash中所有键对应的value

hGetAll

$redis->hGetAll(&#39;h&#39;);
登入後複製

返回名称为h的hash中所有的键(field)及其对应的value

hExists

$redis->hExists(&#39;h&#39;, &#39;a&#39;);
登入後複製

名称为h的hash中是否存在键名字为a的域

hIncrBy

$redis->hIncrBy(&#39;h&#39;, &#39;x&#39;, 2);
登入後複製

将名称为h的hash中x的value增加2

hMset

$redis->hMset(&#39;user:1&#39;, array(&#39;name&#39; => &#39;Joe&#39;, &#39;salary&#39; => 2000));
登入後複製

向名称为key的hash中批量添加元素

hMGet

$redis->hmGet(&#39;h&#39;, array(&#39;field1&#39;, &#39;field2&#39;));
登入後複製

返回名称为h的hash中field1,field2对应的value

redis 操作相关

flushDB

清空当前数据库

flushAll

清空所有数据库

randomKey

随机返回key空间的一个key

$key = $redis->randomKey();
登入後複製

select

选择一个数据库

move

转移一个key到另外一个数据库

$redis->select(0); // switch to DB 0
$redis->set(&#39;x&#39;, &#39;42&#39;); // write 42 to x
$redis->move(&#39;x&#39;, 1); // move to DB 1
$redis->select(1); // switch to DB 1
$redis->get(&#39;x&#39;); // will return 42
登入後複製

rename, renameKey

给key重命名

$redis->set(&#39;x&#39;, &#39;42&#39;);
$redis->rename(&#39;x&#39;, &#39;y&#39;);
$redis->get(&#39;y&#39;); // → 42
$redis->get(&#39;x&#39;); // → `FALSE`
登入後複製

renameNx

与remane类似,但是,如果重新命名的名字已经存在,不会替换成功

setTimeout, expire

设定一个key的活动时间(s)

$redis->setTimeout(&#39;x&#39;, 3);
登入後複製

expireAt

key存活到一个unix时间戳时间

$redis->expireAt(&#39;x&#39;, time() + 3);
登入後複製

keys, getKeys

返回满足给定pattern的所有key

$keyWithUserPrefix = $redis->keys(&#39;user*&#39;);
登入後複製

dbSize

查看现在数据库有多少key

$count = $redis->dbSize();
登入後複製

auth

密码认证

$redis->auth(&#39;foobared&#39;);
登入後複製

bgrewriteaof

使用aof来进行数据库持久化

$redis->bgrewriteaof();
登入後複製

slaveof

选择从服务器

$redis->slaveof(&#39;10.0.1.7&#39;, 6379);
登入後複製

save

将数据同步保存到磁盘

bgsave

将数据异步保存到磁盘

lastSave

返回上次成功将数据保存到磁盘的Unix时戳

info

返回redis的版本信息等详情

type

返回key的类型值

string: Redis::REDIS_STRING
set: Redis::REDIS_SET
list: Redis::REDIS_LIST
zset: Redis::REDIS_ZSET
hash: Redis::REDIS_HASH
other: Redis::REDIS_NOT_FOUND
登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP的目的:構建動態網站 PHP的目的:構建動態網站 Apr 15, 2025 am 12:18 AM

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP:處理數據庫和服務器端邏輯 PHP:處理數據庫和服務器端邏輯 Apr 15, 2025 am 12:15 AM

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

為什麼要使用PHP?解釋的優點和好處 為什麼要使用PHP?解釋的優點和好處 Apr 16, 2025 am 12:16 AM

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHP:服務器端腳本語言的簡介 PHP:服務器端腳本語言的簡介 Apr 16, 2025 am 12:18 AM

PHP是一種服務器端腳本語言,用於動態網頁開發和服務器端應用程序。 1.PHP是一種解釋型語言,無需編譯,適合快速開發。 2.PHP代碼嵌入HTML中,易於網頁開發。 3.PHP處理服務器端邏輯,生成HTML輸出,支持用戶交互和數據處理。 4.PHP可與數據庫交互,處理表單提交,執行服務器端任務。

See all articles