Każdy bit w bitmapie znajduje się przy użyciu wartości przesunięcia. Wartość przesunięcia danego bitu jest obliczana na podstawie współrzędnych x i y. Do obliczenia przesunięcia danego bitu można zastosować następujący wzór matematyczny.
Offset = y współrzędna * max_width_of_map + x współrzędnaRozważmy następującą bitmapę i jak wygląda wartość przesunięcia dla różnych bitów.
Wartości na każdym bicie można ustawić za pomocą wartości przesunięcia. Redis zapewnia polecenie SetBit, aby ustawić wartość bitową na 0 lub 1. W tym przewodniku będziemy omawiać składnię i przypadki użycia komendy setbit.
Polecenie setbit
Komenda SetBit służy do manipulowania bitami przechowywanymi w danym przesunięciu w ciągu Redis. W szczególności to polecenie ustawia wartość danego bitu na 1 lub 0. Redis Bitmap może pomieścić do 2^32-1 przesunięć, co ogranicza maksymalny rozmiar mapy bitowej do 512 MB. Ponadto przesunięcia mapy bitowej zaczynają się od 0. indeksu.
Poniżej znajduje się składnia polecenia setbit.
Wartość przesunięcia klawisza setbitklucz: Nazwa klawisza Redis, który przechowuje wartość ciągu.
zrównoważyć: Wartość przesunięcia bitu.
wartość: Wartość bitu. Może to być 1 lub 0.
Jeśli klucz nie istnieje, polecenie SetBit utworzy nową wartość ciągu i ustaw wartość bitowa na określonym przesunięciu. Ponadto polecenie setbit działa na złożoności czasowej O (1), która jest znacznie szybkim procesem. Może się to nieco różnić, gdy zamierzamy ustawić bit 2^31-1 w bitmapie, gdy określony klucz nie istnieje lub przechowuje bardzo małą wartość ciągów, ponieważ pamięć dla wszystkich bitów pośrednich należy przydzielić. Zajmie to trochę czasu.
Polecenie SETBIT zwraca oryginalną wartość bitową przechowywaną na przesunięciu w ciągu zapisanym w określonym klawiszu.
Przypadek użycia - uprawnienia systemu plików za pomocą Redis Bitmap
Załóżmy, że system operacyjny podobny do UNIX utrzymuje uprawnienia do plików za pomocą bitmap. Odczyt, zapis i wykonanie uprawnień dla danego pliku/folderu są przechowywane w bitmapie w następujący sposób.
Ustawmy uprawnienia tylko do odczytu na plik o nazwie „A.tekst". Aby to wyjaśnić, uprawnienie odczytu jest oznaczone bitem znajdującym się przy 0. Zatem ustawym 0. Offset na 1, wywołując polecenie SETBIT w następujący sposób.
Plik setbit: id: 100: Nazwa: a.TXT 0 1Sprawdźmy, czy przesunięcie 0. zostało poprawnie ustawione za pomocą polecenia getbit, jak pokazano następująco.
Plik getbit: id: 100: Nazwa: a.TXT 0Nie musimy wyraźnie ustawiać dwóch pozostałych przesunięć, ponieważ domyślna wartość bitu wynosi 0. Stąd 1 i 2. bity przesunięcia powinny być domyślnie ustawione na 0, jak pokazano następujące.
Podobnie możemy ustawić wszystkie trzy odczyt, zapisać i wykonać uprawnienia na folderze ABC w następujący sposób. Wiele bitów można ustawić, wywołując polecenie setBit wiele razy.
Folder Setbit: Id: 3: Nazwa: ABC 0 1Sprawdźmy wartości 3 bitów za pomocą polecenia getbit.
Folder Getbit: Id: 3: Nazwa: ABC 0Ponadto możemy użyć polecenia Redis Get, aby odzyskać reprezentację łańcucha danej mapy bitowej. Jak widać na następujących wyjściach, wartość sześciokątna została zwrócona.
Równa wartość dziesiętna wynosiłaby 224.
Ogólnie rzecz biorąc, polecenie setbit można skutecznie użyć do manipulowania kawałkiem bitmapy.
Wniosek
Podsumowując, polecenie setbit jest używane do wyczyszczenia lub ustawiania wartości bitowej na podawanym przesunięciu w ciągu Redis przechowywanego w danym kluczu. Jak wspomniano, ciąg Redis można traktować jako szereg bitów, które mogą reprezentować strukturę danych bitmap. Również polecenie setbit działa na bitmapach w złożoności czasowej O (1). Jak widziałeś w przypadkach użycia, wiele bitów można ustawić, wywołując polecenie setbit wiele razy. Za pomocą polecenia Redis GET można odzyskać wartość ciągu bitmap.