Rumah > pangkalan data > Redis > teks badan

Mari kita bincangkan tentang isu merealisasikan jualan kilat dengan Redis

WBOY
Lepaskan: 2022-05-27 21:00:06
ke hadapan
3223 orang telah melayarinya

Artikel ini membawa anda pengetahuan yang berkaitan tentang Redis, yang terutamanya memperkenalkan kandungan yang berkaitan tentang merealisasikan jualan kilat, termasuk logik jualan kilat, tamat masa pautan sedia ada, penjualan berlebihan dan warisan inventori Mari kita lihat masalah di bawah Saya harap ia akan membantu semua orang.

Mari kita bincangkan tentang isu merealisasikan jualan kilat dengan Redis

Pembelajaran yang disyorkan: Tutorial video Redis

1 Jualan spike : Selesaikan operasi urus niaga kaunter dan rekod kakitangan

1.uid dan proid penghakiman tidak kosong

2 Connect redis
  1. 3. Kunci penyambung
  2. Kunci inventori
  3. Kunci pengguna jualan kilat yang berjaya
    • 4 jualan kilat belum bermula lagi
    5 Tentukan sama ada pengguna telah mengulangi operasi jualan kilat
  4. 6. Tentukan kuantiti produk Jika kuantiti inventori kurang daripada 1 jualan tamat
  5. 7. Proses jualan kilat
  6. Inventori-1
  7. Tambahkan pengguna dengan jualan kilat yang berjaya ke senarai
    2.2. Terlebih jualan
berlaku dalam situasi serentak, iaitu apabila keluaran kehabisan stok (jualan kilat) Selepas tamat), masih ada barang yang dijual, mengakibatkan dalam kuantiti inventori negatif.

2.3. Warisan inventori

Selepas menggunakan kunci optimistik untuk menyelesaikan masalah 2, masalah 3 muncul

Jika kuantiti inventori secara relatifnya lebih serentak, perlu dibayar kepada penggunaan Kunci optimis, selepas pengguna pertama berjaya dalam jualan kilat, nombor versi kunci inventori akan diubah suai Pengguna lain yang mengambilnya tidak akan dapat meneruskan pembelian kerana nombor versi yang berbeza, dan akan ada inventori Isu warisan


3. Selesaikan Mari kita bincangkan tentang isu merealisasikan jualan kilat dengan Redis

3.1 Tamat masa sambungan

Gunakan kumpulan sambungan, kelas alat adalah seperti berikut:

versi springBoot. (pengenalan pom.xml, konfigurasi application.yml, dan kemudian menyuntik objek)

3.2 Masalah terlebih jual

Gunakan transaksi Redis, jam tangan kunci yang optimis
public class JedisPoolUtil {
	private static volatile JedisPool jedisPool = null;
	private JedisPoolUtil() {
	}
	public static JedisPool getJedisPoolInstance() {
		if (null == jedisPool) {
			synchronized (JedisPoolUtil.class) {
				if (null == jedisPool) {
					JedisPoolConfig poolConfig = new JedisPoolConfig();
					poolConfig.setMaxTotal(200);
					poolConfig.setMaxIdle(32);
					poolConfig.setMaxWaitMillis(100 * 1000);
					poolConfig.setBlockWhenExhausted(true);
					poolConfig.setTestOnBorrow(true);
					jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379, 60000);
				}
			}
		}
		return jedisPool;
	}}//使用JedisPool jedisPoolInstance = JedisPoolUtil.getJedisPoolInstance();Jedis jedis = jedisPoolInstance.getResource();
Salin selepas log masuk

3.3. Isu Inventori yang disebabkan oleh penguncian optimistik
<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-data-redis</artifactid></dependency><dependency>
    <groupid>redis.clients</groupid>
    <artifactid>jedis</artifactid>
    <version>3.2.0</version></dependency>
Salin selepas log masuk
spring:
  redis:
    host: 127.0.0.1    port: 6379
    database: 0
    timeout: 1800000
    lettuce:
      pool:
        max-active: 20
        max-wait: -1
        max-idle: 5
        min-idle: 0
Salin selepas log masuk
Gunakan bahasa skrip terbenam Lua
    @Autowired
    private RedisTemplate redisTemplate;
Salin selepas log masuk

untuk menulis operasi Redis yang kompleks atau berbilang langkah sebagai skrip dan serahkannya kepada Redis untuk dijalankan sekali gus, mengurangkan bilangan sambungan berulang ke reids. Tingkatkan prestasi.

Skrip LUA adalah serupa dengan transaksi redis Ia mempunyai tahap atomicity tertentu dan tidak akan dibariskan oleh perintah lain Ia boleh melengkapkan operasi transaksi redis
//监视库存
jedis.watch(kcKey);//中间代码忽略

//7 秒杀过程
//使用事务
Transaction multi = jedis.multi();//组队操作
multi.decr(kcKey);multi.sadd(userKey,uid);//执行
List<object> results = multi.exec();if(results == null || results.size()==0) {
    System.out.println("秒杀失败了....");
    jedis.close();
    return false;}</object>
Salin selepas log masuk

Fungsi skrip LUA hanya tersedia dalam Redis 2.6 atau lebih tinggi Anda boleh menggunakan

untuk menggunakan skrip lua untuk menghapuskan pengguna dan menyelesaikan masalah penjualan berlebihan.

    Selepas versi 2.6 redis, masalah pertikaian diselesaikan melalui
  1. skrip lua Malah,
  2. redis menggunakan ciri satu utasnya untuk menyelesaikan masalah serentak berbilang tugas menggunakan baris gilir tugasan
  3. . .
  4. Kod lengkap adalah seperti berikut:
  5. Pembelajaran yang disyorkan: Tutorial video Redis

Atas ialah kandungan terperinci Mari kita bincangkan tentang isu merealisasikan jualan kilat dengan Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!