Analisis mendalam bitmap dalam Redis (bitmap)
Artikel ini akan memperkenalkan anda kepada peta bit dalam Redis, saya harap ia akan membantu anda!
Peta bit Redis ialah tatasusunan yang terdiri daripada berbilang bit perduaan Setiap bit perduaan dalam tatasusunan mempunyai offset yang sepadan (daripada Bermula dari 0), offset ini boleh digunakan untuk. beroperasi pada satu atau lebih bit binari yang dinyatakan dalam peta bit. [Cadangan berkaitan: Tutorial video Redis]
Sebenarnya, bitmap bukanlah jenis data baharu yang disediakan oleh Redis, ia adalah lanjutan daripada jenis rentetan. Oleh itu, arahan bitmap boleh digunakan secara langsung pada kekunci jenis rentetan, dan kekunci yang dikendalikan oleh arahan bitmap juga boleh dikendalikan oleh perintah jenis rentetan.
Sebagai contoh, terdapat kunci rentetan foo:
redis> set foo bar
1 bait terdiri daripada 8 bit binari, jadi bentuk binari kekunci foo ialah:
SETBIT
Melalui arahan SETBIT, anda boleh menentukan nilai tetapan bit binari pada offset untuk bitmap mestilah lebih besar daripada Sama dengan 0, nilai hanya boleh 0 atau 1. Kerumitan masa arahan ini ialah O(1).
SETBIT key offset value
Selepas menetapkan bit binari, arahan SETBIT akan mengembalikan nilai lama sebelum bit binari ditetapkan sebagai hasilnya.
Andaikan sekarang anda ingin menukar bar menjadi aar, anda hanya memerlukan dua langkah berikut:
redis> setbit foo 6 0 (integer) 1 redis> setbit foo 7 1 (integer) 0 redis> get foo"aar"
Apabila melaksanakan perintah SETBIT untuk cuba menetapkan bitmap, jika bitmap melakukannya tidak wujud , atau saiz semasa bitmap tidak dapat dipenuhi, Redis akan mengembangkan peta bit yang ditetapkan dan memulakan nilai semua bit binari yang tidak ditetapkan kepada 0. Contohnya:
redis> setbit far 10 1
Memandangkan jauh tidak wujud, Redis akan menetapkan bit perduaan daripada 0 kepada 9 kepada 0. Kerana Redis mengembangkan peta bit dalam bait, sebenarnya Terdapat 16 digit perduaan jauh di atas, bukan 10, dan digit binari 11~15 juga 0.
Berdasarkan situasi ini, apabila mengimbangi bit binari yang ditentukan terlalu besar, Redis perlu memperuntukkan semua memori sekaligus, yang mungkin menyebabkan pelayan Redis disekat. Contohnya, apabila menyimpan jantina pengguna, 1 mewakili lelaki dan 0 mewakili perempuan, menggunakan ID sebagai offset binari Jika ID bermula dari 10000000001, anda perlu menolak 10000000000 daripada ID pengguna sebelum menyimpannya, jika tidak, ia akan menyebabkan pembaziran. ingatan.
GETBIT
Gunakan arahan GETBIT untuk mendapatkan nilai bit binari pada offset peta bit yang ditentukan. Kerumitan masa arahan ini ialah O(1).
GETBIT key offset
Jika offset input melebihi offset maksimum bitmap pada masa ini, 0 akan dikembalikan sebagai hasilnya.
BITCOUNT
Arahan BITCOUNT boleh digunakan untuk mengira bilangan bit binari dengan nilai 1 dalam peta bit. Kerumitan masa arahan ini ialah O(n).
BITCOUNT key [start end]
Secara lalai, arahan BITCOUNT mengira bit perduaan dalam semua bait yang terkandung dalam bitmap Ia juga boleh dikonfigurasikan dengan parameter mula dan parameter akhir pilihan sahaja bit binari dalam julat bait yang ditentukan (bukan ofset binari). Sebagai contoh, anda ingin mengira bilangan nombor perduaan dengan nilai 1 dalam dua bait ar:
redis> bitcount foo 1 2 (integer) 7
Parameter mula dan akhir juga menyokong penggunaan indeks negatif Penggunaan di bawah ialah bersamaan dengan di atas:
redis> bitcount foo -2 -1 (integer) 7
BITPOS
Dengan melaksanakan arahan BITPOS, cari bit binari pertama yang ditetapkan kepada nilai yang ditentukan dalam bitmap dan kembalikan bit binari ini mengimbangi.
BITPOS key value [start end]
BITPOS juga menerima parameter permulaan dan parameter akhir pilihan, membenarkan arahan BITPOS untuk mencari hanya dalam bit binari dalam julat bait yang ditentukan.
redis> get foo"aar"redis> bitpos foo 1 (integer) 1 redis> bitpos foo 0 (integer) 0 redis> bitpos foo 0 1 2 (integer) 8 redis> bitpos foo 1 1 2 (integer) 9 redis> bitpos foo 1 -1 -1 (integer) 17
Pemprosesan sempadan:
- Apabila cuba mencari nilai 1 dalam peta bit yang tidak wujud atau peta bit dengan semua bit ditetapkan kepada 0 bit binari, Perintah BITPOS akan mengembalikan -1 sebagai hasilnya.
- Jika bit binari dengan nilai 0 ditemui dalam peta bit dengan semua bit ditetapkan kepada 1, arahan BITPOS akan mengembalikan offset maksimum bitmap tambah 1 sebagai hasilnya
BITOP
Gunakan arahan BITOP untuk melaksanakan operasi bit binari yang ditentukan pada satu atau lebih bitmap dan simpan hasil operasi dalam kunci yang ditentukan.
BITOP operation destkey key [key ...]
operation 参数的值可以是 AND、OR、XOR、NOT 中的任意一个,这 4 个值分别对应逻辑并、逻辑或、逻辑异或和逻辑非 4 种运算,其中 AND、OR、XOR 这 3 种运算允许用户使用任意数量的位图作为输入,而 NOT 运算只允许使用一个位图作为输入。BITOP 命令在将计算结果存储到指定键中之后,会返回被存储位图的字节长度。
当 BITOP 命令在对两个长度不同的位图执行运算时,会将长度较短的那个位图中不存在的二进制位的值看作 0。
redis> set foo1 bar OK redis> set foo2 aar OK redis> bitop or res foo1 foo2 (integer) 3 redis> get res"car"
注意:BITOP 可能是一个缓慢的命令,它的时间复杂度是 O(N),在处理长字符串时应注意一下效率问题。
应用场景
用户行为记录器
用用户 ID 作为偏移量,若用户做了某种行为则通过 SETBIT 将二进制位设置为 1,通过 GETBIT 判断用户是否做了某种行为,通过 BITCOUNT 可以知道有多少用户执行了行为。
用户上线统计
可以使用 SETBIT 和 BITCOUNT 来实现,以用户 ID 作为 key ,假设今天是上线统计功能开放的第一天,ID 为 1 的用户上线后就通过 SETBIT 1 0 1。当要计算此用户的总共以来的上线次数时,使用 BITCOUNT 命令就可以得出的结果。
使用这种方式存储数据,即使 10 年后,1个用户就只占用几百字节的内存,它的处理速度依然很快。如果 bitmap 数据比较大,建议将 bitmap 拆分成多个小的 bitmap 分别进行处理。
更多编程相关知识,请访问:编程入门!!
Atas ialah kandungan terperinci Analisis mendalam bitmap dalam Redis (bitmap). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



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

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.

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.

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.

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.

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.

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.

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).
