共計 11372 個字符,預計需要花費 29 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇“PHP 怎樣操作 Redis”除了程序員外大部分人都不太理解,今天丸趣 TV 小編為了讓大家更加理解“PHP 怎樣操作 Redis”,給大家總結了以下內容,具有一定借鑒價值,內容詳細步驟清晰,細節處理妥當,希望大家通過這篇文章有所收獲,下面讓我們一起來看看具體內容吧。
windows php7.2 nts x86 版本的 redis 的 dll 文件下載地址
windows php5.6 nts x86 版本的 redis 的 dll 文件下載地址:
**php.ini 文件添加:extension=php_redis.dll 重啟 php, phpinfo 可以看到 redis 則證明安裝成功 **
php 連接 redis 測試
?php
$redis = new Redis();
$redis- connect(127.0.0.1 , 6379);//serverip port
$redis- auth( mypassword //my redis password
$redis - set( test , Hello World
echo $redis - get( test
php 操作 redis 函數封裝
/**
* 如果不傳入 $host 和 $port 默認讀取 Laravel 環境變量的參數
* redis Set/setex 封裝, 可直接傳入數組, 可設置過期時間 written:yangxingyi
*/
function RedisSet($key,$value,$expire=0,$host= ,$port=){ if(!$key||!$value) return false;
$host = $host?$host:getenv( REDIS_HOST
$port = $port?$port:getenv( REDIS_PORT
$redis = new Redis();
$redis- connect($host, $port);
$value = is_array($value)?json_encode($value):$value;
return $expire 0?$redis- setex(getenv( REDIS_PREFIX).$key, $expire,$value):$redis- set(getenv( REDIS_PREFIX).$key,$value);
* redis get 封裝, 如果傳入的是數組, 返回的也是數組, 同理字符串 written:yangxingyi
*/
function RedisGet($key,$host= ,$port=){ $redis = new Redis();
$host = $host?$host:getenv( REDIS_HOST
$port = $port?$port:getenv( REDIS_PORT
$redis- connect($host, $port);
$result = $redis- get(getenv( REDIS_PREFIX).$key);
return is_null(json_decode($result))?$result:json_decode($result,true);
}
php 操作 redis 大全,基本上 php 操作 redis 常用的函數都在下面了
setex 帶生存時間的寫入值
$redis- setex( key , 3600, value
setnx 判斷是否重復的,寫入值, 如存在了不修改返回 0, 不存在就添加返回 1
$redis- setnx( key , value
返回已經刪除 key
$redis- delete( key1 成功返回 1 失敗返回 0
$redis- delete( key1 , key2 刪除兩個鍵成功返回 1 失敗返回 0
查詢生存時間
$redis- ttl( key1 持久化的返回 -1,有生存時間的返回時間(單位秒)同時給多個 key 賦值, 同時設置 key0 和 key1
$redis- mset(array( key0 = value0 , key1 = value1
key 中的值進行自增 1,如果填寫了第二個參數,者自增第二個參數所填的值
$redis- incr( key1
$redis- incrBy(key1 , 10);
減法跟加法一樣
$redis- decr( key1 減少 1
$redis- decrBy(key1 ,5) 減少 5
list 相關操作,連表操作
lPush
$redis- lPush( list , 888
$id = $redis- lpush( list , HHHHHHH echo $id; 返回鏈表的元素個數
$redi- lrange(list ,0,-1); 返回全部數據,數組形式
$redis- lrange(list ,0,2); 返回連表 0 - 2 坐標的三個元素
lPushx/rPushx
$redis- lPushx(key, value);
在名稱為 key 的 list 左邊(頭)/ 右邊(尾)添加一個值為 value 的元素, 如果 value 已經存在,則不添加
$redis- lpop( list 輸出鏈表最左邊的 ksy 的值,輸出后刪除掉這個 key
$redis- rpop( list 輸出鏈表最右邊的 ksy 的值,輸出后刪除掉這個 key
$redis- lset( list ,7, update 修改坐標為 7 的值, 成功返回 1
集合:sadd,sadd 是無序的集合, 每次插入集合的時候都可能會弄亂里面集合的排序
sadd s1 zhangsan
sadd s1 lisi
sadd s1 wangwu
sadd t1 yangxingyi
sadd t1 lilei
sadd t1 zhangsan
smembers s1 s1 的所有集合內容
sdiff s1 t1 s1 有的,t1 沒有的, 差集
$redis- sinter( s1 , t1 返回 s1 和 t1 兩個集合都有的, 數組形式
scard s1 返回 s1 集合里面的個數,有多少個就返回多少個, 沒有從 0 開始的, 坐標才從 0 開始的
spop 抽獎場景,返回集合里面隨機的數
spop s1 默認返回 1 個, 返回后就刪除這個數,中獎了就不能再中了
$i = $redis- spop(s1 var_dump($i); 返回一個數, 返回后刪除這個數
$i = $redis- spop(s1 ,2);var_dump($i); 不能返回兩個的, 提示錯誤的
隨機返回集合里面的一個元素,但不刪除,重復中獎
$i = $redis- srandmember( s1 echo $i;
sismember s1 zhangsan 查詢張三在不在集合里面, 在 1,不在 false
$i = $redis- sismember( s1 , zhangsan2 echo $i; 在 1,不在 false
zadd key 2 value 有序集合
zadd y1 1 zhangsan;
zadd y1 3 lisi;
zadd y1 2 wangwu;
zrange y1 0 -1; 排序就是, 根據插入的時候的排序從小到達 zhangsan,wangwu,lisi
$i = $redis- zrange(y1 ,0,-1);var_dump($i);
返回數組,鍵值不是插入時候給的鍵,是從 0 開始的新鍵
zrevrange y1 0 -1; 反轉排序,插入的時候鍵值越高,排序越優先
zcard y1 ;獲取有序集合里面的個數,有多少個就返回多少個, 沒有從 0 開始的, 坐標才從 0 開始的
無序就 scard, 有序就 zcard,有 z 沒有 s
sInterStore
求交集并將交集保存到 output 的集合
$redis- sInterStore(output , key1 , key2 , key3)
Hash 操作
$redis- hSet( h , key1 , hello
向名稱為 h 的 hash 中添加元素 key1— hello
$redis- hGet( h , key1
返回名稱為 h 的 hash 中 key1 對應的 value(hello)$redis- hLen( h
返回名稱為 h 的 hash 中元素個數
$redis- hDel( h , key1
刪除名稱為 h 的 hash 中鍵為 key1 的域
hKeys
$redis- hKeys( h
返回名稱為 key 的 hash 中所有鍵
hVals
$redis- hVals(h)
返回名稱為 h 的 hash 中所有鍵對應的 value
hGetAll
$redis- hGetAll( h
返回名稱為 h 的 hash 中所有的鍵(field)及其對應的 value
hExists
$redis- hExists( h , a
名稱為 h 的 hash 中是否存在鍵名字為 a 的域
hIncrBy
$redis- hIncrBy(h , x , 2);
將名稱為 h 的 hash 中 x 的 value 增加 2
hMset
$redis- hMset(user:1 , array( name = Joe , salary = 2000));
向名稱為 key 的 hash 中批量添加元素
hMGet
$redis- hmGet( h , array( field1 , field2
返回名稱為 h 的 hash 中 field1,field2 對應的 value
redis 操作相關
flushDB
清空當前數據庫
flushAll
清空所有數據庫
randomKey
隨機返回 key 空間的一個 key
$key = $redis- randomKey();
select
選擇一個數據庫
轉移一個 key 到另外一個數據庫
$redis- select(0); // switch to DB 0
$redis- set( x , 42 // write 42 to x
$redis- move(x , 1); // move to DB 1
$redis- select(1); // switch to DB 1
$redis- get( x // will return 42
rename, renameKey
給 key 重命名
$redis- set( x , 42
$redis- rename( x , y
$redis- get( y // → 42
$redis- get( x // → `FALSE`
renameNx
與 remane 類似,但是,如果重新命名的名字已經存在,不會替換成功
setTimeout, expire
設定一個 key 的活動時間(s)$redis- setTimeout(x , 3);
expireAt
key 存活到一個 unix 時間戳時間
$redis- expireAt(x , time() + 3);
keys, getKeys
返回滿足給定 pattern 的所有 key
$keyWithUserPrefix = $redis- keys( user*
dbSize
查看現在數據庫有多少 key
$count = $redis- dbSize();
$redis- auth( foobared
bgrewriteaof
使用 aof 來進行數據庫持久化
$redis- bgrewriteaof();
slaveof
選擇從服務器
$redis- slaveof(10.0.1.7 , 6379);
將數據同步保存到磁盤
bgsave
將數據異步保存到磁盤
lastSave
返回上次成功將數據保存到磁盤的 Unix 時戳
返回 redis 的版本信息等詳情
Redis::__construct 構造函數
$redis = new Redis();
connect, open 鏈接 redis 服務
host: string,服務地址
port: int, 端口號
timeout: float, 鏈接時長 (可選, 默認為 0 ,不限鏈接時間)
注: 在 redis.conf 中也有時間,默認為 300
pconnect, popen 不會主動關閉的鏈接
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 的值
返回已經刪除 key 的個數(長整數)$redis- delete( key1 , key2
$redis- delete(array( key3 , key4 , key5
得到一個 key 的生存時間
persist
移除生存時間到期的 key
如果 key 到期 true 如果不到期 false
mset (redis 版本 1.1 以上才可以用)同時給多個 key 賦值
$redis- mset(array( key0 = value0 , key1 = value1
進入或者退出事務模式
參數可選 Redis::MULTI 或 Redis::PIPELINE. 默認是 Redis::MULTI
Redis::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();
如果 key 存在返回 value,不存在返回 false
$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);
list 相關操作
lPush
$redis- lPush(key, value);
在名稱為 key 的 list 左邊(頭)添加一個值為 value 的 元素
rPush
$redis- rPush(key, value);
在名稱為 key 的 list 右邊(尾)添加一個值為 value 的 元素
lPushx/rPushx
$redis- lPushx(key, value);
在名稱為 key 的 list 左邊(頭)/ 右邊(尾)添加一個值為 value 的元素, 如果 value 已經存在,則不添加
lPop/rPop
$redis- lPop( key
輸出名稱為 key 的 list 左 (頭) 起 / 右(尾)起的第一個元素,刪除該元素
blPop/brPop
$redis- blPop(key1 , key2 , 10);
lpop 命令的 block 版本。即當 timeout 為 0 時,若遇到名稱為 key i 的 list 不存在或該 list 為空,則命令結束。如果 timeout 0,則遇到上述情況時,等待 timeout 秒,如果問題沒有解決,則對 keyi+ 1 開始的 list 執行 pop 操作
lSize
$redis- lSize( key
返回名稱為 key 的 list 有多少個元素
lIndex, lGet
$redis- lGet(key , 0);
返回名稱為 key 的 list 中 index 位置的元素
$redis- lSet( key , 0, X
給名稱為 key 的 list 中 index 位置的元素賦值為 value
lRange, lGetRange
$redis- lRange(key1 , 0, -1);
返回名稱為 key 的 list 中 start 至 end 之間的元素(end 為 -1 ,返回所有)lTrim, listTrim
$redis- lTrim(key , start, end);
截取名稱為 key 的 list,保留 start 至 end 之間的元素
lRem, lRemove
$redis- lRem(key , A , 2);
刪除 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- 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(key1 , 0, -1);
$redis- lInsert( key1 , Redis::AFTER, C , Y
$redis- lRange(key1 , 0, -1);
$redis- lInsert( key1 , Redis::AFTER, W , value
rpoplpush
返回并刪除名稱為 srckey 的 list 的尾元素,并將該元素添加到名稱為 dstkey 的 list 的頭部
$redis- delete( x , y
$redis- lPush( x , abc $redis- lPush( x , def $redis- lPush( y , 123 $redis- lPush( y , 456 // move the last of x to the front of y. var_dump($redis- rpoplpush( x , y
var_dump($redis- lRange( x , 0, -1));
var_dump($redis- lRange( y , 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 }
SET 操作相關
向名稱為 key 的 set 中添加元素 value, 如果 value 存在,不寫入,return false
$redis- sAdd(key , value);
sRem, sRemove
刪除名稱為 key 的 set 中的元素 value
$redis- sAdd( key1 , set1
$redis- sAdd( key1 , set2
$redis- sAdd( key1 , set3
$redis- sRem( key1 , set2
sMove
將 value 元素從名稱為 srckey 的集合移到名稱為 dstkey 的集合
$redis- sMove(seckey, dstkey, value);
sIsMember, sContains
名稱為 key 的集合中查找是否有 value 元素,有 ture 沒有 false
$redis- sIsMember(key, value);
sCard, sSize
返回名稱為 key 的 set 的元素個數
隨機返回并刪除名稱為 key 的 set 中一個元素
sRandMember
隨機返回名稱為 key 的 set 中一個元素,不刪除
sInter
sInterStore
求交集并將交集保存到 output 的集合
$redis- sInterStore(output , key1 , key2 , key3)
sUnion
$redis- sUnion( s0 , s1 , s2
s0,s1,s2 同時求并集
sUnionStore
求并集并將并集保存到 output 的集合
$redis- sUnionStore(output , key1 , key2 , key3);sDiff
sDiffStore
求差集并將差集保存到 output 的集合
sMembers, sGetMembers
返回名稱為 key 的 set 的所有元素
排序,分頁等
by = some_pattern_* ,
limit = array(0, 1),
get = some_other_pattern_* or an array of patterns,
sort = asc or desc ,
alpha = TRUE,
store = external-key
$redis- delete(s $redis- sadd( s , 5); $redis- sadd(s , 4); $redis- sadd(s , 2); $redis- sadd(s , 1); $redis- sadd(s , 3);
var_dump($redis- sort( s // 1,2,3,4,5
var_dump($redis- sort( s , array( sort = desc))); // 5,4,3,2,1
var_dump($redis- sort( s , array( sort = desc , store = out))); // (int)5
string 命令
getSet
返回原來 key 中的值,并將 value 寫入 key
$redis- set( x , 42
$exValue = $redis- getSet( x , lol // return 42 , replaces x by lol
$newValue = $redis- get(x) // return lol
append
string,名稱為 key 的 string 的值在后面加上 value
$redis- set( key , value1
$redis- append( key , value2
$redis- get( key
getRange (方法不存在)返回名稱為 key 的 string 中 start 至 end 之間的字符
$redis- set( key , string value
$redis- getRange(key , 0, 5);
$redis- getRange(key , -5, -1);
setRange (方法不存在)改變 key 的 string 中 start 至 end 之間的字符為 value
$redis- set( key , Hello world
$redis- setRange( key , 6, redis
$redis- get( key
strlen
得到 key 的 string 的長度
$redis- strlen( key
getBit/setBit
返回 2 進制信息
zset(sorted set)操作相關
zAdd(key, score, member):向名稱為 key 的 zset 中添加元素 member,score 用于排序。如果該元素已經存在,則根據 score 更新該元素的順序。$redis- zAdd( key , 1, val1
$redis- zAdd( key , 0, val0
$redis- zAdd( key , 5, val5
$redis- zRange(key , 0, -1); // array(val0, val1, val5)
zRange(key, start, end,withscores):返回名稱為 key 的 zset(元素已按 score 從小到大排序)中的 index 從 start 到 end 的所有元素
$redis- zAdd( key1 , 0, val0
$redis- zAdd( key1 , 2, val2
$redis- zAdd( key1 , 10, val10
$redis- zRange(key1 , 0, -1); // with scores $redis- zRange(key1 , 0, -1, true);
zDelete, zRem
zRem(key, member) :刪除名稱為 key 的 zset 中的元素 member
$redis- zAdd( key , 0, val0
$redis- zAdd( key , 2, val2
$redis- zAdd( key , 10, val10
$redis- zDelete( key , val2
$redis- zRange(key , 0, -1);
zRevRange(key, start, end,withscores):返回名稱為 key 的 zset(元素已按 score 從大到小排序)中的 index 從 start 到 end 的所有元素.withscores: 是否輸出 socre 的值,默認 false,不輸出
$redis- zAdd( key , 0, val0
$redis- zAdd( key , 2, val2
$redis- zAdd( key , 10, val10
$redis- zRevRange(key , 0, -1); // with scores $redis- zRevRange(key , 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(key , 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( key , increment, member
如果在名稱為 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 是所有集合對應元素中最小值和最大值。
感謝你的閱讀,希望你對“PHP 怎樣操作 Redis”這一關鍵問題有了一定的理解,具體使用情況還需要大家自己動手實驗使用過才能領會,快去試試吧,如果想閱讀更多相關知識點的文章,歡迎關注丸趣 TV 行業資訊頻道!
向 AI 問一下細節
正文完