日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redis 使用管道提升写入的性能[pipeline]

發布時間:2024/9/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis 使用管道提升写入的性能[pipeline] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看了手冊的都知道multi這個命令的作用就好比是mysql的事務的功能,但是大家都知道事務嗎,就是在操作的過程中,把整個操作當作一個原子來處理,避免由于中途出錯而導致最后產生的數據不一致,而產生BUG ,Mysql的事務功能可以做到這點,但是在redis中的multi,手冊中說是把多個命令當作個事務來處理,但是在真正的測試之后發現并沒有所說的事務的功能,個人經過測試發現,只有把他watch命令結合起來用,方可顯現出其具有事務的功能,所以這點很是迷惑,關鍵是有一點很詫異,當啟用了multi命令之后整個redis的讀寫會相對于沒有使用multi的的讀寫要慢一點,我通過讀寫100W條數據發現,他們的速度相差600多毫秒,搞不清楚為什么相差這么多!個人覺得沒有必要,還是不要使用這個multi的為好!
至于redis的pipeline命令,看手冊都知道,它能夠讓(多條)執行命令簡單的,更加快速的發送給服務器,但是沒有任何原子性的保證,能不能保證原子性這個我沒有測試,但是這個速度我測試了下,確實是吃了一驚啊!相比于沒有使用pipeline的讀寫操作,使用了pipeline命令的操作要快12倍不止啊!這個效率高的。。。。
下面是我的測試代碼:歡迎拍磚。

<?phpset_time_limit(0);//計時函數 function G($start,$end='',$dec=4) {static $_info = array();if (!empty($end)){if(!isset($_info[$end])) $_info[$end] = microtime(TRUE);$sconds = number_format(($_info[$end]-$_info[$start]), $dec) * 1000;echo "{$sconds}ms<br />";}else{$_info[$start] = microtime(TRUE);} }$redis = new Redis(); $redis->connect('127.0.0.1');G('t'); $redis->pipeline(); for ($i=0; $i < 100000 ; $i++) { $redis->set("test_{$i}", pow($i, 2));$redis->get('test_{$i}'); } $redis->exec(); G('t','r');G('m'); $redis->multi(); for ($i=0; $i < 100000 ; $i++) { $redis->set("test_{$i}", pow($i, 2));$redis->get('test_{$i}'); } $redis->exec(); G('m','i');$redis->flushdb();G('f'); for ($i=0; $i < 100000 ; $i++) { $redis->set("test_{$i}", pow($i, 2));$redis->get('test_{$i}'); } G('f','e');?>

這是返回的結果:
//pipeline的執行時間
1926.5ms
//multi的執行時間
27725.7ms
//正常情況下
24832.1ms

來源:https://www.cnblogs.com/hgj123/p/4646298.html

總結

以上是生活随笔為你收集整理的redis 使用管道提升写入的性能[pipeline]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。