Jadual Kandungan
Apakah ACID of affairs?
, EXEC,
Adakah transaksi Redis memuaskan ACID?
Rumah pangkalan data Redis Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?

Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?

Jan 22, 2022 am 09:26 AM
acid redis transaksi redis

Adakah transaksi Redis menyokong ACID? Artikel berikut akan membawa anda memahami urus niaga Redis, memperkenalkan cara Redis melaksanakan urus niaga dan bercakap tentang sama ada transaksi Redis menyokong ACID. Saya harap ia akan membantu anda.

Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?

Pewawancara Tencent: "Adakah anda memahami urus niaga Redis? Bolehkah mekanisme transaksinya merealisasikan sifat ACID

Cheng Xuyuan : "Menggaruk kepala saya, ini... Saya tahu skrip Lua boleh melaksanakan transaksi..."

Penemuduga Tencent: "Baiklah, balik dan tunggu pemberitahuan


Ma Ge , saya mendapat banyak tawaran, tetapi saya tidak sangka akhirnya saya kalah dalam soalan "Bagaimana Redis melaksanakan transaksi?"

Mari kita analisa langkah demi langkah:

  • Apakah itu ACID transaksi?

  • Bagaimana Redis melaksanakan transaksi?

  • Apakah sifat yang boleh dicapai oleh transaksi Redis?

  • Pelaksanaan skrip Lua.

Apakah ACID of affairs?

Kapten Mojin dalam Hantu Meniup Tanglung "Lembah Serangga Yunnan" mempunyai pepatah yang dipanggil " He Ze" "Hidup, bahagian, mati." Untuk mencari Muchen Bead, mereka bertiga mempunyai pembahagian kerja yang jelas dan bekerjasama untuk maju dan berundur bersama untuk berjaya.

Transaksi ialah unit kawalan serentak, yang terdiri daripada urutan operasi sama ada semua operasi ini dilaksanakan atau tiada satu pun daripadanya dilaksanakan. [Cadangan berkaitan: Tutorial video Redis]

"Ia ialah unit kerja yang tidak boleh dibahagikan."

Apabila transaksi dilaksanakan, ia akan memberikan jaminan atribut khas:

  • Atomicity: berbilang operasi transaksi mesti diselesaikan, atau tiada satu pun daripadanya mesti diselesaikan ( ps: Bagaimana MySQL mencapai atomicity? Komen dalam kawasan mesej adalah dialu-alukan); Perintah sebelum dan selepas pelaksanaan adalah semua keadaan data undang-undang.

  • Kekangan integriti pangkalan data termasuk tetapi tidak terhad kepada:
  • Integriti entiti (seperti kunci utama baris wujud dan unik); Integriti lajur (seperti medan Jenis, saiz dan panjang mesti memenuhi keperluan)

    Kekangan kunci asing
    • Integriti yang ditentukan pengguna (contohnya, jumlah baki kedua-dua; akaun hendaklah kekal tidak berubah sebelum dan selepas pemindahan).
    • Pengasingan: Operasi dalam urus niaga diasingkan daripada urus niaga lain dan urus niaga yang dilaksanakan serentak tidak boleh mengganggu satu sama lain.
    • memfokuskan pada interaksi antara transaksi yang berbeza Pengasingan ketat sepadan dengan boleh bersiri (Boleh Bersiri) dalam tahap pengasingan.
  • Ketahanan: Setelah transaksi dilakukan, semua pengubahsuaian akan disimpan secara kekal dalam pangkalan data dan data tidak akan hilang walaupun sistem ranap dan dimulakan semula.

  • Code Brother, setelah memahami keperluan khusus ACID, bagaimana Redis melaksanakan mekanisme transaksi?

Bagaimana Redis melaksanakan transaksi

MULTI

, EXEC,

BUANG

dan Perintah 🎜>TONTON adalah asas untuk Redis melaksanakan transaksi. Proses pelaksanaan transaksi Redis terdiri daripada tiga langkah: Buka transaksi;

Lakukan transaksi atau buang;

  • Buka transaksi secara eksplisit
  • Pelanggan Yang pelanggan secara eksplisit memulakan urus niaga melalui perintah
  • , dan arahan seterusnya akan beratur dan dicache dan tidak akan dilaksanakan sebenarnya.

Baris gilir perintah

Pelanggan menghantar satu siri arahan untuk dilaksanakan dalam transaksi kepada pelayan.

Perlu diambil perhatian bahawa walaupun arahan dihantar ke pelayan, tika Redis hanya menyimpan sementara siri arahan ini dalam baris gilir arahan dan tidak akan melaksanakannya dengan serta-merta.

MULTI

Laksanakan transaksi atau buangPelanggan menghantar arahan untuk menyerahkan atau membuang transaksi ke pelayan, dan biarkan Redis melaksanakan arahan yang dihantar dalam langkah kedua Arahan khusus atau arahan baris gilir yang jelas, hentikan pelaksanaan.

Redis boleh menjadualkan pelaksanaan perintah baris gilir hanya apabila

EXEC

dipanggil.

Anda juga boleh menggunakan BUANG untuk membuang arahan yang disimpan dalam baris gilir dalam langkah kedua.

Kes transaksi Redis

Laksanakan kod sampel kami melalui tapak web penyahpepijatan dalam talian: try.redis.io

Laksanakan seperti biasa

melalui MULTI dan EXEC Jalankan proses transaksi:

# 开启事务
> MULTI
OK
# 开始定义一些列指令
> SET “公众号:码哥字节” "粉丝 100 万"
QUEUED
> SET "order" "30"
QUEUED
> SET "文章数" 666
QUEUED
> GET "文章数"
QUEUED
# 实际执行事务
> EXEC
1) OK
2) OK
3) OK
4) "666"
Salin selepas log masuk

Kami melihat hasil pulangan selepas setiap arahan baca dan tulis dilaksanakan ialah QUEUED, yang bermaksud terima kasih Operasi telah disimpan sementara dalam baris gilir arahan , dan tiada pelaksanaan sebenar.

Apabila perintah EXEC dilaksanakan, anda boleh melihat data tindak balas setiap arahan.

Tinggalkan transaksi

Buang arahan baris gilir melalui MULTI dan DISCARD:

# 初始化订单数
> SET "order:mobile" 100
OK
# 开启事务
> MULTI
OK
# 订单 - 1
> DECR "order:mobile"
QUEUED
# 丢弃丢列命令
> DISCARD
OK
# 数据没有被修改
> GET "order:mobile"
"100"
Salin selepas log masuk

Ma Ge, transaksi Redis Boleh Sifat ASID dijamin?

Ini soalan yang bagus, mari kita menganalisisnya bersama-sama.

Adakah transaksi Redis memuaskan ACID?

Transaksi Redis boleh melaksanakan berbilang arahan pada satu masa, dan disertakan dengan tiga jaminan penting berikut:

  • Arahan kelompok sedang dijalankan dilaksanakan Perintah EXEC akan dimasukkan ke dalam baris gilir untuk storan sementara sebelum; perintah yang tinggal masih akan dilaksanakan;

  • Semasa pelaksanaan transaksi, arahan yang diserahkan oleh pelanggan lain tidak akan dimasukkan ke dalam urutan pelaksanaan perintah semasa.

  • Atomicity

Kod Abang, jika ralat berlaku semasa pelaksanaan transaksi, prestasi atom dijamin Apa ?

Semasa transaksi, dua jenis ralat arahan mungkin dihadapi:

Arahan yang dihantar sebelum melaksanakan perintah

itu sendiri adalah salah. Seperti berikut:

    Bilangan parameter salah;
  • EXECNama arahan salah dan arahan yang tidak wujud digunakan
    • Memori tidak mencukupi (contoh Redis menggunakan
    • arahan untuk mengkonfigurasi had ingatan).
    • maxmemorySelepas melaksanakan perintah
    • , arahan itu mungkin gagal. Contohnya, jenis data perintah dan operasi tidak sepadan (operasi senarai Senarai dilakukan pada nilai jenis Rentetan
  • apabila melaksanakan perintah
  • transaksi. Kegagalan berlaku dalam contoh Redis, menyebabkan pelaksanaan transaksi gagal. EXEC
  • EXECEXEC melaporkan ralat sebelum pelaksanaan

Apabila arahan dibariskan dalam baris gilir, Redis akan melaporkan ralat dan merekodkan ralat itu.

Pada masa ini, kami masih boleh terus menyerahkan operasi arahan.

Selepas melaksanakan perintah , Redis akan menolak untuk melaksanakan semua operasi arahan yang diserahkan dan mengembalikan hasil kegagalan transaksi

.

EXECDengan cara ini, semua arahan dalam transaksi tidak akan dilaksanakan lagi, memastikan atomicity.

Berikut ialah contoh ralat dalam perintah beratur, menyebabkan kegagalan transaksi:

EXEC melaporkan ralat selepas pelaksanaan

#开启事务
> MULTI
OK
#发送事务中的第一个操作,但是Redis不支持该命令,返回报错信息
127.0.0.1:6379> PUT order 6
(error) ERR unknown command `PUT`, with args beginning with: `order`, `6`,
#发送事务中的第二个操作,这个操作是正确的命令,Redis把该命令入队
> DECR b:stock
QUEUED
#实际执行事务,但是之前命令有错误,所以Redis拒绝执行
> EXEC
(error) EXECABORT Transaction discarded because of previous errors.
Salin selepas log masuk

Operasi transaksi Semasa beratur, jenis data arahan dan operasi tidak sepadan, tetapi tika Redis tidak mengesan ralat. Walau bagaimanapun, selepas melaksanakan arahan EXEC, Redis akan melaporkan ralat apabila ia benar-benar melaksanakan arahan ini.

Ketuk pada papan hitam: Walaupun Redis akan melaporkan ralat untuk arahan yang salah, urus niaga masih akan melaksanakan perintah yang betul Pada masa ini, atomicity transaksi tidak dapat dijamin!

Ma Ge, mengapa Redis tidak menyokong rollback?

Sebenarnya, Redis tidak menyediakan mekanisme rollback. Walaupun Redis menyediakan arahan DISCARD.

Walau bagaimanapun, arahan ini hanya boleh digunakan untuk secara aktif meninggalkan pelaksanaan transaksi dan mengosongkan baris gilir perintah sementara, dan tidak mempunyai kesan gulung balik.

Kegagalan berlaku semasa pelaksanaan EXEC

Jika Redis menghidupkan log AOF, maka hanya sebahagian daripada operasi transaksi akan direkodkan dalam log AOF. Kami perlu menggunakan alat redis-check-aof untuk menyemak fail log AOF Alat ini boleh mengalih keluar operasi transaksi yang belum selesai daripada fail AOF.

Dengan cara ini, selepas kami menggunakan AOF untuk memulihkan kejadian, operasi transaksi tidak akan dilaksanakan lagi, sekali gus memastikan atomicity.

Ringkasan ringkas

:

Ralat akan dilaporkan apabila perintah itu dimasukkan ke dalam baris gilir, dan pelaksanaan transaksi akan ditinggalkan untuk memastikan atomicity; > Apabila arahan dimasukkan ke dalam baris gilir Tiada ralat dilaporkan, tetapi ralat dilaporkan semasa pelaksanaan sebenar, dan atomicity tidak dijamin

Instance gagal apabila arahan EXEC dilaksanakan Jika log AOF dihidupkan, atomicity boleh dijamin.
  • Ketekalan

Konsistensi akan dipengaruhi oleh arahan yang salah dan masa kegagalan contoh, akan berlaku menjadi dua kegagalan contoh Masa kejadian dimensi boleh dianalisis dalam tiga situasi. Sebelum pelaksanaan EXEC, ralat akan dilaporkan selepas menyertai baris gilir

Transaksi akan ditinggalkan, jadi konsistensi boleh dijamin.

Selepas EXEC dilaksanakan, ralat akan dilaporkan semasa pelaksanaan sebenar

Pelaksanaan dengan ralat tidak akan dilaksanakan seperti biasa konsistensi boleh dijamin.

Apabila EXEC dilaksanakan, instance gagal

Selepas instance gagal, ia akan dimulakan semula Ini berkaitan dengan kaedah pemulihan data RDB atau AOF akan dibincangkan mengikut kes.

Jika kami tidak mendayakan RDB atau AOF, maka selepas kejadian gagal dan dimulakan semula, data akan hilang dan pangkalan data akan konsisten.

Jika kita menggunakan petikan RDB, kerana petikan RDB tidak akan dilaksanakan apabila transaksi dilaksanakan.

Oleh itu, hasil operasi arahan transaksi tidak akan disimpan ke petikan RDB Apabila menggunakan petikan RDB untuk pemulihan, data dalam pangkalan data akan konsisten.

Jika kami menggunakan log AOF dan contoh gagal sebelum operasi transaksi direkodkan dalam log AOF, maka data pangkalan data yang dipulihkan menggunakan log AOF akan konsisten.

Jika hanya beberapa operasi direkodkan dalam log AOF, kami boleh menggunakan redis-check-aof untuk mengosongkan operasi yang telah selesai dalam transaksi, dan pangkalan data akan konsisten selepas pemulihan.

Pengasingan

Pelaksanaan transaksi boleh dibahagikan kepada perintah beratur (sebelum arahan EXEC dilaksanakan) dan perintah pelaksanaan sebenar (selepas arahan EXEC dilaksanakan) Dua peringkat.

Jadi semasa pelaksanaan serentak, kami menganalisis kedua-dua peringkat ini dalam dua situasi:

  • Operasi serentak dilaksanakan sebelum perintah EXEC dan pengasingan perlu diluluskan WATCH Mekanisme dijamin;

  • Operasi serentak selepas perintah EXEC, pengasingan boleh dijamin.

Saudara Kod, apakah mekanisme WATCH?

Mari fokus pada situasi pertama: apabila perintah EXEC sesuatu transaksi belum dilaksanakan, operasi perintah transaksi disimpan sementara dalam baris gilir perintah.

Pada masa ini, jika terdapat operasi serentak lain dan kunci yang sama diubah suai, anda perlu menyemak sama ada transaksi menggunakan mekanisme WATCH.

Fungsi mekanisme WATCH adalah untuk memantau perubahan nilai satu atau lebih kunci sebelum transaksi dilaksanakan Apabila transaksi memanggil arahan EXEC untuk melaksanakan, mekanisme WATCH akan menyemak dahulu sama ada kunci yang dipantau mempunyai. telah diubah suai oleh pelanggan lain.

Jika diubah suai, pelaksanaan transaksi akan ditinggalkan untuk mengelakkan pengasingan transaksi daripada dimusnahkan.

Pada masa yang sama, pelanggan boleh melaksanakan transaksi semula Pada masa ini, jika tiada operasi serentak untuk mengubah suai data transaksi, transaksi boleh dilaksanakan secara normal, dan pengasingan juga dijamin. .

Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?

Tiada WATCH

Jika tiada mekanisme WATCH, operasi serentak membaca dan menulis data sebelum arahan EXEC dilaksanakan.

Apabila EXEC dilaksanakan, data yang akan dikendalikan dalam transaksi telah berubah dan Redis tidak mengasingkan transaksi.

Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?

Operasi serentak diterima dan dilaksanakan selepas EXEC

Bagi kes kedua, kerana Redis menggunakan satu utas untuk melaksanakan arahan , dan , selepas arahan EXEC dilaksanakan, Redis akan memastikan semua arahan dalam baris gilir arahan dilaksanakan terlebih dahulu sebelum melaksanakan arahan seterusnya.

Jadi, dalam kes ini, operasi serentak tidak akan memecahkan pengasingan transaksi.

Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?

Kegigihan

Jika Redis tidak menggunakan RDB atau AOF, maka atribut kegigihan transaksi mesti Tiada jaminan.

Jika Redis menggunakan mod RDB, maka selepas transaksi dilaksanakan tetapi sebelum petikan RDB seterusnya dilaksanakan, jika ranap kejadian berlaku dan data hilang, dalam kes ini, Data pengubahsuaian transaksi juga tidak dijamin untuk tahan lama.

Jika Redis menggunakan mod AOF, akan berlaku kehilangan data kerana tiga pilihan konfigurasi mod AOF: tidak, setiap saat dan sentiasa.

Oleh itu, sifat ketahanan transaksi masih tidak terjamin.

Tidak kira apa mod kegigihan yang diguna pakai Redis, sifat ketahanan transaksi tidak dijamin.

Ringkasan

  • Redis mempunyai tahap atomiti tertentu, tetapi tidak menyokong pemulangan semula.
  • Redis tidak mempunyai konsep konsistensi dalam ASID. (Atau mungkin Redis mengabaikan perkara ini semasa mereka bentuk)
  • Redis diasingkan.
  • Redis tidak menjamin ketahanan.

Mekanisme transaksi Redis boleh menjamin konsistensi dan pengasingan, tetapi ia tidak dapat menjamin ketahanan.

Walau bagaimanapun, kerana Redis sendiri adalah pangkalan data dalam memori, kegigihan bukanlah atribut yang diperlukan Kami lebih mengambil berat tentang tiga sifat atomicity, konsistensi dan pengasingan.

Situasi atomicity lebih rumit Apabila sintaks arahan yang digunakan dalam transaksi tidak betul, atomicity tidak dijamin Dalam kes lain, transaksi boleh dilaksanakan secara atom.

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Pengenalan kepada Pengaturcaraan! !

Atas ialah kandungan terperinci Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara Membina Mod Kluster Redis Cara Membina Mod Kluster Redis Apr 10, 2025 pm 10:15 PM

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

Cara melaksanakan redis yang mendasari Cara melaksanakan redis yang mendasari Apr 10, 2025 pm 07:21 PM

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.

Apa yang perlu dilakukan sekiranya pelayan redis tidak dapat dijumpai Apa yang perlu dilakukan sekiranya pelayan redis tidak dapat dijumpai Apr 10, 2025 pm 06:54 PM

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.

Cara Melihat Semua Kekunci di Redis Cara Melihat Semua Kekunci di Redis Apr 10, 2025 pm 07:15 PM

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.

Cara melihat nombor versi Redis Cara melihat nombor versi Redis Apr 10, 2025 pm 05:57 PM

Untuk melihat nombor versi REDIS, anda boleh menggunakan tiga kaedah berikut: (1) Masukkan arahan INFO, (2) Mulakan pelayan dengan pilihan --version, dan (3) Lihat fail konfigurasi.

Cara membaca kod sumber redis Cara membaca kod sumber redis Apr 10, 2025 pm 08:27 PM

Cara terbaik untuk memahami kod sumber REDIS adalah dengan langkah demi langkah: Dapatkan akrab dengan asas -asas Redis. Pilih modul atau fungsi tertentu sebagai titik permulaan. Mulakan dengan titik masuk modul atau fungsi dan lihat baris kod mengikut baris. Lihat kod melalui rantaian panggilan fungsi. Berhati -hati dengan struktur data asas yang digunakan oleh REDIS. Kenal pasti algoritma yang digunakan oleh Redis.

Cara menggunakan perintah redis Cara menggunakan perintah redis Apr 10, 2025 pm 08:45 PM

Menggunakan Arahan Redis memerlukan langkah -langkah berikut: Buka klien Redis. Masukkan arahan (nilai kunci kata kerja). Menyediakan parameter yang diperlukan (berbeza dari arahan ke arahan). Tekan Enter untuk melaksanakan arahan. Redis mengembalikan tindak balas yang menunjukkan hasil operasi (biasanya OK atau -r).

Cara menggunakan redis zset Cara menggunakan redis zset Apr 10, 2025 pm 07:27 PM

Redis memerintahkan set (ZSET) digunakan untuk menyimpan elemen yang diperintahkan dan disusun mengikut skor yang berkaitan. Langkah -langkah untuk menggunakan ZSET termasuk: 1. Buat zset; 2. Tambah ahli; 3. Dapatkan skor ahli; 4. Dapatkan kedudukan; 5. Dapatkan ahli dalam julat ranking; 6. Padam ahli; 7. Dapatkan bilangan elemen; 8. Dapatkan bilangan ahli dalam julat skor.

See all articles