Rumah  >  Artikel  >  pangkalan data  >  Cara melaksanakan cache dan jualan kilat yang diedarkan Redis

Cara melaksanakan cache dan jualan kilat yang diedarkan Redis

王林
王林ke hadapan
2023-06-02 23:43:201104semak imbas

1. Masalah dengan satu titik Redis

1.

2. Isu Concurrency

Kelompok tuan-hamba kami menyedari pemisahan membaca dan menulis.

3. Isu pemulihan kegagalan

Gunakan Redis Sentinel untuk melaksanakan pengesanan kesihatan dan pemulihan automatik.

4. Isu kapasiti storan

Bina gugusan berpecah dan gunakan mekanisme slot untuk mencapai pengembangan dinamik.

2. RDB

Nama penuh RDB ialah fail Sandaran Pangkalan Data Redis (fail sandaran data Redis), juga dipanggil petikan data Redis. Secara ringkasnya, semua data dalam memori direkodkan ke cakera. Apabila contoh Redis gagal dan dimulakan semula, fail syot kilat dibaca dari cakera dan data dipulihkan.

Fail syot kilat dipanggil fail RDB dan disimpan dalam direktori semasa yang sedang berjalan secara lalai.


Redis mempunyai mekanisme dalaman untuk mencetuskan RDB, yang boleh didapati dalam fail redis.conf Formatnya adalah seperti berikut:

Cara melaksanakan cache dan jualan kilat yang diedarkan RedisApabila bgsave. arahan dilaksanakan, garpu akan diluluskan Panggilan sistem mencipta proses anak yang berkongsi data memori dengan proses utama. Selepas melengkapkan garpu, baca data memori dan tuliskannya ke fail RDB.

fork menggunakan teknologi salin atas tulis:

    Apabila proses utama menjalankan operasi baca, memori dikongsi diakses; >
  • Apabila proses utama melakukan operasi tulis, ia akan menyalin salinan data dan melaksanakan operasi tulis;

  • Bantu proses utama untuk mendapatkan proses kanak-kanak dan berkongsi ruang memori

Proses kanak-kanak membaca data memori dan menulis yang baharu; Fail RDB;

  1. Ganti fail RDB lama dengan fail RDB baharu; dihukum bunuh? Apakah maksud simpan 60 1000?

  2. Lalai ialah apabila perkhidmatan dihentikan; 🎜>

  3. Kelemahan RDB?
  4. Selang pelaksanaan RDB adalah panjang, dan terdapat risiko kehilangan data antara dua penulisan RDB; , tulis Memakan masa untuk menjana fail RDB;

Cara melaksanakan cache dan jualan kilat yang diedarkan Redis

Kekerapan rakaman arahan AOF juga boleh dikonfigurasikan melalui fail redis.conf:

3
  • AOF bermaksud Append Only File. Setiap arahan tulis yang diproses oleh Redis akan direkodkan dalam fail AOF, yang boleh dianggap sebagai fail log arahan.

    AOF dimatikan secara lalai Anda perlu mengubah suai fail konfigurasi redis.conf untuk mendayakan AOF:
  • Kekerapan rakaman arahan AOF juga boleh. melalui Fail redis.conf untuk dipadankan:

  • Kerana ia adalah arahan rakaman, fail AOF akan lebih besar daripada fail RDB. Walaupun AOF akan merekodkan berbilang operasi tulis pada kekunci yang sama, hanya operasi tulis terakhir di antaranya yang bermakna. Anda boleh menggunakan perintah bgrewriteaof untuk melengkapkan fungsi penulisan semula fail AOF dengan bilangan arahan minimum.

    set id 1
    set name nezha
    set id 2
    
    bgrewriteaof
    
    mset name nezha id 2

    Redis juga akan menulis semula fail AOF secara automatik apabila ambang dicetuskan. Ambang juga boleh dikonfigurasikan dalam redis.conf:

    # Peratusan di mana fail AOF berkembang berbanding fail terakhir akan mencetuskan penulisan semula auto-aof-rewrite-percentage 100# Apakah minimum saiz fail AOF? Trigger tulis semula auto-aof-rewrite-min-size 64mb

    RDB dan AOF masing-masing mempunyai kelebihan dan kekurangannya sendiri Jika keperluan keselamatan data lebih tinggi, kedua-duanya selalunya digabungkan dalam pembangunan sebenar untuk digunakan.


    RDB AOF
    持久化方式 定时对整个内存做快照 记录每一次执行的命令
    数据完整性 不完整,两次备份之间会丢失 相对完整,取决于刷盘策略
    文件大小 会有压缩,文件体积小 记录命令,文件体积很大
    宕机恢复速度 很快
    数据恢复优先级 低,因为数据完整性不低 高,因为数据完整性更高
    系统资源占用 高,大量CPU和内存消耗 低,主要是磁盘IO资源,但AOF重写时会占用大量CPU和内存资源
    使用场景 可以容忍数分钟的数据丢失,追求更快的启动速度 对数据安全性要求较高常见

    4. Proses jualan kilat pengoptimuman Redis

    1 Langkah jualan kilat:

    1. Semak kupon

    2. Tentukan inventori produk jualan kilat;

    3. Semak pesanan

    4. Sahkan satu pesanan setiap orang;

    5. Kurangkan inventori;

    6. Buat pesanan; langkah jualan kilat:

    Tambahkan kupon jualan kilat dan simpan maklumat kupon ke Redis; inventori produk, satu setiap orang Pesan, tentukan sama ada jualan kilat pengguna berjaya Cara melaksanakan cache dan jualan kilat yang diedarkan Redis

    Jika jualan kilat berjaya, masukkan id kupon, id pengguna dan id produk ke dalam penyekatan; baris gilir;
    1. Dayakan tugas tak segerak, baca secara berterusan maklumat daripada baris gilir penyekat, dan realisasikan fungsi pesanan tak segerak; >
    2. 3. Skrip Lua untuk jualan kilat
    3. 4. Panggil skrip Lua untuk jualan kilat

      public Result seckillVoucher(Long voucherId) {
           Long userId = UserHolder.getUser().getId();
           long orderId = redisIdWorker.nextId("order");
           // 1.执行lua脚本
           Long result = stringRedisTemplate.execute(
                   SECKILL_SCRIPT,
                   Collections.emptyList(),
                   voucherId.toString(), userId.toString(), String.valueOf(orderId)
           );
           int r = result.intValue();
           // 2.判断结果是否为0
           if (r != 0) {
               // 2.1.不为0 ,代表没有购买资格
               return Result.fail(r == 1 ? "库存不足" : "不能重复下单");
           }
           // 3.返回订单id
           return Result.ok(orderId);
       }

      5 kumpulan benang
    4. // 线程池
      private static final ExecutorService SECKILL_ORDER_EXECUTOR = Executors.newSingleThreadExecutor();
      
      /**
      * 在类初始化完成后执行
      */
      @PostConstruct
      private void init() {
          SECKILL_ORDER_EXECUTOR.submit(new VoucherOrderHandler());
      }
      
      // 阻塞队列
      private BlockingQueue<VoucherOrder> orderTasks = new ArrayBlockingQueue<>(1024 * 1024);
      private class OrderHandler implements Runnable{
      
          @Override
          public void run() {
              while (true){
                  try {
                      doSomething();
                  } catch (Exception e) {
                      log.error("处理订单异常", e);
                  }
              }
          }
      }
    5. 5 Laksanakan sesi kongsi berdasarkan Log Masuk Redis

      Log masuk berdasarkan sesi

    Cara melaksanakan cache dan jualan kilat yang diedarkan Redis

    Sesi kongsi log masuk berdasarkan Redis

    rreeee

    Cara melaksanakan cache dan jualan kilat yang diedarkan Redis

Atas ialah kandungan terperinci Cara melaksanakan cache dan jualan kilat yang diedarkan Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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