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

PHP操作Redis詳解案例

Jan 23, 2017 pm 03:39 PM
phpredis

$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的元素,countlInsert

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

$redis->lTrim('key', start, end);

rpoplpush

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

$redis->lRem('key', 'A', 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('key1', 0, -1);
$redis->lInsert('key1', Redis::AFTER, 'C', 'Y');
$redis->lRange('key1', 0, -1);
$redis->lInsert('key1', Redis::AFTER, 'W', 'value');

sRem, sRemove

$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" }

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('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的所有元素

sort

排序,分页等

参数

'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

zCount

$redis->zCount(key, star, end);

返回名称为key的zset中score >= star且score

zRemRangeByScore, zDeleteRangeByScore
$redis->zRemRangeByScore('key', star, end);

删除名称为key的zset中score >= star且score

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是所有集合对应元素中最小值和最大值。

Hash操作

hSet

$redis->hSet('h', 'key1', 'hello');

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

hGet

$redis->hGet('h', 'key1');

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

hLen

$redis->hLen('h');

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

hDel

$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

选择一个数据库

move

转移一个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();

auth

密码认证

$redis->auth('foobared');

bgrewriteaof

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

$redis->bgrewriteaof();

slaveof

选择从服务器

$redis->slaveof('10.0.1.7', 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
PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?Apr 17, 2025 am 12:24 AM

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP與Python:用例和應用程序PHP與Python:用例和應用程序Apr 17, 2025 am 12:23 AM

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

描述不同的HTTP緩存標頭(例如,Cache-Control,ETAG,最後修飾)。描述不同的HTTP緩存標頭(例如,Cache-Control,ETAG,最後修飾)。Apr 17, 2025 am 12:22 AM

HTTP緩存頭的關鍵玩家包括Cache-Control、ETag和Last-Modified。 1.Cache-Control用於控制緩存策略,示例:Cache-Control:max-age=3600,public。 2.ETag通過唯一標識符驗證資源變化,示例:ETag:"686897696a7c876b7e"。 3.Last-Modified指示資源最後修改時間,示例:Last-Modified:Wed,21Oct201507:28:00GMT。

說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1?說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1?Apr 17, 2025 am 12:06 AM

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

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

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

PHP和網絡:探索其長期影響PHP和網絡:探索其長期影響Apr 16, 2025 am 12:17 AM

PHP在過去幾十年中塑造了網絡,並將繼續在Web開發中扮演重要角色。 1)PHP起源於1994年,因其易用性和與MySQL的無縫集成成為開發者首選。 2)其核心功能包括生成動態內容和與數據庫的集成,使得網站能夠實時更新和個性化展示。 3)PHP的廣泛應用和生態系統推動了其長期影響,但也面臨版本更新和安全性挑戰。 4)近年來的性能改進,如PHP7的發布,使其能與現代語言競爭。 5)未來,PHP需應對容器化、微服務等新挑戰,但其靈活性和活躍社區使其具備適應能力。

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

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

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

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。