Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 6755|Svar: 3

[Kilde] .NET/C# bruger Redis til at implementere Bloom-algoritmen baseret på BitMap

[Kopier link]
Opslået på 02/01/2023 17.37.01 | | | |
Krav: For nylig så jeg en video af Redis Bloom-algoritmen på Bilibili for at løse problemet med cache-penetration, ganske enkelt tilføje et lag af logisk dømmekraft, før man tilgår databasen for at afgøre, om dataene eksisterer, og i så fald adgang til databasen. For eksempel, hvis et website er et nyhedssystem, genereres artiklernes URL'er ved selv-inkrementerende primærnøgle-ID'er (URL-format example:/news-1.html), kan websitet kun have titusindvis af artikler og caches.

Oprindelig:

Anmod om nyhedsressource -> Bestem om cachen eksisterer -> Tilstedeværelse -> Cachen returnerer data.
Anmod om nyhedsressourcer -> Bestem om cachen eksisterer -> ikke eksisterer -> Forespørg fra databasen -> Præsenter -> Cache og returner data.
Anmod om en nyhedsressource -> Bestem om cachen eksisterer -> ikke eksisterer -> Forespørgsel fra databasen -> Findes ikke -> Returnerer en 404-fejl.

Lige nu:

Anmod om nyhedsressource -> Blooms algoritme -> Existence -> Følg den oprindelige logik.
Anmod om nyhedsressource -> Blooms algoritme -> ikke eksisterer -> returnerer direkte en 404-fejl.

BloomFilter

BloomFilter-algoritmen er en big data-planlægningsalgoritme. I en mængde med store mængder data kan det nøjagtigt bestemmes, at et objekt ikke er i mængden; Det er muligt at bedømme et objekt i en mængde og optage lidt plads. detDen er ikke egnet til situationer, der kræver høj nøjagtighed og nul fejl。 Effektiv udnyttelse af pladsen opnås ved at ofre delvis nøjagtighed.

Blooms algoritme er en metode baseret påOfre en vis nøjagtighed til fordel for en filtreringsalgoritme med lavt hukommelsesforbrug, som kan realisere filtrering, deduplikering og andre operationer af store mængder data.

Bloom-algoritmen er blot et abstrakt koncept og kan implementeres på mange måder, og brugen af BitMap i Redis i artiklen er blot en simpel implementering.

Henvisning:Hyperlink-login er synlig.

BitMap-introduktion

BitMap er et bitmap, som faktisk er et byte-array, repræsenteret binært.Der er kun to tal, 0 og 1, bitmap er at bruge hver binær bit til at gemme eller markere værdien, der svarer til et element. Det bruges normalt til at afgøre, om en bestemt data eksisterer eller ej, fordi den er gemt i bits, så Bitmap i sig selv sparer meget lagerplads.

Som vist i figuren nedenfor gemmes strengen i binær form i computeren.



BitMap-datatyper i Redis

Datatypen, som Redis leverer, er BitMap, og hver bit svarer til to tilstande: 0 og 1. Selvom den interne lagring stadig er i String-typen, giver Redis nogle instruktioner til direkte manipulation af BitMap, som kan betragtes som et bitarray, og arrayets subskript er offset.

Dens fordele er:Lav hukommelsesbelastning og høj effektivitetOg operationen er enkel.

Pladsbesparelse: En bit bruges til at repræsentere værdien eller tilstanden af et element, hvor nøglen er værdien af det tilsvarende element. Faktisk kan 8 bit udgøre en byte, så det sparer plads.
Høj effektivitet: Tidskompleksiteten for setbit og getbit er O(1), og effektiviteten af andre bits er også høj.

Her er et eksempel på brug af set collection og BitMap-lagring:

DatatypeHver brugerid fylderAntallet af brugere, der skal lagresAlt optager hukommelsen
sæt32 bit er 4 bytes (forudsat at brugerid bruger heltal, bruger mange hjemmesider faktisk lange heltal)50,000,00032 bit * 50.000.000 = 200 MB
Bitmap1 bit100,000,0001 bit * 100.000.000 = 12,5 MB


Tiden strækker sig lidt

En dagEn månedEt år
sæt200M6G72G
Bitmap12,5 m375M4,5G


Efter beregning fandt man, at jo længere tiden gik, desto større blev mængden af data, der skulle registreres, og kontrasten blev mere tydelig, og BitMap fyldte mindre end det indstillede.

Redis giver følgende instruktioner til at betjene BitMap:

kommandoillustrereTilgængelige versionerTidskompleksitet
Hyperlink-login er synlig.Sæt eller slet bits på den specificerede offset for strengværdien, der er gemt i nøglen.>= 2.2.0O(1)
Hyperlink-login er synlig.For strengværdien, der er gemt i nøglen, hent bits på den specificerede offset.>= 2.2.0O(1)
Hyperlink-login er synlig.Tæller antallet af bits i en given streng, der er sat til 1.>= 2.6.0O(N)
Hyperlink-login er synlig.Returnerer positionen af den binære bit i bitmappen, hvor den første værdi er bit.>= 2.8.7O(N)
Hyperlink-login er synlig.Bitmanipulation på en eller flere strengnøgler, der indeholder binære bits.>= 2.6.0O(N)
Hyperlink-login er synlig.BITFIELD-kommandoen kan operere på flere bitområder samtidig i et enkelt kald.>= 3.2.0O(1)


Kommandodokumentation:Hyperlink-login er synlig.

Nu hvor du har en kort forståelse af algoritmen og Bitmap-funktionerne og syntaksen i Redis, lad os bruge redis til at udføre en simpel operation.

SETBIT-syntaks:SETBIT nøgleforskydningsværdi

Sæt artiklen id:9, 10, 156 til 1, og kommandoen er som følger:

GETBIT-syntaks: GETBIT-nøgleforskydning

For at afgøre, om id: 10 eller 11 eksisterer, er kommandoen som følger:




.NET/C# manipulerer Redis' BitMap-type

Vi lærte om flere BitMap-kommandoer i redis og hvordan man bruger dem programmatisk. Opret et nyt .NET 3.1 konsolprojekt, referer til StackExchange.Redis-pakken, og brug følgende kommando:

Kildekoden er som følger:



Der findes mange andre bitmap-applikationsscenarier for Redis, som følger:

  • Det kan bruges som et simpelt Bloom-filter til at afgøre, om en bruger har udført bestemte handlinger.
  • Statistik over brugerens daglige aktivitet, månedlige aktiviteter og fastholdelsesrate
  • Forstå statistikkerne for antallet af brugerlanceringer
  • Brugernes online tilstedeværelse og statistik over personer

(Slut)




Tidligere:Virtuelle skuespillere: Dapr vs Orleans
Næste:Alibaba Cloud SLB Load Balancing 503 Fejlopløsning
 Udlejer| Opslået på 02/01/2023 17.41.56 |
Opslået på 02/01/2023 20.42.47 |
Jeg har lært, tak, og fået viden
Opslået på 06/01/2023 20.34.22 |
Lær at lære
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com