sql >> Databáze >  >> NoSQL >> Redis

Přesnost příkazu redis dbsize

Řekl bych, že je to spojeno s vypršením platnosti klíče.

Obchody klíč/hodnota jako Redis nebo memcached si nemohou dovolit definovat fyzický časovač pro každý objekt, jehož platnost vyprší. Bylo by jich moc. Místo toho definují datovou strukturu pro snadné sledování položek, jejichž platnost vypršela, a multiplexují všechny události vypršení platnosti do jediného fyzického časovače. Mají také tendenci zavádět línou strategii, jak se s těmito událostmi vypořádat.

U Redis se po vypršení platnosti položky nic neděje. Před každým přístupem k položce je však systematicky prováděna kontrola, aby se předešlo vracení položek s prošlou platností a případnému smazání položky. Kromě této líné strategie se každých 100 ms spustí scavenger algoritmus, který fyzicky vyprší platnost řady položek (tj. odstraní je z hlavního slovníku). Počet uvažovaných klíčů v každé iteraci závisí na pracovní zátěži vypršení platnosti (algoritmus je adaptivní).

Důsledkem je, že Redis může mít nevyřízené položky, jejichž platnost v daném okamžiku vyprší, když máte stálý tok událostí vypršení platnosti.

Nyní se vrátíme k otázce, příkaz DBSIZE pouze vrátí velikost hlavního slovníku, takže obsahuje položky s prošlou platností, které ještě nebyly odstraněny. Příkaz KEYS prochází celým slovníkem, přistupuje k jednotlivým klávesám, takže vylučuje všechny položky, jejichž platnost vypršela. Počet položek se proto nemusí shodovat.




  1. Jak použít aktualizaci pomocí filtrovaného polohového operátoru s arrayFilters

  2. Multiparametrový vyhledávač zápasů s Redis

  3. Vytváření vícepolních indexů v Mongoose / MongoDB

  4. Ověření jedinečnosti vloženého dokumentu vymezeného jeho nadřazeným prvkem v mongoose