導航:首頁 > 編程語言 > redisphp如何使用

redisphp如何使用

發布時間:2023-11-09 12:54:54

1. 在php中 為什麼不能使用redis類

redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)和zset(有序集合)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
Redis 是一個高性能的key-value資料庫。redis的出現,很大程度補償了memcached這類keyvalue存儲的不足,在部 分場合可以對關系資料庫起到很好的補充作用。它提供了Python,Ruby,Erlang,PHP客戶端,使用很方便。
若想在PHP中使用redis,首先要先安裝redis。然後在PHP中配置擴展。
安裝redis。
首先下載好redis安裝文件,解壓到D盤或其他盤。
然後通過Dos命令行進行安裝。
把這個文件夾復制到其它地方,比如D:\redis 目錄下。
打開一個cmd窗口 使用cd命令切換目錄到D:\redis 運行 redis-server.exe redis.conf
如果想方便的話,可以把redis的路徑加到系統的環境變數里,這樣就省得再輸路徑了,後面的那個redis.conf可以省略,如果省略,會啟用默認的。
這時候另啟一個cmd窗口,原來的不要關閉,不然就無法訪問服務端了
切換到redis目錄下運行 redis-cli.exe -h 127.0.0.1 -p 6379

這時候,就已經完成配置了。
完成了配置之後,要在PHP中添加redis的擴展,之後才可以用PHP靈活的使用它。
在windows下安裝php的redis擴展非常簡單,下載一個.dll擴展包放到php的ext目錄下,在php.ini里邊添加一行配置就可以了。

php代碼測試

redis=newRedis();redis->connect(『127.0.0.1′,6379);
redis−>set(『test′,′helloworld!′);echoredis->get(『test』);

輸出hello world!

2. php yii框架操作redis問題。可以獲取到redis對象信息,但是set總是報錯。

從錯誤提示來看,是許可權問題。檢查一下redis連接配置,有沒有設置密碼等,然後自己本地先連接一下redis看看能不能連接,如果能正常連接,再使用同樣的配置,用Yii來連接。

3. PHP 如何在Redis中實現事物(事物提交和事物

public function index()
{
$serv = new \swoole_server("0.0.0.0", 9501);
$serv->set([
'worker_num' => 1,//一般設置為伺服器CPU數的1-4倍
'task_worker_num' => 8,//task進程的數量
'daemonize' => 1,//以守護進程執行
'max_request' => 10000,//最大請求數量
"task_ipc_mode " => 2 //使用消息隊列通信,並設置為爭搶模式
]);
$serv->on('Receive', [$this, 'onReceive']);//接收任務,並投遞
$serv->on('Task', [$this, 'onTask']);//可以在這個方法裡面處理任務
$serv->on('Finish', [$this, 'onFinish']);//任務完成時候調用
$serv->start();
}

4. thinkphp5模型如何使用redis操作資料庫CURD操作

模型中添加如下代碼,可實現更新或插入前刪除緩存:
protected static function init()
{
TurnGiftSetting::beforeInsert(function ($model) {
$redis = new Redis(config('redis'));
$redis->rm(self::$redisKey);
});
TurnGiftSetting::beforeUpdate(function ($model) {
$redis = new Redis(config('redis'));
$redis->rm(self::$redisKey);
});

TurnGiftSetting::beforeDelete(function ($model) {
$redis = new Redis(config('redis'));
$redis->rm(self::$redisKey);
});
TurnGiftSetting::beforeWrite(function ($model) {
$redis = new Redis(config('redis'));
$redis->rm(self::$redisKey);
});
}

5. php使用redis的有序集合zset實現延遲隊列

延遲隊列就是個帶延遲功能的消息隊列,相對於普通隊列,它可以在指定時間消費掉消息。

我們通過redis的有序集合zset來實現簡單的延遲隊列,將消息數據序列化,作為zset的value,把消息處理時間作為score,每次通過zRangeByScore獲取一條消息進行處理。

然後,我們寫一個php腳本,用來處理隊列中的任務。

6. php 使用redis鎖限制並發訪問類示例

本文介紹了php
使用redis鎖限制並發訪問類,並詳細的介紹了並發訪問限制方法。
1.並發訪問限制問題
對於一些需要限制同一個用戶並發訪問的場景,如果用戶並發請求多次,而伺服器處理沒有加鎖限制,用戶則可以多次請求成功。
例如換領優惠券,如果用戶同一時間並發提交換領碼,在沒有加鎖限制的情況下,用戶則可以使用同一個換領碼同時兌換到多張優惠券。
偽代碼如下:
if
A(可以換領)

B(執行換領)

C(更新為已換領)
D(結束)
如果用戶並發提交換領碼,都能通過可以換領(A)的判斷,因為必須有一個執行換領(B)後,才會更新為已換領(C)。因此如果用戶在有一個更新為已換領之前,有多少次請求,這些請求都可以執行成功。
2.並發訪問限制方法
使用文件鎖可以實現並發訪問限制,但對於分布式架構的環境,使用文件鎖不能保證多台伺服器的並發訪問限制。
Redis是一個開源的使用ANSI
C語言編寫、支持網路、可基於內存亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。
本文將使用其setnx方法實現分布式鎖功能。setnx即Set
it
N**ot
eX**ists。
當鍵值不存在時,插入成功(獲取鎖成功),如果鍵值已經存在,則插入失敗(獲取鎖失敗)
RedisLock.class.PHP
<?php
/**
*
Redis鎖操作類
*
Date:
2016-06-30
*
Author:
fdipzone
*
Ver:
1.0
*
*
Func:
*
public
lock
獲取鎖
*
public
unlock
釋放鎖
*
private
connect
連接
*/
class
RedisLock
{
//
class
start
private
$_config;
private
$_redis;
/**
*
初始化
*
@param
Array
$config
redis連接設定
*/
public
function
__construct($config=array()){
$this->_config
=
$config;
$this->_redis
=
$this->connect();
}
/**
*
獲取鎖
*
@param
String
$key
鎖標識
*
@param
Int
$expire
鎖過期時間
*
@return
Boolean
*/
public
function
lock($key,
$expire=5){
$is_lock
=
$this->_redis->setnx($key,
time()+$expire);
//
不能獲取鎖
if(!$is_lock){
//
判斷鎖是否過期
$lock_time
=
$this->_redis->get($key);
//
鎖已過期,刪除鎖,重新獲取
if(time()>$lock_time){
$this->unlock($key);
$is_lock
=
$this->_redis->setnx($key,
time()+$expire);
}
}
return
$is_lock?
true
:
false;
}
/**
*
釋放鎖
*
@param
String
$key
鎖標識
*
@return
Boolean
*/
public
function
unlock($key){
return
$this->_redis->del($key);
}
/**
*
創建redis連接
*
@return
Link
*/
private
function
connect(){
try{
$redis
=
new
Redis();
$redis->connect($this->_config['host'],$this->_config['port'],$this->_config['timeout'],$this->_config['reserved'],$this->_config['retry_interval']);
if(empty($this->_config['auth'])){
$redis->auth($this->_config['auth']);
}
$redis->select($this->_config['index']);
}catch(RedisException
$e){
throw
new
Exception($e->getMessage());
return
false;
}
return
$redis;
}
}
//
class
end
?>
demo.php
<?php
require
'RedisLock.class.php';
$config
=
array(
'host'
=>
'localhost',
'port'
=>
6379,
'index'
=>
0,
'auth'
=>
'',
'timeout'
=>
1,
'reserved'
=>
NULL,
'retry_interval'
=>
100,
);
//
創建redislock對象
$oRedisLock
=
new
RedisLock($config);
//
定義鎖標識
$key
=
'mylock';
//
獲取鎖
$is_lock
=
$oRedisLock->lock($key,
10);
if($is_lock){
echo
'get
lock
success<br>';
echo
'do
sth..<br>';
sleep(5);
echo
'success<br>';
$oRedisLock->unlock($key);
//
獲取鎖失敗
}else{
echo
'request
too
frequently<br>';
}
?>
測試方法:
打開兩個不同的瀏覽器,同時在A,B中訪問demo.php
如果先訪問的會獲取到鎖
輸出
get
lock
success
do
sth..
success
另一個獲取鎖失敗則會輸出request
too
frequently
保證同一時間只有一個訪問有效,有效限制並發訪問。
為了避免系統突然出錯導致死鎖,所以在獲取鎖的時候增加一個過期時間,如果已超過過期時間,即使是鎖定狀態都會釋放鎖,避免死鎖導致的問題。
源碼下載地址:點擊查看

閱讀全文

與redisphp如何使用相關的資料

熱點內容
易語言源碼轉python 瀏覽:364
程序員日祝福 瀏覽:883
阿里tv助手app哪裡下載 瀏覽:187
app活動怎麼關 瀏覽:202
java改變map 瀏覽:348
解壓鋼琴呂恆 瀏覽:991
程序員怎麼獲取被動收入 瀏覽:568
能不能別讓編程貓打電話給我了 瀏覽:687
量線突破指標源碼 瀏覽:458
雲伺服器阿里環境搭建 瀏覽:123
錐孔是怎麼編程的 瀏覽:133
加強箍和加密箍的區別 瀏覽:897
怎麼在騰訊伺服器上傳文件 瀏覽:643
公司門戶app安卓怎麼卸載 瀏覽:989
單片機中段源 瀏覽:143
電腦桌面文件加密要怎樣解除 瀏覽:963
quickfoxapp的商場在哪裡 瀏覽:2
單片機與pc機通信畢業設計 瀏覽:221
wan口的伺服器默認賬號是什麼 瀏覽:177
取小數位數php 瀏覽:716