Rumah  >  Artikel  >  pangkalan data  >  Bagaimana Redis melaksanakan kebolehpercayaan transaksi yang diedarkan

Bagaimana Redis melaksanakan kebolehpercayaan transaksi yang diedarkan

WBOY
WBOYasal
2023-11-07 09:26:061045semak imbas

Bagaimana Redis melaksanakan kebolehpercayaan transaksi yang diedarkan

Redis ialah pangkalan data dalam memori yang pantas dan boleh dipercayai yang digunakan secara meluas dalam sistem teragih. Dalam sistem yang diedarkan, pemprosesan transaksi merupakan cabaran utama. Artikel ini akan memperkenalkan cara Redis mencapai kebolehpercayaan transaksi yang diedarkan dan menyediakan beberapa contoh kod khusus.

Redis melaksanakan transaksi yang diedarkan melalui empat arahan: MULTI, EXEC, DISCARD dan WATCH. Perintah MULTI digunakan untuk memulakan transaksi, arahan EXEC digunakan untuk melaksanakan semua arahan dalam transaksi, arahan DISCARD digunakan untuk membatalkan transaksi semasa, dan arahan WATCH digunakan untuk memantau satu atau lebih kunci jika kunci yang dipantau diubah suai semasa pelaksanaan urus niaga , urus niaga dibatalkan.

Berikut ialah contoh mudah kod yang menunjukkan cara menggunakan Redis untuk pemprosesan transaksi yang diedarkan:

import redis

def transfer_money(from_account, to_account, amount):
    # 连接到Redis服务器
    r = redis.StrictRedis(host='localhost', port=6379, db=0)

    # 开启事务
    pipe = r.pipeline()
    try:
        # 监视from_account和to_account两个键
        pipe.watch(from_account, to_account)
        
        # 检查from_account的余额是否足够
        if int(r.get(from_account)) >= amount:
            # 扣除from_account的金额
            pipe.decrby(from_account, amount)
            # 增加to_account的金额
            pipe.incrby(to_account, amount)
            
            # 执行事务
            pipe.execute()
            print("转账成功!")
        else:
            print("余额不足,转账失败!")
    except redis.WatchError:
        print("发生了并发修改,转账失败!")
    finally:
        # 取消WATCH命令的监视
        pipe.unwatch()

Dalam kod di atas, mula-mula kami menggunakan kaedah redis.StrictRedis() untuk menyambung ke pelayan Redis. Kemudian gunakan kaedah pipeline() untuk mencipta objek saluran paip, yang digunakan untuk membungkus berbilang arahan Redis ke dalam transaksi.

Sebelum transaksi bermula, kami menggunakan arahan WATCH untuk memantau dua kunci from_account dan to_account. Jika salah satu daripada kunci ini diubah suai semasa pelaksanaan transaksi, transaksi akan dibatalkan.

Kemudian, dalam transaksi, kita semak dahulu sama ada baki from_account mencukupi. Jika sudah mencukupi, kami menggunakan perintah DECRBY untuk menolak amaun from_account dan perintah INCRBY untuk meningkatkan jumlah kepada_akaun. Akhir sekali, kami menggunakan arahan EXEC untuk melaksanakan transaksi.

Dalam blok pernyataan cuba, kami menggunakan kaedah execute() untuk melaksanakan transaksi. Jika berjaya dilaksanakan, pemindahan berjaya. Jika baki from_account berubah semasa pelaksanaan transaksi, pengecualian redis.WatchError akan dilemparkan Kami boleh mengendalikan pengecualian ini dalam blok pernyataan kecuali.

Akhir sekali, kami menggunakan perintah UNWATCH untuk menyahwatch from_account dan to_account.

Dengan menggunakan arahan dan teknologi Redis yang disediakan dalam contoh kod di atas, kami boleh mencapai pemprosesan transaksi yang boleh dipercayai dalam persekitaran yang diedarkan. Apabila pengubahsuaian serentak berlaku, Redis boleh memastikan ketekalan dan kebolehpercayaan transaksi dan memastikan ketepatan data.

Ringkasnya, Redis menyediakan mekanisme pemprosesan transaksi teragih yang mudah dan cekap melalui arahan MULTI, EXEC, DISCARD dan WATCH. Pembangun boleh memanfaatkan arahan dan teknologi ini untuk melaksanakan transaksi teragih yang boleh dipercayai dan memastikan ketekalan dan kebolehpercayaan data.

Atas ialah kandungan terperinci Bagaimana Redis melaksanakan kebolehpercayaan transaksi yang diedarkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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