


Cara menggunakan PHP+Redis untuk menyelesaikan masalah penjualan berlebihan produk di bawah keselarasan tinggi
Untuk sesetengah tapak web e-dagang dengan bilangan pengguna tertentu, jika mereka hanya menggunakan pangkalan data hubungan (seperti MySQL, Oracle) untuk pembelian tergesa-gesa, tekanan pada pangkalan data akan menjadi sangat hebat, dan jika mekanisme kunci pangkalan data adalah tidak digunakan dengan betul, , ia juga akan membawa kepada masalah produk dan kupon terlebih jual. Syarikat saya juga menghadapi masalah yang sama Masalahnya berlaku apabila kupon terlalu dibeli Selepas masalah berlaku, kami mula memikirkan cara untuk menyelesaikan masalah ini. Oleh kerana saya banyak menggunakan redis . Gunakan ciri prestasi tinggi dan transaksi redis untuk menyelesaikan masalah kupon dalam talian yang diambil oleh stok berlebihan Di bawah saya memberikan versi pertama kod pseudo yang saya selesaikan sementara masalah ini, dengan beberapa butiran dialih keluar:
/** * 抢优惠券(秒杀) * @param int $couponId 商品ID * @param int $uid 用户ID * @return bool */ function secKill($couponId, $uid) { //1.初始化Redis连接 $redis = new Redis(); if (!$redis->connect('127.0.0.1', 6379)) { trigger_error('Redis连接出错!!!', E_USER_ERROR); } else { echo '连接正常<br>'; } //秒杀商品的库存key $key = 'secKill:'.$couponId.':stock'; $redis->watch($key); //获取库存 $stock = $redis->get($key); //秒杀未开始,表示库存为null if (!$stock && !is_numeric($stock)) { echo '秒杀未开始'; return false; } //判断库存,如果库存大于0,则减库存,将该成功秒杀用户加入哈希表,如果小于等于0,秒杀结束 if ($stock <= 0) { echo '秒杀已结束'; return false; } //用户已经成功秒杀过一次了,不允许再次参与秒杀 if ($redis->sIsMember('secKill:'.$couponId.':uid', $uid)) { echo '秒杀失败'; return false; } //代码走到这里,说明该用户是第一次参与秒杀,将库存减一,然后把这个人放到已抢到的集合表 $redisMulti = $redis->multi(); $redisMulti->decr($key); $redisMulti->sAdd('secKill:'.$couponId.':uid', $uid); $result = $redisMulti->exec(); if (empty($result)) {//事务被取消 echo '秒杀失败'; return false; } //抢券成功,将优惠券ID和UID放入到队列中,由一个单独的进程队列来消费队列里的数据,向用户推送抢到的优惠券 $redis->lPush('couponOrder', $couponId.'+'.$uid); return true; } $couponId = 11211; $uid = mt_rand(1, 100); secKill($couponId, $uid);
Mula-mula, saya mensimulasikan menetapkan inventori kupon dengan ID kupon 11211 hingga 10.
Kemudian, kami menggunakan alat ab untuk mensimulasikan 1000 permintaan dan 50 konkurensi untuk menguji
ab -n 1000 -c 50 www.test.com/
Kemudian kami menggunakan Redis Desktop Manager untuk melihat beberapa Redis Result
Sudah ada 10 maklumat pengguna dalam baris gilir kuponOrder
Dan baki bilangan kupon juga ialah 0, bukan lagi nombor negatif
Pada masa yang sama, maklumat UID 10 pengguna juga disimpan dalam koleksi kupon pengguna.
Rentetan kod di atas menyelesaikan dua masalah:
Ia menyelesaikan masalah sejumlah besar pertanyaan segera kepada pangkalan data menyebabkan banyak kerosakan pada pangkalan data. Masalah tekanan tinggi, trafik dipintas dalam lapisan cache redis
Menyelesaikan masalah kupon yang diambil oleh stok berlebihan
Walau bagaimanapun, Kod ini juga mempunyai masalah tertentu:
Kolam sambungan redis tidak digunakan dan penciptaan redis baharu yang kerap mempunyai kesan prestasi tertentu
Ia masih merupakan transaksi Masalah inventori yang terhasil ialah jika terdapat 10 produk dan 1,000 permintaan setiap satu mempunyai 200 permintaan serentak, 1,000 permintaan akan diselesaikan dengan 5 permintaan serentak, tetapi hanya 5 pengguna yang akan berjaya merebutnya tidak ada permintaan berikutnya, akan ada Akibatnya, masih terdapat 5 salinan dalam stok - Petua: Dalam baris gilir penggunaan, jika kupon gagal dikeluarkan, pastikan anda merekodkan ia serta-merta dan maklumkan pengurus operasi melalui mesej teks untuk melihat sama ada ia boleh dikeluarkan semula atau Ditolak kepada pengguna melalui penyasaran manual di latar belakang.
Atas ialah kandungan terperinci Cara menggunakan PHP+Redis untuk menyelesaikan masalah penjualan berlebihan produk di bawah keselarasan tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Mod Redis cluster menyebarkan contoh Redis ke pelbagai pelayan melalui sharding, meningkatkan skalabilitas dan ketersediaan. Langkah -langkah pembinaan adalah seperti berikut: Buat contoh Redis ganjil dengan pelabuhan yang berbeza; Buat 3 contoh sentinel, memantau contoh redis dan failover; Konfigurasi fail konfigurasi sentinel, tambahkan pemantauan maklumat contoh dan tetapan failover; Konfigurasi fail konfigurasi contoh Redis, aktifkan mod kluster dan tentukan laluan fail maklumat kluster; Buat fail nodes.conf, yang mengandungi maklumat setiap contoh Redis; Mulakan kluster, laksanakan perintah Buat untuk membuat kluster dan tentukan bilangan replika; Log masuk ke kluster untuk melaksanakan perintah maklumat kluster untuk mengesahkan status kluster; buat

PHP dan Python masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1.Php sesuai untuk pembangunan web, dengan sintaks mudah dan kecekapan pelaksanaan yang tinggi. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan yang kaya.

Redis menggunakan jadual hash untuk menyimpan data dan menyokong struktur data seperti rentetan, senarai, jadual hash, koleksi dan koleksi yang diperintahkan. Redis berterusan data melalui snapshots (RDB) dan menambah mekanisme tulis sahaja (AOF). Redis menggunakan replikasi master-hamba untuk meningkatkan ketersediaan data. Redis menggunakan gelung acara tunggal untuk mengendalikan sambungan dan arahan untuk memastikan atom dan konsistensi data. Redis menetapkan masa tamat tempoh untuk kunci dan menggunakan mekanisme memadam malas untuk memadamkan kunci tamat tempoh.

Masa depan PHP akan dicapai dengan menyesuaikan diri dengan trend teknologi baru dan memperkenalkan ciri -ciri inovatif: 1) menyesuaikan diri dengan pengkomputeran awan, kontena dan seni bina microservice, menyokong Docker dan Kubernetes; 2) memperkenalkan pengkompil JIT dan jenis penghitungan untuk meningkatkan prestasi dan kecekapan pemprosesan data; 3) Berterusan mengoptimumkan prestasi dan mempromosikan amalan terbaik.

PHP tidak mati, tetapi sentiasa menyesuaikan diri dan berkembang. 1) PHP telah menjalani beberapa lelaran versi sejak tahun 1994 untuk menyesuaikan diri dengan trend teknologi baru. 2) Ia kini digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan bidang lain. 3) Php8 memperkenalkan pengkompil JIT dan fungsi lain untuk meningkatkan prestasi dan pemodenan. 4) Gunakan OPCACHE dan ikut piawaian PSR-12 untuk mengoptimumkan prestasi dan kualiti kod.

Langkah-langkah untuk menyelesaikan masalah yang tidak dapat dijumpai oleh Redis-Server: periksa pemasangan untuk memastikan Redis dipasang dengan betul; Tetapkan pembolehubah persekitaran redis_host dan redis_port; Mulakan Redis Server Redis-server; Semak sama ada pelayan sedang menjalankan ping redis-cli.

Untuk melihat semua kunci di Redis, terdapat tiga cara: Gunakan perintah kunci untuk mengembalikan semua kunci yang sepadan dengan corak yang ditentukan; Gunakan perintah imbasan untuk melangkah ke atas kunci dan kembalikan satu set kunci; Gunakan arahan maklumat untuk mendapatkan jumlah kunci.

Alat dan kerangka yang perlu dikuasai dalam pembangunan H5 termasuk Vue.js, React dan Webpack. 1.vue.js sesuai untuk membina antara muka pengguna dan menyokong pembangunan komponen. 2. Leact mengoptimumkan rendering halaman melalui DOM maya, sesuai untuk aplikasi yang kompleks. 3.WebPack digunakan untuk pembungkusan modul dan mengoptimumkan beban sumber.
