Tento článek může poskytnout mnoho informací zde:http://redis.io/topics/memory-optimization
Existuje mnoho způsobů, jak uložit pole objektů v Redis (spoiler :Líbí se mi možnost 1 pro většinu případů použití):
-
Uložte celý objekt jako řetězec kódovaný JSON do jediného klíče a sledujte všechny objekty pomocí sady (nebo seznamu, pokud je to vhodnější). Například:
INCR id:users SET user:{id} '{"name":"Fred","age":25}' SADD users {id}
Obecně řečeno, je to ve většině případů pravděpodobně nejlepší metoda. Pokud je v objektu mnoho polí, vaše objekty nejsou vnořeny s jinými objekty a máte tendenci přistupovat pouze k malé podmnožině polí najednou, může být lepší zvolit možnost 2.
Výhody :považováno za "dobrý postup." Každý objekt je plnohodnotným klíčem Redis. Analýza JSON je rychlá, zvláště když potřebujete přistupovat k mnoha polím pro tento objekt najednou. Nevýhody :pomalejší, když potřebujete přístup pouze k jednomu poli.
-
Uložte vlastnosti každého objektu do hash Redis.
INCR id:users HMSET user:{id} name "Fred" age 25 SADD users {id}
Výhody :považováno za "dobrý postup." Každý objekt je plnohodnotným klíčem Redis. Není třeba analyzovat řetězce JSON. Nevýhody :možná pomalejší, když potřebujete získat přístup ke všem/většině polí v objektu. Také vnořené objekty (Objects within Objects) nelze snadno uložit.
-
Uložte každý objekt jako řetězec JSON v hash Redis.
INCR id:users HMSET users {id} '{"name":"Fred","age":25}'
To vám umožní trochu konsolidovat a použít pouze dva klíče místo spousty klíčů. Zjevnou nevýhodou je, že nemůžete nastavit TTL (a další věci) pro každý uživatelský objekt, protože je to pouze pole v hash Redis a ne plnohodnotný klíč Redis.
Výhody :Analýza JSON je rychlá, zvláště když potřebujete přistupovat k mnoha polím pro tento objekt najednou. Méně „znečišťování“ jmenného prostoru hlavního klíče. Nevýhody :Přibližně stejné využití paměti jako číslo 1, když máte hodně objektů. Pomalejší než #2, když potřebujete přístup pouze k jednomu poli. Pravděpodobně to není považováno za "dobrý postup."
-
Uložte každou vlastnost každého objektu do vyhrazeného klíče.
INCR id:users SET user:{id}:name "Fred" SET user:{id}:age 25 SADD users {id}
Podle článku výše je tato možnost téměř nikdy preferováno (pokud vlastnost objektu nemusí mít specifické TTL nebo něco podobného).
Výhody :Vlastnosti objektu jsou plnohodnotné klíče Redis, které nemusí být pro vaši aplikaci přehnané. Nevýhody :pomalé, využívá více paměti a není považováno za „nejlepší postup“. Hodně znečišťuje hlavní klíčový jmenný prostor.
Celkové shrnutí
Možnost 4 obecně není preferována. Možnosti 1 a 2 jsou velmi podobné a obě jsou docela běžné. Dávám přednost možnosti 1 (obecně řečeno), protože vám umožňuje ukládat složitější objekty (s více vrstvami vnoření atd.) Možnost 3 se používá, když vám to opravdu záleží o neznečišťování jmenného prostoru hlavního klíče (tj. nechcete, aby ve vaší databázi bylo hodně klíčů a nestarali jste se o věci jako TTL, sharding klíčů nebo cokoli jiného).
Pokud jsem zde něco popletl, zvažte zanechání komentáře a dovolte mi upravit odpověď, než budu hlasovat proti. Dík! :)