Redis ialah sistem pangkalan data nilai kunci berprestasi tinggi sumber terbuka Ia digunakan secara meluas dalam sistem penarafan masa nyata kerana kelajuan membaca dan menulis yang pantas, sokongan untuk pelbagai jenis data, struktur data yang kaya dan ciri-ciri lain. Sistem kedudukan masa nyata merujuk kepada sistem yang mengisih data mengikut syarat tertentu, seperti kedudukan mata dalam permainan, kedudukan jualan dalam e-dagang, dsb.
Artikel ini akan memperkenalkan teknologi utama yang digunakan oleh Redis dalam membina sistem ranking masa nyata, serta contoh kod khusus. Kandungannya merangkumi bahagian berikut:
Redish, termasuk rentetan sokongan, jenis senarai data set dan set yang dipesan.
Set tertib ialah jenis data utama untuk melaksanakan senarai kedudukan Ia boleh menyusun data dengan mudah mengikut nilai medan tertentu. Setiap elemen dalam set yang disusun mempunyai skor dan disusun mengikut skor. Apabila markah adalah sama, susun mengikut leksikografi. Setiap elemen dalam set tersusun mempunyai nilai ahli unik yang mengenal pasti elemen secara unik.
Arahan berkaitan set tertib khusus termasuk: ZADD, ZREM, ZRANGE, dsb.
Sistem pemeringkatan masa nyata memerlukan pengisihan yang cepat dan tepat, jadi algoritma pengisihan yang sesuai perlu dipilih. Redis menggunakan algoritma senarai langkau untuk melaksanakan koleksi tersusun.
Senarai langkau ialah struktur data rawak, serupa dengan senarai terpaut, tetapi setiap nod mempunyai berbilang penunjuk, menjadikan carian lebih cekap. Nod dalam jadual lompat disusun dalam susunan yang semakin meningkat, dan setiap nod mempunyai "nombor tahap" rawak, dan setiap tahap mempunyai penunjuk ke nod di peringkat seterusnya. "Bilangan lapisan" ini dijana secara rawak dan boleh dilaraskan mengikut keperluan.
Kerumitan masa jadual lompat ialah O(log n) dan kerumitan ruang ialah O(n), yang boleh memenuhi keperluan sistem kedudukan masa nyata.
Menggunakan Redis untuk melaksanakan papan pendahulu memerlukan langkah berikut:
1) Cipta set tersusun
Gunakan perintah ZADD untuk mencipta set tertib dan tambah elemen (ahli dan Pecahan). Setiap ahli mempunyai pengecam unik, contohnya, ID pengguna boleh digunakan dalam permainan, atau nombor item boleh digunakan dalam e-dagang.
2) Dapatkan data kedudukan
Peroleh elemen dalam set tersusun mengikut ranking Gunakan arahan ZRANGE untuk melakukan pertanyaan selang pada set tersusun. Sebagai contoh, untuk mendapatkan 10 maklumat pengguna teratas, anda boleh menggunakan arahan ZRANGE 0 9 WITHSCORES arahan.
3) Kemas kini skor
Apabila skor pengguna berubah, skor yang sepadan dalam set yang dipesan perlu dikemas kini. Kemas kini boleh dibuat menggunakan arahan ZADD.
4) Dapatkan kedudukan
Dapatkan kedudukan di papan pendahulu berdasarkan ID pengguna. Anda boleh menggunakan arahan ZRANK untuk mendapatkan kedudukan yang sepadan dengan ID pengguna.
Berikut ialah contoh kod untuk pelaksanaan senarai kedudukan berasaskan Redis, yang menggunakan algoritma jadual langkau:
import redis # 连接 Redis 数据库 r = redis.StrictRedis(host='localhost', port=6379, db=0) # 创建排行榜 def create_leaderboard(): r.zadd('leaderboard', {'Tom': 100, 'Jerry': 90, 'Peter': 80, 'Lucy': 70}) # 获取排行榜前 N 名的数据 def get_topN(n): data = r.zrevrange('leaderboard', 0, n - 1, withscores=True) return data # 更新用户积分 def update_score(username, score): r.zadd('leaderboard', {username: score}) # 获取指定用户在排行榜中的排名 def get_rank(username): rank = r.zrank('leaderboard', username) return rank # 测试代码 if __name__ == '__main__': create_leaderboard() print(get_topN(3)) # 输出前 3 名的数据 update_score('Tom', 95) # Tom 的积分变为 95 print(get_topN(3)) # 再次输出前 3 名的数据,应该会有变化 print(get_rank('Tom')) # Tom 目前的排名是第 2 名
Apabila jumlah data dalam sistem ranking masa nyata menjadi lebih besar dan lebih besar, anda mungkin menghadapi kesesakan prestasi sistem. Untuk memastikan kebolehskalaan sistem, kelompok Redis boleh digunakan untuk mengembangkan sistem kedudukan masa nyata secara mendatar.
Kluster Redis merujuk kepada contoh Redis yang dijalankan secara teragih pada berbilang pelayan Ia menyimpan sejumlah besar data pada nod yang berbeza untuk mencapai ketersediaan tinggi dan pengimbangan beban data. Kelompok Redis boleh dilaksanakan menggunakan Kluster Redis atau Redis Sentinel.
Anda perlu memberi perhatian kepada perkara berikut semasa melaksanakan gugusan Redis:
1) Pembahagian data: Penyimpanan data yang berselerak pada nod berbeza boleh mengurangkan tekanan beban pada satu nod dengan berkesan.
2) Pemisahan baca dan tulis: Gunakan seni bina tuan-hamba untuk mencapai pemisahan baca dan tulis, yang boleh memperuntukkan operasi baca kepada berbilang nod dan meningkatkan kecekapan membaca sistem.
3) Mekanisme toleransi kesalahan: Gunakan Redis Sentinel atau mekanisme toleransi kesalahan lain untuk mencapai kegagalan automatik bagi memastikan ketersediaan sistem yang tinggi.
Ringkasan:
Redis ialah alat yang berkuasa untuk melaksanakan sistem kedudukan masa nyata Ia menyokong berbilang jenis data dan struktur data yang kaya, serta boleh melaksanakan pengisihan dan pertanyaan data dengan berkesan. Pengisihan yang cekap boleh dicapai menggunakan algoritma jadual langkau, dan ditambah dengan pengembangan mendatar kelompok Redis, sistem kedudukan masa nyata boleh mengendalikan sejumlah besar data dan memastikan ketersediaan sistem yang tinggi. Contoh kod yang disediakan dalam artikel ini boleh digunakan sebagai komponen asas untuk melaksanakan sistem ranking masa nyata, dan pembaca boleh mengubah suai dan mengoptimumkannya mengikut keperluan sebenar.
Atas ialah kandungan terperinci Redis: teknologi utama untuk membina sistem ranking masa nyata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!