Rumah >pangkalan data >Redis >Mari kita bincangkan tentang isu merealisasikan jualan kilat dengan Redis

Mari kita bincangkan tentang isu merealisasikan jualan kilat dengan Redis

WBOY
WBOYke hadapan
2022-05-27 11:40:343290semak imbas

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();

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>
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
Gunakan bahasa skrip terbenam Lua
    @Autowired
    private RedisTemplate redisTemplate;

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>

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!

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