真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

redis的incr和hash應(yīng)用是怎樣的

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)redis的incr和hash應(yīng)用是怎樣的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

為舒蘭等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及舒蘭網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、舒蘭網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

incr

比如北京車(chē)牌采取先搶到后審批資質(zhì)的流程。車(chē)牌池子中有N多號(hào)碼,頁(yè)面呈現(xiàn)以一頁(yè)十條的方式展示,每個(gè)號(hào)碼后有一個(gè)搶的按鈕,且一個(gè)人只能搶一個(gè)車(chē)牌,同樣一個(gè)車(chē)牌只能被一個(gè)人搶到。業(yè)務(wù)模型參考(http://num.10010.com/NumApp/chseNumList/init?num=186)

 if ($this->redis_db->incr("bj_".$car_no) != 1) {
      讓別人先下手了,點(diǎn)別的去~
  }else{
       //搶到競(jìng)態(tài)條件,如果不復(fù)核資質(zhì)要求退出,并清除incr
       if(搶到了但是沒(méi)資質(zhì)等){
         釋放對(duì)此id的竟態(tài)權(quán),別占茅坑
         $this->yredis_db->del("bj_".$id);
       }else{
         其他業(yè)務(wù)A
         抱得號(hào)碼歸...
         其他業(yè)務(wù)B
     }
}

另外,incr對(duì)string類(lèi)型,hash類(lèi)型,sortedSet類(lèi)型都可以進(jìn)行操作

blpop

blpop相對(duì)于lpop有一個(gè)好處,可以對(duì)多個(gè)隊(duì)列進(jìn)行優(yōu)先級(jí)操作。
blpop會(huì)按照key的排列順序依次彈出,返回值為key的listname及具體元素值,而且可以設(shè)置block時(shí)間,原則是先阻塞先服務(wù).

        $date = date('Ymd', time());
        //左進(jìn)左出 ,優(yōu)先分配一般的車(chē)牌號(hào)碼,然后在分配非常好的連號(hào)號(hào)碼,設(shè)置一個(gè)阻塞時(shí)間
        return $this->redis->blpop(self::$_config['dispatch_normal_list'] . $date, self::$_config['dispatch_better_list'] . $date, self::$_config['redis_block_l_pop_time_out']);

hsetnx

設(shè)置hash中一個(gè)field為指定value,前提是field不存在。如果存在,返回0。
這樣能保證在一個(gè)人只能搶一個(gè)車(chē)牌,但是搶到車(chē)牌執(zhí)行付款或者其他業(yè)務(wù)操作過(guò)程中,其他人無(wú)法對(duì)此操作,(即不能將此車(chē)牌綁定到其他人身上)。根據(jù)具體業(yè)務(wù)情況,可設(shè)置基于car_no的hash field和基于 people 的hash field。

hash_base_people {"zhangsan":"京A888","lisi":"京A999"}
hash_base_car_no {"京A888":"zhangsan","京A999":"lisi"}

基于這兩個(gè)hash 可以做更多關(guān)于業(yè)務(wù)的操作,比如通過(guò)hget等查看具體的綁定關(guān)系。

hdel

有了通過(guò)hsetnx的綁定模型,當(dāng)某個(gè)人對(duì)某個(gè)車(chē)牌交付了訂金等一系列之后,就代表可以永遠(yuǎn)的將其消除,這樣會(huì)用到hdel。另外如果在指定時(shí)間內(nèi)沒(méi)有做比如交付訂金之類(lèi)的操作,這個(gè)車(chē)牌號(hào)碼會(huì)回爐到原始列表中。

 //刪除以people_id為key的hash
 $base_people_id_del = $this->redis->hdel(self::$_config['hash_base_people'], $people_id);

 //刪除以car_no為key的hash
 $base_car_no_del = $this->redis->hdel(self::$_config['hash_base_car_no'], $clue_id);

lpush

如果有入口將北京可以搶拍的車(chē)牌放入到一個(gè)list里

$lpush_res = $redisObj->lpush($list_name, $car_no);

其中l(wèi)ist_name的值可以根據(jù)car_no的具體值來(lái)確定,比如有6和8的我就放入到better_car_no列表里,其他的放入到normal_car_no列表里,最后可以用blpop來(lái)指定一個(gè)先后優(yōu)先級(jí)。

rpoplpush

安全的隊(duì)列彈出模式,比如N多人對(duì)一個(gè)入口按鈕進(jìn)行操作,如果list結(jié)構(gòu)中有足夠的數(shù)據(jù),每個(gè)人有且只有一條數(shù)據(jù)會(huì)被領(lǐng)取,領(lǐng)取之后再做其他的業(yè)務(wù)操作。
但是問(wèn)題是,如果用lpop之后,原隊(duì)列中已被彈出,如果中途客戶端在取得該pop的元素后,且完成處理此元素前,客戶端發(fā)生崩潰。這時(shí)候此條消息就憑空消失了。如果沒(méi)有其他補(bǔ)助措施(比如通過(guò)綁定或者記錄此彈出的元素)需要嚴(yán)謹(jǐn)要求,可以用rpoplpush可以解決此問(wèn)題。在客戶端真正處理完此pop的元素之后,通過(guò)lrem將此消息安全刪除。

上述就是小編為大家分享的redis的incr和hash應(yīng)用是怎樣的了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


文章名稱:redis的incr和hash應(yīng)用是怎樣的
網(wǎng)頁(yè)路徑:http://weahome.cn/article/igjsos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部