Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk mengalih keluar pendua dalam Redis? Analisis ringkas 4 kaedah untuk mengalih keluar pendua

Bagaimana untuk mengalih keluar pendua dalam Redis? Analisis ringkas 4 kaedah untuk mengalih keluar pendua

青灯夜游
青灯夜游ke hadapan
2021-11-09 10:03:467877semak imbas

Bagaimana untuk mengalih keluar pendua dalam Redis? Artikel berikut akan memperkenalkan kepada anda 4 kaedah deduplikasi Redis Saya harap ia akan membantu anda!

Bagaimana untuk mengalih keluar pendua dalam Redis? Analisis ringkas 4 kaedah untuk mengalih keluar pendua

Artikel ini terutamanya memperkenalkan perkongsian tiga kaedah pengiraan unik dalam Redis Artikel ini menerangkan tiga kaedah berdasarkan SET, berdasarkan bit dan berdasarkan HyperLogLog. Rakan boleh merujuk kepada

Pengiraan unik adalah ciri yang sangat biasa dalam sistem tapak web Sebagai contoh, tapak web perlu mengira bilangan pelawat unik (iaitu, UV) yang melawati setiap hari. Masalah mengira adalah sangat biasa, tetapi ia boleh menjadi sangat rumit untuk diselesaikan: pertama, jumlah yang perlu dikira mungkin sangat besar, contohnya, tapak yang besar dikunjungi oleh berjuta-juta orang setiap hari, dan jumlah data adalah agak besar; kedua, ia biasanya wajar untuk mengembangkan dimensi pengiraan Sebagai contoh, sebagai tambahan kepada UV harian, anda juga ingin tahu UV mingguan atau bulanan, yang membuat pengiraan sangat rumit. [Cadangan berkaitan: Tutorial Video Redis]

Dalam sistem storan pangkalan data hubungan, kaedah untuk mencapai pengiraan unik ialah pilih count(distinct ) Ia sangat mudah, tetapi jika Jumlah data adalah besar, dan pelaksanaan pernyataan ini sangat perlahan. Masalah lain dengan menggunakan pangkalan data hubungan ialah prestasi memasukkan data tidak tinggi.

Redis menyelesaikan masalah pengiraan seperti ini dengan sangat mudah dan menggunakan sumber yang lebih sedikit daripada pangkalan data hubungan.

1. Set berdasarkan set

Redis digunakan untuk menyimpan set data yang unik dengan cepat boleh menentukan sama ada unsur wujud dalam set, dan juga boleh dengan cepat Mengira bilangan elemen dalam set, dan boleh menggabungkan set menjadi set baharu. Arahan yang terlibat adalah seperti berikut:

Salin kod seperti berikut:

SISMEMBER key member  # 判断 member 是否存在
SADD key member  # 往集合中加入 member
SCARD key   # 获取集合元素个数

Kaedah berasaskan set adalah mudah dan berkesan, dengan pengiraan yang tepat, aplikasi yang luas dan mudah difahami kelemahan adalah bahawa ia menggunakan banyak sumber (Sudah tentu, ia adalah lebih kurang daripada pangkalan data hubungan jika bilangan elemen adalah besar (seperti beratus-ratus juta), penggunaan memori adalah dahsyat.

2. Bit berdasarkan bit

Redis boleh digunakan untuk melaksanakan pengiraan yang lebih dimampatkan daripada set memori Ia menggunakan sedikit 1 atau 0 untuk menyimpan sama ada elemen adalah Maklumat wujud. Sebagai contoh, untuk kiraan pelawat unik tapak web, user_id boleh digunakan sebagai pengimbang bit Jika ia ditetapkan kepada 1, ia bermakna terdapat akses Menggunakan 1 MB ruang, kiraan akses satu hari lebih daripada 8 juta pengguna boleh disimpan. Perintah yang terlibat adalah seperti berikut: Salin kod seperti berikut:

SETBIT key offset value  # 设置位信息
GETBIT key offset        # 获取位信息
BITCOUNT key [start end] # 计数
BITOP operation destkey key [key ...]  # 位图合并

Kaedah berasaskan bit menggunakan lebih sedikit ruang daripada set, tetapi ia memerlukan elemen boleh dipetakan dengan mudah kepada mengimbangi bit dan skop yang berkenaan adalah lebih sempit. Di samping itu, ia menggunakan Ruang bergantung pada offset maksimum dan tiada kaitan dengan nilai kiraan Jika offset maksimum adalah besar, penggunaan memori juga besar.

3 Berdasarkan HyperLogLog

Sukar untuk mencapai pengiraan unik yang tepat bagi jumlah data yang sangat besar, tetapi jika ia hanya anggaran, terdapat banyak yang cekap. algoritma dalam sains pengkomputeran , antaranya HyperLogLog Counting ialah algoritma yang sangat terkenal Ia hanya boleh menggunakan kira-kira 12 k memori untuk mencapai ratusan juta kiraan unik, dan ralat dikawal pada kira-kira satu peratus. Perintah yang terlibat adalah seperti berikut: Salin kod seperti berikut:

PFADD key element [element ...]  # 加入元素
PFCOUNT key [key ...]   # 计数

Kaedah pengiraan ini benar-benar menakjubkan. Ia melibatkan beberapa pengedaran seragam, kebarangkalian rawak, pengedaran Bernoulli, dan lain-lain dalam statistik saya tidak memahaminya , anda boleh mendalami artikel yang berkaitan.

Tiga kaedah pengiraan unik yang disediakan oleh redis masing-masing mempunyai kelebihan dan keburukan tersendiri, dan boleh memenuhi sepenuhnya keperluan pengiraan dalam situasi berbeza.

4 Berdasarkan bloomfilter

BloomFilter menggunakan struktur data yang serupa dengan bitmap atau set bit untuk menyimpan data dan menggunakan tatasusunan bit secara ringkas mewakili set dan ia boleh menentukan dengan cepat sama ada unsur sudah wujud dalam koleksi ini. Walaupun BloomFilter tidak 100% tepat, kadar ralat boleh dikurangkan dengan melaraskan parameter, bilangan fungsi Hash yang digunakan dan saiz tatasusunan bit. Pelarasan ini boleh mengurangkan sepenuhnya kadar ralat kepada hampir 0. Ia boleh memenuhi kebanyakan senario.

Andaikan terdapat set S = {x1, x2, … xn}. Penapis Bloom menggunakan k fungsi cincang bebas untuk memetakan setiap elemen dalam set kepada {1,…,m}. Untuk mana-mana elemen, nombor yang dipetakan kepada digunakan sebagai indeks tatasusunan bit yang sepadan, dan bit akan ditetapkan kepada 1. Sebagai contoh, elemen x1 dipetakan ke nombor 8 oleh fungsi cincang, maka bit ke-8 tatasusunan bit akan ditetapkan kepada 1. Dalam rajah di bawah, set S hanya mempunyai dua elemen x dan y, yang masing-masing dipetakan oleh tiga fungsi cincang Kedudukan dipetakan ialah (0, 3, 6) dan (4, 7, 10) masing-masing, dan bit yang sepadan. akan ditetapkan. ialah 1:

Bagaimana untuk mengalih keluar pendua dalam Redis? Analisis ringkas 4 kaedah untuk mengalih keluar pendua

Sekarang jika anda ingin menentukan sama ada elemen lain berada dalam set ini, anda hanya perlu memetakannya dengan tiga fungsi cincang ini untuk melihat sama ada terdapat 0 dalam kedudukan yang sepadan, jika ada, bermakna elemen ini pasti tidak wujud dalam set ini, jika tidak, ia mungkin wujud.

Redis perlu memasang pemalam untuk menggunakan penapis Bloom: https://blog.csdn.net/u013030276/article/details/88350641.

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

Atas ialah kandungan terperinci Bagaimana untuk mengalih keluar pendua dalam Redis? Analisis ringkas 4 kaedah untuk mengalih keluar pendua. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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