Redis BitCount

Redis BitCount

Struktury danych Redis

Redis to następny wdrożenie tradycyjnych sklepów z kluczową wartością. Nie ogranicza się to do przechowywania wartości ciągów dla danego klucza. Redis może przechowywać bardziej złożone struktury danych (typy), takie jak listy, skróty, zestawy i mapy bitowe (tablice bitowe). Typ danych ciągów jest nadal dostępny w Redis. Został wykorzystany do wdrożenia niektórych z tych złożonych operacji struktury danych.

Co to są bitmapy redis?

Bitmap nie jest natywnym typem danych w Redis. Jego podstawowa implementacja opiera się na typu danych ciągów. Jest to zestaw funkcji zbudowanych na typach danych ciągów. Najłatwiejszym sposobem na zrozumienie bitmaty jest myślenie o tym jak o szeregu kawałków.

Jak wspomniano powyżej, jest to reprezentacja łańcucha z możliwościami pracy bitowej. Bit to najmniejszy rozmiar pamięci wewnątrz komputera. Stąd każdy bit może przechowywać 1 lub 0 w danym momencie.

Maksymalna długość sznurka Redis wynosi 512 MB. Jeśli przekonwertujemy tę wartość na bity, jest to około 4 miliardów bitów, co jest więcej niż wystarczające do użycia w rzeczywistej aplikacji. Nazywamy indeks tablicy „przesunięcie” w bitmapach Redis. Rzućmy okiem na następujący przykład.

Operacje bitmapowe

Istnieją dwa główne rodzaje operacji związane z bitmapami Redis. Operacje jednolitowe są wykonywane na określonym bicie, na przykład w celu uzyskania wartości lub ustalonej wartości. Istnieje inny rodzaj operacji, który jest wykonywany na grupie bitów, takich jak BitCount.

Polecenie bitCount

Polecenie BitCount to operacja typu wsadowego. Liczy liczbę wystąpień „1” w danej mapie bitowej lub ciągu. Nazywamy to „liczeniem populacji” lub liczbą ustalonych bitów.

Składnia

1
BitCount your_key [interal_start interal_end] [bajt | FRAGMENT]

Twój klucz: To jest klucz łańcucha lub mapy bitowej. Jest to obowiązkowy parametr.

Interal_start, interal_end: Te dwa parametry określają zakres za pomocą indeksów Start i End. Te dwa parametry są opcjonalne.

Bajt lub bit: Ten parametr określa początek i koniec interwału jako indeks bajtów lub indeks bitów. Ten parametr jest opcjonalny. Domyślnie używany jest bajt.

Przykład 01

Utwórzmy klucz „przykład1” i ustaw wartości drugiego i czwartego bity na 1. Będziemy używać Redis setbit polecenie tutaj.

1
2
3
Setbit Przykład1 2 1
Setbit Przykład 1 4 1

Wyjście:

Sprawdźmy utworzoną wartość indeksu Bitmap za pomocą Redis getbit Komenda.

1
2
3
Getbit Przykład 1 2
Getbit Przykład 1 4

Wyjście:

2. i 4. bity są ustawione na 1 zgodnie z oczekiwaniami.

Użyjmy BitCount polecenie do zliczenia liczby ustalonych lub 1s w przykładzie 1 bitmap.

1
Przykład BitCount1

Wyjście:

Bitmapa przykładowa wygląda jak następujące.

0 0 1 0 1

Jak widać, 2. i czwarte przesunięcia są ustawione na 1. Stąd BitCount Wyjście polecenia powinno wynosić 2 jak wyżej.

Przykład 02

Utwórzmy nowy przykładowy przykład2 i przypiszmy ciąg „a.”Ciąg A jest reprezentowany przez 8 bitów (1 bajt), jak pokazano następujące.

0 1 0 0 0 0 0 1
1
Ustaw przykład2 „A”

Wyjście:

Użyjmy BitCount polecenie do sprawdzenia liczby ustawionych bitów. Ponieważ dostaliśmy pierwszy i 7. bit ustawiony na 1, BitCount Wyjście polecenia powinno wynosić 2.

1
Przykład BitCount2

Wyjście:

Zwykle BitCount Polecenie sprawdza wszystkie bajty zawarte w tablicy. W niektórych scenariuszach może być zbędnym procesem, aby zbadać wszystkie bajty w bitmapie lub sznurku. Stąd możemy określić zakres do wykonania BitCount Operacja, jak pokazano następująco.

1
Klucz bitCount start_index end_index

Domyślnie, start_index i end_index Wartości parametrów są oparte na indeksach bajtów. Wypróbujmy to w poniższym przykładzie.

Przykład 03

Będziemy tworzyć nowy klucz o nazwie przykład3 i przypisujemy wartość „AB."

1
Ustaw przykład3 „AB”

Ciąg przykład3 powinien wyglądać jak następujące.

0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
| A | B

Pierwsze 8 bitów reprezentuje literę A, a drugie 8 bitów reprezentuje list B. String „AB” bierze 2 bajty. Użyjmy polecenia BitCount, aby policzyć liczbę ustawionych bitów dla danego przedziału.

1
BitCount Przykład3 0 0

Określiliśmy zarówno indeksy bajtów startowych, jak i końcowych jako 0 w powyższym poleceniu. Oznacza to, że będzie to liczyć 1s tylko w pierwszym bajcie (8 bitów). Dlatego wartość wyjściowa powinna wynosić 2.

Wyjście:

Jeśli określamy zarówno indeksy początkowe, jak i końcowe jako 1, polecenie BitCount będzie liczyć ustawione bity tylko w drugim bajcie (drugie 8 bitów), który reprezentuje literę B. Powinno to być ponownie dwa.

1
BitCount Przykład3 1 1

Wyjście:

Możemy pobrać wszystkie ustawione bity w ciągu „AB”, określając zakres od 0. bajt do 1 bajtu. Wyjście powinno wynosić cztery, ponieważ mamy cztery 1s w całym ciągu.

1
BitCount Przykład3 0 1

Wyjście:

BitCount Polecenie pozwala użytkownikom określić interwał za pomocą indeksu bitów. String „AB” ma 16 bitów, jak pokazano na powyższej ilustracji. Dlatego indeksy minimum interwału i maksymalne będą wynosić odpowiednio 0 i 15. Musimy to wyraźnie określić do polecenia Redis za pomocą FRAGMENT argument. A później BitCount Polecenie będzie traktować indeksy początkowe i końcowe jako indeks bitów.

Policzmy SETBITS od pierwszego bitu (indeks 0.) do czwartego bitu (3. indeks)

1
BitCount Przykład 3 0 3 bit

Zwróć uwagę na niedawno przekazane FRAGMENT argument. Teraz analizuje ustawione bity od 0 do 3 bitu indeksu. Wyjście powinno być jednym.

0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
|< = = = > |
W tym zakresie znajduje się tylko 1 zestaw

Wyjście:

Następnie damy interwał od pierwszego bitu (indeks bitowy) do 10. bit (9. indeks bitów).

1
BitCount Przykład 3 0 9 bitów
0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0
|< = = = = = = = = = = > |
W tym zakresie znajdują się tylko 3 ustawione bity

Zgodnie z powyższą ilustracją wyjście powinno wynosić 3.

Wyjście:

Wniosek

Redis może przechowywać różne typy struktur danych dla określonego klucza. Bitmap to jedna z przydatnych struktur danych, które obsługuje Redis. Podstawowa implementacja to reprezentacja łańcucha z obsługiwanymi operacjami Bitmap. BitCount to polecenie Redis, które można użyć do zliczenia liczby ustawionych bitów w danej mapie bitowej lub ciągu.