PHP使用Redis實(shí)戰(zhàn)實(shí)錄系列
- PHP使用Redis實(shí)戰(zhàn)實(shí)錄1:寶塔環(huán)境搭建、6379端口配置、Redis服務(wù)啟動(dòng)失敗解決方案
- PHP使用Redis實(shí)戰(zhàn)實(shí)錄2:Redis擴(kuò)展方法和PHP連接Redis的多種方案
PHP 中使用 Redis 前, 我們需要確保已經(jīng)安裝了 redis 服務(wù)及 PHP redis 驅(qū)動(dòng),且你的機(jī)器上能正常使用 PHP:
echo phpinfo();
出現(xiàn)上面提示,代表可以正常使用PHP操作Redis。
一、Redis擴(kuò)展方法
Redis擴(kuò)展提供了一系列方法用于與Redis服務(wù)器進(jìn)行交互。以下是一些常用的$redis
對(duì)象可用的方法:
-
連接和關(guān)閉連接:
-
connect($host, $port, $timeout)
: 連接到Redis服務(wù)器。 -
close()
: 關(guān)閉Redis連接。
-
-
數(shù)據(jù)操作:
-
set($key, $value)
: 設(shè)置指定鍵的值。 -
get($key)
: 獲取指定鍵的值。 -
del($key1, $key2, ...)
: 刪除一個(gè)或多個(gè)鍵。 -
incr($key)
: 增加鍵對(duì)應(yīng)的值。 -
decr($key)
: 減少鍵對(duì)應(yīng)的值。 -
exists($key)
: 檢查鍵是否存在。 - 其他諸如
append
、strlen
、mset
、mget
等等。
-
-
列表操作:
-
lpush($key, $value1, $value2, ...)
: 在列表左側(cè)插入一個(gè)或多個(gè)值。 -
rpush($key, $value1, $value2, ...)
: 在列表右側(cè)插入一個(gè)或多個(gè)值。 -
lpop($key)
: 彈出列表左側(cè)的值。 -
rpop($key)
: 彈出列表右側(cè)的值。 -
llen($key)
: 獲取列表長度。 - 其他諸如
lindex
、lrange
、ltrim
等等。
-
-
哈希操作:
-
hset($key, $field, $value)
: 設(shè)置哈希中指定字段的值。 -
hget($key, $field)
: 獲取哈希中指定字段的值。 -
hdel($key, $field1, $field2, ...)
: 刪除一個(gè)或多個(gè)哈希字段。 -
hgetall($key)
: 獲取哈希中所有字段和對(duì)應(yīng)的值。 - 其他諸如
hincrby
、hkeys
、hvals
等等。
-
-
集合操作:
-
sadd($key, $member1, $member2, ...)
: 向集合添加一個(gè)或多個(gè)成員。 -
srem($key, $member1, $member2, ...)
: 從集合中移除一個(gè)或多個(gè)成員。 -
smembers($key)
: 獲取集合的所有成員。 -
sismember($key, $member)
: 檢查成員是否存在于集合中。 - 其他諸如
sinter
、sunion
、sdiff
等等。
-
這只是Redis提供的一些常見操作方法的示例列表,還有更多其他方法可供使用。具體可以參考Redis擴(kuò)展的文檔或官方網(wǎng)站來了解更多關(guān)于Redis操作的詳細(xì)信息。
二、php操作Redis語法
在PHP中,可以使用Redis擴(kuò)展來操作Redis服務(wù)器。下面是一些常用的PHP操作Redis的語法示例:
- 連接到Redis服務(wù)器:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 或者使用連接池連接
$redis = new Redis();
$redis->pconnect('127.0.0.1', 6379);
- 設(shè)置和獲取鍵值對(duì):
// 設(shè)置鍵的值
$redis->set('key', 'value');
// 獲取鍵的值
$value = $redis->get('key');
- 刪除鍵:
$redis->del('key');
- 判斷鍵是否存在:
if ($redis->exists('key')) {
// 鍵存在的處理邏輯
} else {
// 鍵不存在的處理邏輯
}
- 進(jìn)行哈希操作:
// 設(shè)置哈希表字段的值
$redis->hset('hash_key', 'field', 'value');
// 獲取哈希表字段的值
$value = $redis->hget('hash_key', 'field');
// 刪除哈希表字段
$redis->hdel('hash_key', 'field');
- 進(jìn)行列表操作:
// 在列表左側(cè)插入值
$redis->lpush('list_key', 'value1', 'value2');
// 在列表右側(cè)插入值
$redis->rpush('list_key', 'value3', 'value4');
// 彈出列表左側(cè)的值
$value = $redis->lpop('list_key');
// 彈出列表右側(cè)的值
$value = $redis->rpop('list_key');
- 進(jìn)行集合操作:
// 向集合添加成員
$redis->sadd('set_key', 'member1', 'member2');
// 從集合中移除成員
$redis->srem('set_key', 'member1');
// 檢查成員是否存在于集合中
if ($redis->sismember('set_key', 'member1')) {
// 成員存在的處理邏輯
} else {
// 成員不存在的處理邏輯
}
-
鍵設(shè)置過期時(shí)間
在Redis中,你可以使用EXPIRE
命令為一個(gè)鍵設(shè)置過期時(shí)間,從而控制該鍵的有效期。以下是一些在Redis中設(shè)置鍵的有效期的方法: -
EXPIRE key seconds
:設(shè)置key
的過期時(shí)間為seconds
秒。當(dāng)seconds
秒鐘過去后,鍵將會(huì)自動(dòng)過期并被刪除。
例如,下面的代碼將名為mykey
的鍵設(shè)置為過期時(shí)間為60秒:
$redis->expire('mykey', 60);
-
PEXPIRE key milliseconds
:類似于EXPIRE
命令,但時(shí)間以毫秒為單位。
例如,下面的代碼將名為mykey
的鍵設(shè)置為過期時(shí)間為3000毫秒(即3秒):
$redis->pexpire('mykey', 3000);
-
EXPIREAT key timestamp
:設(shè)置key
的過期時(shí)間戳,以秒為單位。timestamp
參數(shù)是一個(gè)UNIX時(shí)間戳,表示鍵的過期時(shí)間點(diǎn)。
例如,下面的代碼將名為mykey
的鍵設(shè)置為在1612266625秒之后過期:
$redis->expireat('mykey', 1612266625);
-
PEXPIREAT key milliseconds-timestamp
:類似于EXPIREAT
命令,但時(shí)間戳以毫秒為單位。
例如,下面的代碼將名為mykey
的鍵設(shè)置為在1654123456789毫秒之后過期:
$redis->pexpireat('mykey', 1654123456789);
這些命令可用于設(shè)置Redis中鍵的過期時(shí)間。一旦過期時(shí)間到達(dá),鍵將被自動(dòng)刪除。注意,只有在鍵被設(shè)置為字符串、哈希表、列表等類型時(shí),過期設(shè)置才有效。
另外,如果你想獲取鍵的剩余過期時(shí)間,你可以使用TTL
命令或PTTL
命令。如ttl('mykey')
返回鍵mykey
的剩余過期時(shí)間(以秒為單位),pttl('mykey')
返回鍵mykey
的剩余過期時(shí)間(以毫秒為單位)。如果鍵已過期或不存在,這些命令返回負(fù)數(shù)。
這些是一些常用的Redis操作示例,你可以根據(jù)具體的業(yè)務(wù)需求,使用相應(yīng)的方法來進(jìn)行操作。記得在操作完成后,及時(shí)關(guān)閉Redis連接,以釋放資源。
三、PHP連接Redis
1.PHP中使用帶密碼的連接Redis
若要在PHP中使用帶密碼的連接Redis,你可以使用Redis擴(kuò)展的auth
方法進(jìn)行身份驗(yàn)證。以下是設(shè)置密碼并連接到Redis服務(wù)器的示例代碼:
<?php
$redis = new Redis();
// 連接到Redis服務(wù)器
$redis->connect('127.0.0.1', 6379);
// 身份驗(yàn)證
$redis->auth('your_password');
// 執(zhí)行一些操作
$redis->set('key', 'value');
$value = $redis->get('key');
echo $value; // 輸出 'value'
?>
在上述代碼中,your_password
是在Redis服務(wù)器上設(shè)置的密碼。使用auth
方法將密碼傳遞給Redis實(shí)例進(jìn)行身份驗(yàn)證。如果密碼不正確或與服務(wù)器配置不匹配,將會(huì)引發(fā)REDIS_AUTH
異常。因此,確保提供正確的密碼以及與服務(wù)器配置相匹配的密碼。
同樣地,如果在使用Laravel框架,你可以在config/database.php
文件中配置Redis連接的密碼。在對(duì)應(yīng)的'redis'
配置數(shù)組中添加'password' => 'your_password'
以設(shè)置密碼。
記得使用適當(dāng)?shù)陌踩胧﹣肀Wo(hù)Redis密碼,如避免將密碼明文存儲(chǔ)在代碼中或通過不安全的方式傳輸密碼。
2.PHP連接Redis拋出異常
try {
$redis = new Redis();
// 連接到Redis服務(wù)器
$redis->connect('127.0.0.1', 6379);
// 身份驗(yàn)證
$redis->auth('kYABzc8u3zNs7cq');
// 執(zhí)行一些操作
$redis->set('key', 'lockdata');
$value = $redis->get('key');
echo $value; // 輸出 'value'
// 關(guān)閉Redis連接
$redis->close();
} catch (RedisException $e) {
echo "連接Redis時(shí)發(fā)生異常:" . $e->getMessage();
}
3.PHP連接Redis:$redis->ping()
$redis->ping()
是Redis擴(kuò)展提供的一個(gè)方法,用于檢測(cè)與Redis服務(wù)器的連接是否存活。
它的使用很簡單,只需要調(diào)用$redis->ping()
方法即可。若連接正常且服務(wù)器可響應(yīng),則該方法返回字符串PONG
。若連接異常或服務(wù)器未響應(yīng),則會(huì)拋出RedisException
異常。
以下是一個(gè)示例:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
try {
$response = $redis->ping();
if ($response === 'PONG') {
echo "Redis連接正常";
} else {
echo "Redis連接異?;蚍?wù)器未響應(yīng)";
}
} catch (RedisException $e) {
echo "Redis連接異常:" . $e->getMessage();
}
$redis->close();
在上述示例中,我們首先創(chuàng)建一個(gè)Redis
對(duì)象,然后使用connect()
方法連接到Redis服務(wù)器。接下來,我們調(diào)用ping()
方法來檢測(cè)連接狀態(tài),并通過返回的響應(yīng)值進(jìn)行判斷。如果返回值為PONG
,則表示連接正常;如果返回值為其他內(nèi)容,或拋出了異常,則表示連接異?;蚍?wù)器未響應(yīng)。
記得在使用ping()
方法前確保已經(jīng)成功建立了與Redis服務(wù)器的連接,并在使用完成后及時(shí)關(guān)閉連接以釋放資源。
4.PHP連接Redis 條件語句寫法
如果你不想使用try
語句來捕獲異常,你可以通過檢查連接和操作返回的結(jié)果來判斷是否發(fā)生了異常。以下是一個(gè)示例代碼:
$redis = new Redis();
// 連接到Redis服務(wù)器
$connected = $redis->connect('127.0.0.1', 6379);
if ($connected === false) {
echo "無法連接到Redis服務(wù)器";
} else {
// 執(zhí)行一些操作
$setResult = $redis->set('key', 'value');
if ($setResult === false) {
echo "設(shè)置鍵值對(duì)發(fā)生了異常";
} else {
$value = $redis->get('key');
if ($value === false) {
echo "獲取鍵值對(duì)發(fā)生了異常";
} else {
echo $value; // 輸出 'value'
}
}
// 關(guān)閉Redis連接
$redis->close();
}
在上述示例中,我們首先檢查$redis->connect()
方法的返回值來確定是否成功連接到Redis服務(wù)器。如果連接失敗,我們可以輸出相應(yīng)的錯(cuò)誤信息。如果連接成功,我們?cè)賵?zhí)行一些操作,如$redis->set()
、$redis->get()
等,并檢查每個(gè)操作的返回結(jié)果來判斷是否發(fā)生了異常。
使用這種寫法,你可以根據(jù)返回結(jié)果進(jìn)行邏輯判斷和處理,而無需使用try
和catch
塊來捕獲異常。這種寫法相對(duì)簡單,但在處理多個(gè)操作和嵌套邏輯時(shí)可能會(huì)導(dǎo)致代碼變得復(fù)雜。
記得在代碼中適當(dāng)處理連接和操作過程中的異常,確保你的程序具備健壯性并能正確處理錯(cuò)誤情況。
四、避坑指南
NOAUTH Authentication required 錯(cuò)誤
Fatal error: Uncaught exception ‘RedisException’ with message ‘NOAUTH Authentication required.’ in /www/wwwroot/redis.lockdata.cn/index.php:12 Stack trace: #0 /www/wwwroot/redis.lockdata.cn/index.php(12): Redis->set(‘key1’, ‘value1’) #1 {main} thrown in /www/wwwroot/redis.lockdata.cn/index.php on line 12
**原因:**未配置Redis密碼導(dǎo)致。文章來源:http://www.zghlxwxcb.cn/news/detail-617210.html
// 身份驗(yàn)證
$redis->auth('kYABzc8u3zNs7cq');
@漏刻有時(shí)文章來源地址http://www.zghlxwxcb.cn/news/detail-617210.html
到了這里,關(guān)于PHP使用Redis實(shí)戰(zhàn)實(shí)錄2:Redis擴(kuò)展方法和PHP連接Redis的多種方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!