當前位置:首頁 » 編程語言 » php的redis手冊

php的redis手冊

發布時間: 2024-05-01 09:54:26

❶ 如何使用Redis 做隊列操作

  • redis設計用來做緩存的,但是由於它自身的某種特性使得它可以用來做消息隊列,它有幾個阻塞式的API可以使用,正是這些阻塞式的API讓其有能力做消息隊列;

  • 另外,做消息隊列的其他特性例如FIFO(先入先出)也很容易實現,只需要一個list對象從頭取數據,從尾部塞數據即可;

  • redis能做消息隊列還得益於其list對象blpop brpop介面以及Pub/Sub(發布/訂閱)的某些介面,它們都是阻塞版的,所以可以用來做消息隊列。

❷ 怎麼安裝redis php擴展,windows下

1、首先到相應網站下載redis:

下載完成後解壓到任意盤符如:D:/redis

裡麵包括:如圖所示。

redis-server.exe:服務程序

redis-check-mp.exe:本地資料庫檢查

redis-check-aof.exe:更新日誌檢查

redis-benchmark.exe:性能測試,用以模擬同時由N個客戶端發送M個 SETs/GETs 查詢 (類似於 Apache 的ab 工具).

當然還需要一個:redis.conf(具體內容網上隨便搜都會有)

8、PHP代碼測試

$redis = new Redis();

$redis->connect("192.168.138.2","6379"); //php客戶端設置的ip及埠

//存儲一個 值

$redis->set("say","Hello World");

echo $redis->get("say"); //應輸出Hello World

//存儲多個值

$array = array('first_key'=>'first_val',

'second_key'=>'second_val',

'third_key'=>'third_val');

$array_get = array('first_key','second_key','third_key');

$redis->mset($array);

var_mp($redis->mget($array_get));

❸ php 怎麼把session寫入redis

一、 安裝phpredis擴展
php連接redis需要安裝phpredis擴展。
下載地址:https://github.com/phpredis/phpredis/releases,選用相應版本。
筆者用的是php5.6.29,下載了phpredis-3.0.0安裝出了問題,於是換成phpredis-2.2.8,正常。
# tar zxvf phpredis-2.2.8.tar.gz && cd phpredis-2.2.8
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make && make install
正常情況下會提示在下面目錄下生成redis.so文件
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
# sed -i '$aextension="redis.so"' /usr/local/php/etc/php.ini
# service httpd restart
驗證:
# php -i | grep redis | grep -xq redis && echo ok || echo "phpredis extended failure"
二、 配置php連接redis(筆者使用的阿里雲redis)
# sed -i 's/session.save_handler.*/session.save_handler = redis/' /usr/local/php/etc/php.ini
# sed -i '/session.save_handler/asession.save_path ="tcp://xxxx.rds.aliyuncs.com?auth=redis密碼"' /usr/local/php/etc/php.ini
# service httpd restart

❹ thinkphp redis 怎麼選擇資料庫

1、redis 中的每一個資料庫,都由一個 redisDb 的結構存儲。其中,redisDb.id 存儲著 redis 資料庫以整數表示的號碼。redisDb.dict 存儲著該庫所有的鍵值對數據。redisDb.expires 保存著每一個鍵的過期時間。

2、當redis 伺服器初始化時,會預先分配 16 個資料庫(該數量可以通過配置文件配置),所有資料庫保存到結構 redisServer 的一個成員 redisServer.db 數組中。當我們選擇資料庫 select number 時,程序直接通過 redisServer.db[number] 來切換資料庫。有時候當程序需要知道自己是在哪個資料庫時,直接讀取 redisDb.id 即可。

3、既然我們知道一個資料庫的所有鍵值都存儲在redisDb.dict中,那麼我們要知道如果找到key的位置,就有必要了解一下dict 的結構了:

typedef struct dict {

// 特定於類型的處理函數
dictType *type;

// 類型處理函數的私有數據
void *privdata;

// 哈希表(2個)
dictht ht[2];

// 記錄 rehash 進度的標志,值為-1 表示 rehash 未進行
int rehashidx;

// 當前正在運作的安全迭代器數量
int iterators;
} dict;
由上述的結構可以看出,redis 的字典使用哈希表作為其底層實現。dict 類型使用的兩個指向哈希表的指針,其中 0 號哈希表(ht[0])主要用於存儲資料庫的所有鍵值,而1號哈希表主要用於程序對 0 號哈希表進行 rehash 時使用,rehash 一般是在添加新值時會觸發,這里不做過多的贅述。所以redis 中查找一個key,其實就是對進行該dict 結構中的 ht[0] 進行查找操作。

4、既然是哈希,那麼我們知道就會有哈希碰撞,那麼當多個鍵哈希之後為同一個值怎麼辦呢?redis採取鏈表的方式來存儲多個哈希碰撞的鍵。也就是說,當根據key的哈希值找到該列表後,如果列表的長度大於1,那麼我們需要遍歷該鏈表來找到我們所查找的key。當然,一般情況下鏈表長度都為是1,所以時間復雜度可看作o(1)。

二、當redis 拿到一個key 時,如果找到該key的位置。

了解了上述知識之後,我們就可以來分析redis如果在內存找到一個key了。

1、當拿到一個key後, redis 先判斷當前庫的0號哈希表是否為空,即:if (dict->ht[0].size == 0)。如果為true直接返回NULL。

2、判斷該0號哈希表是否需要rehash,因為如果在進行rehash,那麼兩個表中者有可能存儲該key。如果正在進行rehash,將調用一次_dictRehashStep方法,_dictRehashStep 用於對資料庫字典、以及哈希鍵的字典進行被動 rehash,這里不作贅述。

3、計算哈希表,根據當前字典與key進行哈希值的計算。

4、根據哈希值與當前字典計算哈希表的索引值。

5、根據索引值在哈希表中取出鏈表,遍歷該鏈表找到key的位置。一般情況,該鏈表長度為1。

6、當 ht[0] 查找完了之後,再進行了次rehash判斷,如果未在rehashing,則直接結束,否則對ht[1]重復345步驟。

到此我們就找到了key在內存中的位置了。

❺ php-redis擴展 怎麼裝安裝啊

1、下載PHPredis安裝包,可以去去pecl官網下載


2、解壓安裝並進入Redis目錄

[root@Redis ~]# tar xzf redis-2.2.5.tgz
[root@Redis ~]# cd redis-2.2.5

3、在Redis文件夾下,生成configure配置文件

[root@Redis redis-2.2.5]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:20090626
Zend Mole Api No:20090626
Zend Extension Api No:220090626

[root@Redis redis-2.2.5]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@Redis redis-2.2.5]# make
[root@Redis redis-2.2.5]# make install
Installing shared extensions:/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
cp: cannot create regularfile`/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/#INST@6338#': Permission denied
make:***[install-moles]Error1

注意:一定要用root用戶。
[root@Redis redis-2.2.5]# su
Password:
[root@web redis-2.2.5]# make install

4、在PHP配置文件php.ini裡面載入Redis擴展

extension=redis.so

5、查看phpinfo,Redis擴展是否載入
redis
Redis Support enabled
Redis Version 2.2.5
至此,Redis擴展已經安裝成功並載入,可以用PHP操作Redis了。
附:
windows下安裝Redis擴展就更加簡單了,找到對應的版本,下載dll文件,放到PHP目錄下面的ext,修改PHP的配置文件php.ini,載入extension=php_redis.dll,重啟Apache,查看phpinfo是否有Redis,如果有就恭喜你,已經安裝成功了,就是這么簡單。

❻ mac中怎樣通過brew 安裝php的redis擴展

1、下載php-redis;
2、下載完後進行解壓,然後移動到系統自帶php的同級目錄;①
cp /Users/panxu/Desktop/phpredis /etc

3、進入phpredis;

cd /etc/phpredis

4、動態安裝php擴展模塊;②

/usr/bin/phpize

5、進行編譯

./configure --with-php-config=/usr/bin/php-config

6、開始安裝;

make && make install

安裝完成,如果成功,會有如下提示:

Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20160303/

7、找到php.ini文件,並進行編輯;③

vi php.ini

在配置文件最後一行加入:

extension=redis.so

8、重啟php-fpm,完成安裝。④
步驟中的涉及到的資源和詳細解釋請參考:https://panxu.net/article/8400.html

❼ 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
保證同一時間只有一個訪問有效,有效限制並發訪問。
為了避免系統突然出錯導致死鎖,所以在獲取鎖的時候增加一個過期時間,如果已超過過期時間,即使是鎖定狀態都會釋放鎖,避免死鎖導致的問題。
源碼下載地址:點擊查看

❽ php涓轟粈涔堜嬌鐢╮edis



1銆 Redis綆浠
redis鏄疦osql鏁版嵁搴撲腑浣跨敤杈冧負騫挎硾鐨勯潪鍏崇郴鍨嬪唴瀛樻暟鎹搴擄紝redis鍐呴儴鏄涓涓猭ey-value瀛樺偍緋葷粺銆傚畠鏀鎸佸瓨鍌ㄧ殑value綾誨瀷鐩稿規洿澶氾紝鍖呮嫭string(瀛楃︿覆)銆乴ist(閾捐〃)銆乻et(闆嗗悎)銆亃set(sorted set _鏈夊簭闆嗗悎)鍜宧ash錛堝搱甯岀被鍨嬶紝綾諱技浜嶫ava涓鐨刴ap錛夈俁edis鍩轟簬鍐呭瓨榪愯屽苟鏀鎸佹寔涔呭寲鐨凬oSQL鏁版嵁搴擄紝鏄褰撳墠鏈鐑闂ㄧ殑NoSql鏁版嵁搴撲箣涓錛屼篃琚浜轟滑縐頒負鏁版嵁緇撴瀯鏈嶅姟鍣ㄣ
2銆 浜掕仈緗戞椂浠h儗鏅涓嬪ぇ鏈洪亣錛屼粈涔堣佷嬌鐢∟osql錛
1錛 褰撴暟鎹閲忕殑鎬誨ぇ灝忎竴涓鏈哄櫒鏀句笉涓嬫椂銆
2錛 鏁版嵁緔㈠紩涓涓鏈哄櫒鐨勫唴瀛樻斁涓嶄笅鏃躲
3錛 璁塊棶閲忥紙璇誨啓娣峰悎錛変竴涓瀹炰緥鏀句笉涓嬫椂銆
鍗曟満鏃朵唬妯″瀷
濡傛灉姣忔″瓨鍌ㄦ垚鍗冧笂涓囨潯鏁版嵁錛岃繖鏍峰緢浼氬艱嚧MySQL鐨勬ц兘寰堝樊錛屽瓨鍌ㄤ互鍙婅誨彇閫熷害寰堟參錛岀劧鍚庡氨婕斿彉鎴愮紦瀛+mysql+鍨傜洿鎷嗗垎鐨勬柟寮忋
Cache浣滀負涓闂寸紦瀛
灝嗘墍鏈夌殑鏁版嵁鍏堜繚瀛樺埌緙撳瓨涓錛岀劧鍚庡啀瀛樺叆mysql涓錛屽噺灝忔暟鎹搴撳帇鍔涳紝鎻愰珮鏁堢巼銆 浣嗘槸褰撴暟鎹鍐嶆″炲姞鍒板張涓涓閲忕駭錛屼笂闈㈢殑鏂瑰紡涔熶笉鑳芥弧瓚抽渶奼傦紝鐢變簬鏁版嵁搴撶殑鍐欏叆鍘嬪姏澧炲姞錛孧emcached鍙鑳界紦瑙f暟鎹搴撶殑璇誨彇鍘嬪姏銆
璇誨啓闆嗕腑鍦ㄤ竴涓鏁版嵁搴撲笂璁╂暟鎹搴撲笉鍫閲嶈礋錛屽ぇ閮ㄥ垎緗戠珯寮濮嬩嬌鐢ㄤ富浠庡嶅埗鎶鏈鏉ヨ揪鍒拌誨啓鍒嗙伙紝浠ユ彁楂樿誨啓鎬ц兘鍜岃誨簱鐨勫彲鎵╁睍鎬с侻ysql鐨刴aster-slave妯″紡鎴愪負榪欎釜鏃跺欑殑緗戠珯鏍囬厤浜嗐
涓諱粠鍒嗙繪ā寮
鍦╮edis鐨勯珮閫熺紦瀛橈紝MySQL鐨勪富浠庡嶅埗錛岃誨啓鍒嗙葷殑鍩虹涔嬩笂錛岃繖鏃禡ySQL涓誨簱鐨勫啓鍘嬪姏寮濮嬪嚭鐜扮摱棰堬紝鑰屾暟鎹閲忕殑鎸佺畫鐚涘烇紝鐢變簬MyISAM浣跨敤琛ㄩ攣錛屽湪楂樺苟鍙戜笅浼氬嚭鐜頒弗閲嶇殑閿侀棶棰橈紝澶ч噺鐨勯珮騫跺彂MySQL搴旂敤寮濮嬩嬌鐢↖nnoDB寮曟搸浠f浛MyISAM銆
鍒嗚〃鍒嗗簱妯″紡
灝嗗彉鍖栧皬鐨勩佷笟鍔$浉鍏崇殑鏀懼湪涓涓鏁版嵁搴擄紝鍙樺寲澶氱殑錛屼笉鐩稿叧鐨勬暟鎹鏀懼湪涓涓鏁版嵁搴撱
3銆 nosql鏁版嵁搴撶殑浼樺娍
1錛夋槗鎵╁睍
榪欎簺綾誨瀷鐨勬暟鎹瀛樺偍涓嶉渶瑕佸滻瀹氱殑妯″紡錛屾棤闇澶氫綑鐨勬搷浣滃氨鍙浠ヨ繘琛屾í鍚戠殑鎵╁睍銆傜浉瀵逛簬鍏崇郴鍨嬫暟鎹搴撳彲浠ュ噺灝戣〃鍜屽瓧孌電壒鍒澶氱殑鎯呭喌銆備篃鏃犲瀷涔嬮棿鍦ㄦ灦鏋勭殑灞傞潰涓婂甫鏉ヤ簡鍙鎵╁睍鐨勮兘鍔
2錛夊ぇ鏁版嵁閲忔彁楂樻ц兘
3錛夊氭牱鐏墊椿鐨勬暟鎹妯″瀷
鍦╪osql涓涓嶄粎鍙浠ュ瓨鍌⊿tring錛宧ash錛宻et銆乑set絳夋暟鎹綾誨瀷錛岃繕鍙浠ヤ繚瀛榡avaBean浠ュ強澶氱嶅嶆潅鐨勬暟鎹綾誨瀷銆
4銆 NoSql鐨勫簲鐢
1錛 澶ф暟鎹鏃朵唬娣樺疂銆佸井淇°佷互鍙婂井鍗氱瓑閮藉箍娉涚殑浣跨敤浜唕edis鏁版嵁搴擄紝灝嗕竴浜涘滻瀹氫笉鍙樼殑鏁版嵁渚嬪傚︽牎錛屽尯鍩熺瓑鍥哄畾鐨勪俊鎮淇濆瓨鍦ㄥ叧緋誨瀷鏁版嵁搴撲腑銆傜劧鍚庡逛簬緇忓父鍙樺寲鐨勬暟鎹渚嬪傛窐瀹濇瘡涓鑺傛棩閮戒細鏈夋瘮杈冪儹闂ㄧ殑鎼滅儲鏄劇ず鍦ㄦ悳緔㈡嗭紝褰撹妭鏃ヨ繃鍘誨叧閿瀛楄嚜鍔ㄥ垹闄わ紝涓轟簡渚誇簬綆$悊錛屽彲浠ュ皢榪欎簺鏁版嵁淇濆瓨鍦╮edis鏁版嵁搴撲腑錛屽苟璁劇疆榪囨湡鏃墮棿錛屽埌杈炬椂闂村氨鑷鍔ㄥ垹闄ゃ
2錛変負浜嗙紦瑙f暟鎹搴撳帇鍔涳紝寰鍗氶栧厛灝嗗彂閫佺殑寰鍗氫繚瀛樺埌redis鏁版嵁搴擄紝鑷宸卞彲浠ョ珛鍗蟲煡鐪嬪埌錛岀劧鍚庡皢鍐呭瓨涓鐨勬暟鎹鍚屾ュ埌鍏崇郴鍨嬫暟鎹搴撱
浠ヤ笂鍐呭逛粎渚涘弬鑰冿紒
鎺ㄨ崘瑙嗛戞暀紼嬶細redis鏁欑▼

熱點內容
基岩版uhc伺服器ip 發布:2024-05-21 17:56:48 瀏覽:948
java源代碼反編譯專家 發布:2024-05-21 17:48:45 瀏覽:156
yunos的密碼是多少 發布:2024-05-21 17:37:26 瀏覽:953
php時間今天 發布:2024-05-21 17:34:39 瀏覽:58
腳本開機自動運行 發布:2024-05-21 17:33:43 瀏覽:275
為什麼安卓手機內存總剩一半 發布:2024-05-21 17:33:03 瀏覽:893
php成員變數 發布:2024-05-21 16:21:50 瀏覽:988
眷思量迅雷下載ftp 發布:2024-05-21 16:18:24 瀏覽:308
斗羅大陸怎麼自己建伺服器 發布:2024-05-21 16:03:23 瀏覽:739
河南網通伺服器託管雲主機 發布:2024-05-21 15:46:00 瀏覽:171