Prasības: Nesen es redzēju Redis Bloom algoritma video vietnē Bilibili, lai atrisinātu kešatmiņas iekļūšanas problēmu, vienkārši sakot, pirms piekļuves datu bāzei pievienojiet loģiska sprieduma slāni, lai noteiktu, vai dati pastāv, un, ja tā, piekļūstiet datu bāzei. Piemēram, ja vietne ir ziņu sistēma, rakstu URL tiek ģenerēti, izmantojot pašpalielinošus primārās atslēgas ID (URL formāts example:/news-1.html), tīmekļa vietnē var būt tikai desmitiem tūkstošu rakstu un kešatmiņas.
Sākotnēji:
Pieprasīt ziņu resursu -> Noteikt, vai kešatmiņa pastāv -> Klātbūtne -> Kešatmiņa atgriež datus. Pieprasīt ziņu resursus -> Noteikt, vai kešatmiņa pastāv -> neeksistē -> Vaicāt no datu bāzes -> Prezentēt -> Kešatmiņu un atgriezt datus. Pieprasīt ziņu resursu -> Noteikt, vai kešatmiņa pastāv -> nepastāv -> Vaicājums no datu bāzes -> Neeksistē -> Atgriež kļūdu 404.
Tieši tagad:
Pieprasīt ziņu resursu -> Blūma algoritmu -> Eksistence -> Sekojiet sākotnējai loģikai. Pieprasīt ziņu resursu -> Blūma algoritms -> neeksistē -> tieši atgriež kļūdu 404.
BloomFilter
BloomFilter algoritms ir lielo datu plānošanas algoritms. Kopā ar lielu datu apjomu var precīzi noteikt, ka objekts nav kopā; Ir iespējams spriest par objektu komplektā un aizņemt maz vietas. TasTas nav piemērots situācijām, kurās nepieciešama augsta precizitāte un nulles kļūdas。 Efektīva telpas izmantošana tiek panākta, upurējot daļēju precizitāti.
Blūma algoritms ir metode, kuras pamatā irUpurējiet noteiktu precizitāti apmaiņā pret filtrēšanas algoritmu ar zemu atmiņas patēriņu, kas var realizēt liela apjoma datu filtrēšanu, deduplikāciju un citas darbības.
Bloom algoritms ir tikai abstrakts jēdziens, un to var īstenot daudzos veidos, un BitMap izmantošana Redis rakstā ir tikai vienkārša ieviešana.
Atsauce:Hipersaites pieteikšanās ir redzama.
Bitkartes ievads
BitMap ir bitkarte, kas faktiski ir baitu masīvs, kas attēlots binārā.Ir tikai divi skaitļi, 0 un 1, bitkarte ir izmantot katru bināro bitu, lai saglabātu vai atzīmētu elementam atbilstošo vērtību. To parasti izmanto, lai noteiktu, vai noteikti dati pastāv vai nav, jo tie tiek glabāti bitos, tāpēc pati Bitmap ievērojami ietaupīs krātuves vietu.
Kā parādīts zemāk redzamajā attēlā, virkne datorā tiek glabāta binārā formā.
BitMap datu tipi programmā Redis
Redis nodrošinātais datu tips ir BitMap, un katrs bits atbilst diviem stāvokļiem: 0 un 1. Lai gan iekšējā atmiņa joprojām ir virknes tipā, Redis sniedz dažus norādījumus par tiešu manipulāciju ar BitMap, ko var uzskatīt par bitu masīvu, un masīva apakšraksts ir nobīde.
Tās priekšrocības ir:Zemas atmiņas pieskaitāmās izmaksas un augsta efektivitāteUn darbība ir vienkārša.
Vietas taupīšana: Bits tiek izmantots, lai attēlotu elementa vērtību vai stāvokli, kur atslēga ir attiecīgā elementa vērtība. Patiesībā 8 biti var veidot baitu, tāpēc tas ietaupa vietu. Augsta efektivitāte: setbit un getbit laika sarežģītība ir O(1), un arī citu bitu efektivitāte ir augsta.
Tālāk ir sniegts kopas kolekcijas un BitMap krātuves izmantošanas piemērs.
| Datu tips | Katrs lietotājs aizņem vietu | Saglabājamo lietotāju skaits | Viss aizņem atmiņu | | kopa | 32 biti ir 4 baiti (pieņemot, ka Userid izmanto veselus skaitļus, daudzas vietnes faktiski izmanto garos veselos skaitļus) | 50,000,000 | 32 biti * 50 000 000 = 200 MB | | Bitkartes | 1 bits | 100,000,000 | 1 bits * 100 000 000 = 12,5 MB |
Laiks nedaudz stiepjas
| | Viena diena | Viens mēnesis | Viens gads | | kopa | 200M | 6G | 72G | | Bitkartes | 12,5 miljoni | 375 miljoni | 4.5G |
Pēc aprēķina tika konstatēts, ka, palielinoties laikam, palielinājās reģistrējamo datu apjoms, un kontrasts kļuva acīmredzamāks, un BitMap aizņēma mazāk vietas nekā iestatīts.
Redis sniedz šādus norādījumus par BitMap darbību:
Komandu dokumentācija:Hipersaites pieteikšanās ir redzama.
Tagad, kad jums ir īsa izpratne par algoritmu un Redis bitkartes funkcijām un sintaksi, izmantosim redis, lai veiktu vienkāršu darbību.
SETBIT sintakse:SETBIT atslēgas nobīdes vērtība
Iestatiet raksta ID:9, 10, 156 uz 1, un komanda ir šāda:
GETBIT sintakse: GETBIT taustiņu nobīde
Lai noteiktu, vai id: 10 vai 11 eksistē, komanda ir šāda:
.NET/C# manipulē ar Redis BitMap tipu
Mēs uzzinājām par vairākām BitMap komandām redis un to, kā tās programmiski darbināt. Izveidojiet jaunu .NET 3.1 konsoles projektu, atsaucieties uz StackExchange.Redis pakotni un izmantojiet šādu komandu:
Avota kods ir šāds:
Ir daudz citu bitkartes lietojumprogrammu Redis scenāriji:
- To var izmantot kā vienkāršu Bloom filtru, lai noteiktu, vai lietotājs ir veicis noteiktas darbības.
- Statistika par lietotāju ikdienas aktivitātēm, ikmēneša aktivitātēm un saglabāšanas līmeni
- Realizēt lietotāju palaišanas skaita statistiku
- Lietotāju klātbūtne tiešsaistē un personu statistika
(Beigas)
|