一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

redis 隊列操作的例子(php)

入隊操作
復制代碼 代碼如下:
<?php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
while(True){
try{
$value = 'value_'.date('Y-m-d H:i:s');
$redis->LPUSH('key1',$value);
sleep(rand()%3);
echo $value."/n";
}catch(Exception $e){
echo $e->getMessage()."/n";
}
}
?>

出隊操作
復制代碼 代碼如下:
<?php
$redis = new Redis();
$redis->pconnect('127.0.0.1',6379);
while(True){
try{
echo $redis->LPOP('key1')."/n";
}catch(Exception $e){
echo $e->getMessage()."/n";
}
sleep(rand()%3);
}?>

如何使用Redis 做隊列操作
Reids是一個比較高級的開源key-value存儲系統,采用ANSI C實現。其與memcached類似,但是支持持久化數據存儲,同時value支持多種類型:字符串 (同memcached中的value),列表 ,集合 (Set),有序集合 (OrderSet)和Hash 。所有的值類型均支持原子操作,如列表中追加彈出元素,集合中插入移除元素等。Rdids的數據大部分位于內存中,其讀寫效率非常高,其提供AOF(追加 式操作記錄文件)和DUMP(定期數據備份)兩種持久化方式。Redis支持自定義的VM(虛擬內存)機制,當數據容量超過內存時,可以將部分Value 存儲到文件中。同時Redis支持Master-Slave機制,可以進行數據復制。
可以把Redis的list結構當隊列來用.
從上面Redis的場景和作用來說,對于我們現在的開發活動,究竟能把Redis引入在那些場景,而不是把這么好的東東演變成“為了使用Redis,而Redis”的慘烈局面呢?當然,具體問題具體分析,這個真的很重要哈。
緩存?分布式緩存?
隊列?分布式隊列?
某些系統應用(例如,電信、銀行和大型互聯網應用等)都會使用到,當然,現在大行其道的memcache就是很好的證明;但從某一方面來說,memcache是否能把兩張囊括其中,而且能做到更好(沒有實際的應用過,所以只是拋出)。但從Redis身上,我就能感覺到,Redis,就能把隊列和緩存兩張都囊括其中,而且都不會產生并發環境下的困擾,因為Redis中的操作都是原子操作來著。
至于評論兩者的孰好孰壞就免了,存在就是理由,選擇適合的就是最好的。
下面開始玩玩Redis中的隊列(分布式)設計YY吧,請大蝦們多多指點。
狀況場景:
現在的項目,都是部署在多個服務器,或者多個IP上,而且前臺經由F5分發,所以用戶的請求究竟落在那一臺的服務器上,是無法確定的。對于項目中,有一秒殺設計,剛開始沒有考慮到這種部署,同時也是使用最容易處理的方式,直接給數據庫表鎖行記錄(Oracle上的)。可以說,對于不同的應用部署,而只有一臺數據庫服務器來說,很“輕松”的就解決了這個并發的問題。所以現在考慮一下,是不是挪到應用上,避免數據庫服務器也摻雜到業務上。
比如,現在有2臺應用服務器,1臺數據庫服務器。想法是,把Redis部署在數據庫服務器上,兩臺服務器在操作并發緩存或者隊列時,先從Redis服務器上,取得在兩臺應用服務器的代理對象,再做入列出列的操作。
看代碼實現(php
入隊列操作文件 list_push.php
復制代碼 代碼如下:
<?php
$redis = getRedisInstance();//從Redis服務器拿到redis實例
$redis->connect('Redis服務器IP', 6379);
while (true) {
$redis->lPush('list1', 'A_'.date('Y-m-d H:i:s'));
sleep(rand()%3);
}
?>

執行# php list_push.php &
出隊列操作 list_pop.php文件
復制代碼 代碼如下:
<?php
$redis = getRedisInstance();//從Redis服務器拿到redis實例
$redis->pconnect('Redis服務器IP', 6379);
while(true) {
try {
var_export( $redis->blPop('list1', 10) );
} catch(Exception $e) {
//echo $e;
}
}

實現方法(Python)
1.入隊列(write.py)
復制代碼 代碼如下:
#!/usr/bin/env Python
import time
from redis import Redis
redis = Redis(host='127.0.0.1', port=6379)
while True:
now = time.strftime("%Y/%m/%d %H:%M:%S")
redis.lpush('test_queue', now)
time.sleep(1)

2.出隊列(read.py)
復制代碼 代碼如下:
#!/usr/bin/env Python
import sys
from redis import Redis
redis = Redis(host='127.0.0.1', port=6379)
while True:
res = redis.rpop('test_queue')
if res == None:
pass
else:
print str(res)

在操作時,注意,要操作的是同一個list對象。
呵呵,現在的主要思路就差不多就是如此,不過真實場景中,會有出入。

php技術redis 隊列操作的例子(php),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 狠狠五月深爱婷婷网 | 丁香激情六月 | 国产在线看不卡一区二区 | 国内精品免费网站牛牛 | 一区二区三区在线观看免费 | 精品国产乱码久久久久久浪潮 | 欧美色欧美色 | 视频在线观看黄 | 手机亚洲第一页 | 视频区 图片区 小说区 | 国产福利免费视频 | 成人怡红院视频在线观看 | 日本一本色道 | 国产成人精品一区二区视频 | 色综合狠狠干 | 国产偷国产偷亚洲高清人乐享 | 美女被男人狂躁免费视频 | 黄色大片a级| 77777网站 | 怡红院一区 | 九九久久精品国产 | 久久久91 | 午夜免费在线观看 | 国产极品嫩模在线观看91精品 | 精品成人免费一区二区在线播放 | 久久国产精品99久久久久久牛牛 | 国产情侣普通话刺激对白 | 精品资源在线 | 色哟哟在线观看视频高清大全 | 欧美成人v视频免费看 | 亚洲一区色 | 香港三级午夜理伦三级99 | 91九色视频无限观看免费 | 亚洲无吗在线视频 | 欧美性色综合网 | 激情15p| 成年午夜视频免费观看视频 | 婷婷亚洲激情 | 91精品国产自产在线观看高清 | 色婷婷在线视频观看 | 国产一区二区在线免费观看 |