Redis ialah pangkalan data dalam memori sumber terbuka yang digunakan secara meluas dalam senario seperti caching, baris gilir mesej dan kunci yang diedarkan. Antaranya, penapis Bloom ialah struktur data yang cekap yang boleh digunakan untuk menentukan sama ada unsur wujud dalam set, dan telah digunakan secara meluas dalam Redis. Artikel ini akan memperkenalkan prinsip pelaksanaan dan penggunaan penapis Bloom dalam Redis serta sokongan untuk penapis Bloom dalam PHP.
1. Prinsip pelaksanaan penapis Bloom
Penapis Bloom ialah struktur data yang sangat mudah dan cekap, yang dilaksanakan dengan menggunakan berbilang fungsi cincang dan Penghakiman vektor binari set. Apabila elemen ditambahkan pada set, ia menghantar elemen ke dalam berbilang fungsi cincang, setiap satunya menjana nilai cincang yang unik (biasanya nombor), yang kemudiannya ditukar kepada perduaan Kedudukan yang sepadan dalam vektor ditetapkan kepada 1. Apabila perlu untuk menentukan sama ada unsur wujud dalam set, ia akan menghantar elemen ke dalam fungsi cincang ini, menjana berbilang nilai cincang, dan bertanya sama ada kedudukan vektor binari yang sepadan dengan nilai cincang ini semuanya 1, dan jika ia adalah semua 1, ia dianggap bahawa elemen ini mungkin berada dalam set, jika tidak, ia boleh ditentukan bahawa elemen ini pasti tiada dalam set. Perlu diingatkan bahawa disebabkan oleh ciri-ciri fungsi cincang, penapis Bloom akan mempunyai kadar positif palsu tertentu, tetapi kadar positif palsu ini boleh dilaraskan dengan menetapkan bilangan fungsi cincang dan saiz vektor binari.
2. Cara menggunakan penapis Bloom dalam Redis
Arahan untuk melaksanakan penapis Bloom dalam Redis ialah BF.ADD, BF.EXISTS, BF.MADD dan BF.MEXISTS, digunakan untuk tambahkan elemen pada penapis Bloom, tentukan sama ada satu elemen wujud dalam penapis Bloom, tambahkan berbilang elemen pada penapis Bloom dan tentukan sama ada berbilang elemen wujud dalam penapis Bloom. Apabila menggunakannya, anda perlu mencipta penapis Bloom terlebih dahulu, yang boleh dibuat melalui arahan BF.RESERVE Anda perlu menentukan nama penapis Bloom, bilangan fungsi cincang, saiz vektor binari dan. kadar positif palsu. Sebagai contoh, untuk mencipta penapis Bloom bernama ujian, bilangan fungsi cincang ialah 10, saiz vektor binari ialah 10000, dan kadar positif palsu ialah 1%, anda boleh menggunakan arahan berikut:
BF.RESERVE test 10 10000 0.01
Kemudian anda boleh Tambah elemen pada penapis Bloom ini atau tentukan sama ada elemen itu wujud dalam koleksi. Penggunaan khusus adalah seperti berikut:
1 Tambahkan elemen pada penapis Bloom
BF.ADD test element1
Arahan ini akan menambah elemen elemen1 pada ujian bernama penapis Bloom.
2. Tentukan sama ada satu elemen wujud dalam penapis Bloom
BF.EXISTS test element1
Arahan ini akan menentukan sama ada elemen elemen1 wujud dalam ujian bernama penapis Bloom Jika ia kembali 1 Ini bermakna ia mungkin wujud Jika ia kembali 0, ia bermakna ia tidak wujud.
3. Tambahkan berbilang elemen pada penapis Bloom
BF.MADD test element1 element2 element3
Arahan ini akan menambah elemen elemen1, elemen2 dan elemen3 pada ujian bernama penapis Bloom.
4 Tentukan sama ada berbilang elemen wujud dalam penapis Bloom
BF.MEXISTS test element1 element2 element3
Arahan ini akan menentukan sama ada elemen elemen1, elemen2 dan elemen3 wujud dalam penapis Bloom dinamakan ujian, jika salah satu hasil yang dikembalikan ialah 0, ini bermakna sekurang-kurangnya satu daripada elemen mesti tidak wujud dalam penapis Bloom.
3. Sokongan untuk penapis Bloom dalam PHP
Sokongan untuk penapis Bloom dalam PHP dilaksanakan melalui sambungan redis Anda perlu memastikan bahawa sambungan redis telah dipasang. Untuk penggunaan khusus, sila rujuk contoh kod berikut:
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); // 创建布隆过滤器,哈希函数个数为10,二进制向量大小为10000,误判率为1% $redis->rawCommand('BF.RESERVE', 'test', 10, 10000, 0.01); // 将元素element1加入到布隆过滤器中 $redis->rawCommand('BF.ADD', 'test', 'element1'); // 判断元素element1是否存在于布隆过滤器中 $result = $redis->rawCommand('BF.EXISTS', 'test', 'element1'); if ($result) { echo 'element1可能存在于布隆过滤器中'; } else { echo 'element1一定不存在于布隆过滤器中'; } // 将元素element2和element3加入到布隆过滤器中 $redis->rawCommand('BF.MADD', 'test', 'element2', 'element3'); // 判断元素element1、element2和element3是否存在于布隆过滤器中 $result = $redis->rawCommand('BF.MEXISTS', 'test', 'element1', 'element2', 'element3'); if (in_array(0, $result)) { echo '其中至少一个元素一定不存在于布隆过滤器中'; } else { echo '所有元素可能存在于布隆过滤器中'; }
Melalui contoh kod PHP di atas, anda boleh menggunakan penapis Bloom dalam Redis.
Ringkasan:
Dalam senario aplikasi sebenar, kerana penapis Bloom mempunyai ciri carian pantas dan storan yang cekap, ia digunakan secara meluas dalam bidang seperti menghalang penembusan cache dan anti-spam . Di Redis, melalui sokongan arahan BF.ADD, BF.EXISTS, BF.MADD dan BF.MEXISTS, operasi berkaitan penapis Bloom boleh dilaksanakan dengan mudah. Sudah tentu, kami juga boleh melaksanakan penggunaan penapis bloom dengan mudah dengan memasang sambungan redis dalam PHP.
Atas ialah kandungan terperinci Penapis Bloom dalam Redis dan cara menggunakan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!