sql >> Databasteknik >  >> NoSQL >> Redis

Prestandajämförelse för att använda Redis-hashar kontra många nycklar

Välj hash över string har många fördelar och vissa nackdelar beroende på användningsfall. Om du ska välja hash är det bättre att designa ditt json-objekt som hashfält &värden som;

127.0.0.1:6379> hset user:1 ssn 10101010101 name john surname wick date 2020-02-02 location continental
(integer) 5
127.0.0.1:6379> hgetall user:1
 1) "ssn"
 2) "10101010101"
 3) "name"
 4) "john"
 5) "surname"
 6) "wick"
 7) "date"
 8) "2020-02-02"
 9) "location"
10) "continental"

Här är fördelarna med hash över strängar när du gör en ordentlig datamodellering.

  • På prestandasidan har de flesta kommandon för både strängar och hash samma komplexitet.
  • Komma åt/uppdatera/ta bort individuella json-fält på hashs enklare när det jämförs med strängarna. Du behöver inte hämta hela strängen, avkoda, göra ändringar och ställa in den igen. Du kan använda HDEL, HSET eller HGET för dessa operationer utan att få hela objektet.
  • Om storleken på ditt strängobjekt ökar kommer du att drabbas av nätverk och bandbredd när du överför(get/ställer in) hela objektet. Som det står i dokumentationen

RAM-minneshastighet och minnesbandbredd verkar mindre kritiska för global prestanda, särskilt för små objekt. För stora objekt (>10 KB) kan det dock bli märkbart.

  • Hashar är mer minnesvänliga än strängar om du gör ett bra riktmärke för att utforma din datastorlek. Som det står i dokumentationen och ett exempel på användningsfall av instagram engineering kan du få en stor fördel med den speciella kodningen.

Hashar, listor, uppsättningar som bara består av heltal och sorterade uppsättningar, när de är mindre än ett givet antal element, och upp till en maximal elementstorlek, kodas på ett mycket minneseffektivt sätt som använder upp till 10 gånger mindre minne (med 5 tid mindre minne som används är den genomsnittliga besparingen).

Å andra sidan, beroende på dina användningsfall;

  • ziplist kommer inte gratis, det är en avvägning mellan minne och cpu.
  • Du kan inte delvis förfalla hash-fält. Om du delar upp i flera strängar kan du EXPIRE dem, men i hash kan endast toppnivånyckeln förfalla med alla värden.



  1. Redis lua-skriptet fungerar inte

  2. Lagra flera versioner av data i Redis cache

  3. MongoDB - stängs av med kod:62

  4. Hur man exporterar MongoDB-frågeresultat till en CSV-fil