Rumah > pangkalan data > Redis > teks badan

Fahami peta bit redis dalam satu artikel

WBOY
Lepaskan: 2022-04-27 19:48:01
ke hadapan
5505 orang telah melayarinya

Artikel ini membawakan anda pengetahuan yang berkaitan tentang Redis, yang terutamanya memperkenalkan masalah bitmap Redis memberikan kita struktur data bitmap Struktur data bitmap sebenarnya bukan perkara baharu, kita boleh anggap ia sebagai tatasusunan, tetapi kandungan di dalamnya hanya boleh 0 atau 1. Saya harap ia akan membantu semua orang.

Fahami peta bit redis dalam satu artikel

Pembelajaran yang disyorkan: Tutorial video Redis

1 Bagaimana jika kami perlu merekodkan sama ada pengguna log masuk ke sistem kami setiap hari selama setahun? Jika storan KV digunakan, setiap pengguna perlu merekodkan 365 rekod Apabila bilangan pengguna mencecah ratusan juta, ruang storan yang diperlukan adalah mengejutkan.

Redis membekalkan kami dengan struktur data bitmap Setiap rekod log masuk harian pengguna hanya menduduki satu bit adalah 365 bit. Ia hanya memerlukan 46 bait untuk menyimpan, yang sangat Menjimatkan ruang storan.

Struktur data bitmap sebenarnya bukanlah sesuatu yang baharu. Kita boleh menganggapnya sebagai tatasusunan, tetapi kandungan di dalamnya hanya Ia hanya boleh menjadi 0 atau 1 (tatasusunan bit binari).

2. Amalan perintah

Redis menyediakan empat arahan biasa:

,

,

, SETBIT untuk memproses tatasusunan bit binari . GETBITBITCOUNTBITOP

: Menentukan nilai tetapan bit binari pada offset tatasusunan bit Offset mula dikira dari 0, dan nilai bit binari hanya boleh menjadi 0 atau 1 . Mengembalikan nilai kedudukan asal.
  • SETBIT: Dapatkan nilai bit binari pada offset yang ditentukan.
  • GETBIT: Mengira bilangan digit binari dengan nilai 1 dalam tatasusunan bit.
  • BITCOUNT: Lakukan operasi bitwise AND, OR, dan XOR pada berbilang tatasusunan bit.
  • BITOP
3.Analisis kod sumber BitMap
127.0.0.1:6379> SETBIT first 0 1    # 0000 0001
(integer) 0
127.0.0.1:6379> SETBIT first 3 1    # 0000 1001
(integer) 0
127.0.0.1:6379> SETBIT first 0 0    # 0000 1000
(integer) 1

127.0.0.1:6379> GETBIT first 0
(integer) 0
127.0.0.1:6379> GETBIT first 3
(integer) 1

127.0.0.1:6379> BITCOUNT first      # 0000 1000
(integer) 1
127.0.0.1:6379> SETBIT first 0 1    # 0000 1001
(integer) 0
127.0.0.1:6379> BITCOUNT first      # 0000 1001
(integer) 2
127.0.0.1:6379> SETBIT first 1 1    # 0000 1011
(integer) 0
127.0.0.1:6379> BITCOUNT first      # 0000 1011
(integer) 3

127.0.0.1:6379> SETBIT x 3 1        
(integer) 0
127.0.0.1:6379> SETBIT x 1 1        
(integer) 0
127.0.0.1:6379> SETBIT x 0 1        # 0000 1011
(integer) 0
127.0.0.1:6379> SETBIT y 2 1        
(integer) 0
127.0.0.1:6379> SETBIT y 1 1        # 0000 0110
(integer) 0
127.0.0.1:6379> SETBIT z 2 1        
(integer) 0
127.0.0.1:6379> SETBIT z 0 1        # 0000 0101
(integer) 0

127.0.0.1:6379> BITOP AND andRes x y z    #0000 0000
(integer) 1
127.0.0.1:6379> BITOP OR orRes x y z      #0000 1111
(integer) 1
127.0.0.1:6379> BITOP XOR x y z           #0000 1000
(integer) 1

# 对给定的位数组进行按位取反
127.0.0.1:6379> SETBIT value 0 1
(integer) 0
127.0.0.1:6379> SETBIT value 3 1            #0000 1001
(integer) 0
127.0.0.1:6379> BITOP NOT notValue value    #1111 0110
(integer) 1
Salin selepas log masuk
3.1 Struktur data

Berikut menunjukkan bait (8 bit) yang diwakili oleh SDS Long bitmap :

Sambungan: Setiap objek dalam Redis diwakili oleh struktur redisObject. Nilai

typedef struct redisObject {
// 类型
unsigned type:4;
// 编码
unsigned encoding:4;
unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */
// 引用计数
int refcount;
// 执行底层实现的数据结构的指针
void *ptr;
} robj;
Salin selepas log masuk
ialah
    yang bermaksud ini ialah objek rentetan Nilai
  • typeREDIS_STRING ialah 1 yang bermaksud SDS ini Menyimpan tatasusunan bit 1-bait
  • sdshdr.len dalam tatasusunan buf sebenarnya menyimpan tatasusunan bit
  • buf[0] dalam tatasusunan buf ialah yang dilampirkan secara automatik
  • watak
  • buf[1]

Atas ialah kandungan terperinci Fahami peta bit redis dalam satu artikel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!