Rumah >pangkalan data >Redis >Menghuraikan aplikasi incr dan cincang redis

Menghuraikan aplikasi incr dan cincang redis

藏色散人
藏色散人ke hadapan
2021-09-18 16:46:202868semak imbas

incr

Sebagai contoh, plat lesen Beijing mengamalkan proses merebut terlebih dahulu dan kemudian meluluskan kelayakan. Terdapat N nombor dalam kumpulan plat lesen, dan halaman dipaparkan dalam sepuluh item setiap halaman Terdapat butang ambil selepas setiap nombor, dan seorang hanya boleh mengambil satu plat lesen, dan plat lesen yang sama hanya boleh diambil oleh. satu orang. Rujukan model perniagaan (http://num.10010.com/NumApp/chseNumList/init?num=186)

 if ($this->redis_db->incr("bj_".$car_no) != 1) {
      让别人先下手了,点别的去~
  }else{
       //抢到竞态条件,如果不复核资质要求退出,并清除incr
       if(抢到了但是没资质等){
         释放对此id的竟态权,别占茅坑
         $this->yredis_db->del("bj_".$id);
       }else{
         其他业务A
         抱得号码归...
         其他业务B
     }
}

Juga , incr boleh beroperasi pada jenis string, jenis hash dan jenis sortedSet

blpop

blpop mempunyai kelebihan berbanding lpop, ia boleh beroperasi pada berbilang. Baris gilir melaksanakan operasi keutamaan.
blpop akan muncul dalam urutan mengikut susunan key Nilai pulangan ialah nama senarai dan nilai elemen khusus key, dan masa block boleh ditetapkan dahulukan dan layan dahulu. Jika ada, mengembalikan 0.

Ini memastikan seorang hanya boleh merebut satu plat, tetapi semasa proses merebut plat untuk melakukan pembayaran atau operasi perniagaan lain, orang lain tidak boleh melakukan ini (iaitu, plat ini tidak boleh terikat dengan orang lain. ). Bergantung pada situasi perniagaan tertentu, medan cincang berdasarkan car_no dan medan cincang berdasarkan orang boleh ditetapkan.
        $date = date('Ymd', time());
        //左进左出 ,优先分配一般的车牌号码,然后在分配非常好的连号号码,设置一个阻塞时间
        return $this->redis->blpop(self::$_config['dispatch_normal_list'] . $date, self::$_config['dispatch_better_list'] . $date, self::$_config['redis_block_l_pop_time_out']);

Berdasarkan kedua-dua cincang ini, anda boleh melakukan lebih banyak operasi berkaitan perniagaan, seperti menyemak perhubungan mengikat khusus melalui hget, dsb.

hashhdelfieldvalueDengan model pengikat melalui hsetnx, apabila seseorang membayar deposit untuk plat lesen tertentu, dsb., ini bermakna ia boleh dihapuskan selama-lamanya. Selain itu, sekiranya tiada operasi seperti membayar deposit dilakukan dalam masa yang ditetapkan, nombor plat akan dikembalikan ke senarai asal. field

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

Jika ada pintu masuk, masukkan plat lesen yang boleh disnap di Beijing ke dalam senarai

Nilai list_name boleh berdasarkan car_no tertentu Untuk menentukan nilai, contohnya, jika terdapat 6 dan 8, saya akan meletakkannya dalam senarai

, dan yang lain dalam senarai

Akhirnya, anda boleh menggunakan
 //删除以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);
untuk tentukan keutamaan.

rpoplpush

Mod pop timbul baris gilir selamat, contohnya, jika N orang mengendalikan butang masuk, jika terdapat data yang mencukupi dalam struktur senarai, setiap orang akan mempunyai dan hanya satu bahagian data akan diterima Lakukan operasi perniagaan lain selepas menerimanya.
$lpush_res = $redisObj->lpush($list_name, $car_no);
Tetapi masalahnya ialah selepas menggunakan

, baris gilir asal telah dikeluarkan Jika pelanggan mendapat elemen better_car_no di tengah dan sebelum selesai memproses elemen ini, pelanggan akan ranap. Pada masa ini, mesej itu hilang begitu sahaja. Jika tiada langkah tambahan lain (seperti mengikat atau merakam elemen pop timbul) yang memerlukan keperluan yang ketat, anda boleh menggunakan normal_car_noh untuk menyelesaikan masalah ini. Selepas pelanggan benar-benar memproses elemen blpop, mesej dipadamkan dengan selamat melalui

.

Pembelajaran yang disyorkan: "
tutorial video redislpop" poprpoplpus

Atas ialah kandungan terperinci Menghuraikan aplikasi incr dan cincang redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:segmentfault.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam