redis 應用場景

1、redis是項目中比較常見使用的內(nèi)存型數(shù)據(jù)庫,具有以下方面的特點:
1、redis是純內(nèi)存型的數(shù)據(jù)庫。
2單線程模型,減少線程上下文切換。
3、非阻塞IO,IO多路復用,將數(shù)據(jù)庫的開、關、讀、寫都轉換成了事件,減少了線程切換時上下文的切換 和競爭。
4、Redis全程使用hash結構,讀取速度快,還有一些特殊的數(shù)據(jù)結構,對數(shù)據(jù)存儲進行了優(yōu)化。
2、使用方式
基本連接:

$ip_addr='127.0.0.1';
$port=6379;
$redis  = new Redis();
$redis->connect(ip_addr,$port);
$redis->auth($password);   //config設置密碼時使用
$redis->select(); //庫選擇,0 -- 15

hash結構數(shù)據(jù)緩存:

//緩存用戶信息,文章,商品等
$id="xxxx";
$redis->hmset(‘user_’.$id,['name'=>'xxxxx',  'sex'=>1,  'addr'=>'xxxxxxxxxf']);
var_dump($redis->hgetall('user_'.$id));

字符串:

//手機驗證碼
$redis->setex('15689889565', 60, 3455);  //驗證碼60秒過期
//計數(shù)器
$redis->incr($key);  //自增
$redis->incrby($key, $increase_num);  //按量增加

防商品超發(fā)

//計數(shù)器方式
$max_num = 10;  //模擬商品限購數(shù)量
$pro_id = 453645;  //模擬商品id
if($redis->incr($pro_id) > $max_num){
    echo "下單失敗";
    exit();
}
echo "下單成功!";
//入庫操作


//事務方式
$len = $redis->get('num');
$total = 10;  //商品總數(shù)
if($len < $total){
       $redis->watch('list);  //可寫在判斷條件外面 在事務執(zhí)行之前這個(或這些) key 被其他命令所改動,那么事務將被打斷
       $redis->multi();
       $redis->hmset('order',['order_id'=>'xxxxx','user'=>'xxxx','pro'=>'xxxxxx']);
       $redis->set('num', $len+1);
       $result = $redis->exec();   //執(zhí)行事務
        if($result){
              echo "成功";
              exit();
        }else{
              echo "失敗,請繼續(xù)購買!";
              exit();
        }
}else{
        exit('搶光了!');
}

緩存瞬時操作量大的操作:

//點贊,彈幕等
$redis->hset('article:id', 'click', xxxx);   //點贊
$redis->hincrby('article:id', 'click', 1);    //點贊增加

訂單延時支付:

$redis->setex($key, 5, 'xxxxxx');  //設置變量 5秒過期

//過期事件訂閱
$redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
$db_id = 0;
$redis->psubscribe([__keyevent@$db_id__:expired], 'keycallback');
function keycallback($redis, $pattern, $chan, $msg){
    echo "Pattern: $pattern \r\n";
    echo "Channel: $chan \r\n";
    echo "Payload: $msg \r\n";
}
//cli 模式執(zhí)行訂閱事件

相關的代碼git地址:https://github.com/yspwf/redis_application
其次是網(wǎng)絡上大同小異的總結:https://my.oschina.net/PHPDOTAER/blog/1814733

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Redis開創(chuàng)了一種新的數(shù)據(jù)存儲思路,使用Redis,我們不用在面對功能單調(diào)的數(shù)據(jù)庫時,把精力放在如何把大象放進冰...
    tl薰風閱讀 876評論 0 0
  • string(字符串) 常用命令: set,get,decr,incr,mget 等。 使用SETBIT、GETB...
    陳小陌丿閱讀 1,015評論 0 3
  • 包含的重點內(nèi)容:JAVA基礎JVM 知識開源框架知識操作系統(tǒng)多線程TCP 與 HTTP架構設計與分布式算法數(shù)據(jù)庫知...
    消失er閱讀 4,559評論 1 10
  • 不知道怎么了,堅強的面具戴久了,有點累了;不知道怎么了,自己悲傷的事情不愿對別人提及了,有點倦了;不知道怎么了,有...
    樹上的風閱讀 656評論 3 1
  • 五言古體詩/柏 作者:心博 屹屹長青柏,扎根聳崖巔。 識君為高朋,猶松傲骨堅。 爾有青松樣,天生品共長。 渴望作知...
    心博1閱讀 333評論 0 1

友情鏈接更多精彩內(nèi)容