Redis 225 ms Récupération de la valeur de hachage

Je suis nouveau à Redis, et je ne sais pas pourquoi cette requête prendrait tellement de time. C'est une string de 7 Mo essentiellement d'un object JSON. J'ai utilisé HGet key data et la durée moyenne est de 225 millisecondes. C'est en fait plus lent que le server SQL dans le même environnement virtualisé. Ils ont les mêmes ressources allouées.

La latence embeddede dans l'environnement virtualisé n'est que de l'ordre de 9000 micro-secondes.

Je n'arrive même pas à comprendre comment quelque chose de complètement mis en cache en memory prendrait plus de time que de récupérer les mêmes données en sql. Le server redis prend environ deux fois plus de time. Voici un exemple de la string ci-dessous.

[ {"name":"Christopher", "advocate": "John"}, {"name": "Jane", "advocate": "John"}, etc..]

Le sql est juste une table de la même information exacte.

 | name | advocate | | ---------- | -------- | | Christopher | John | | Jane | John | 

Y a-t-il quelque chose qui me manque pour des objects plus gros dans Hash , qui améliorerait les performances? Je ne peux pas justifier à quiconque d'utiliser Redis, si la même requête est plus lente en memory que SQL. Je comprends une fois que je commence à augmenter la complexité de la jointure en sql, je pourrais voir plus d'importance. Mais je pense juste qu'il y a plus que je pourrais manquer à Redis.

Je peux fournir plus de détails si vous en avez besoin.

Ce n'est pas si surprenant.

SQL Server utilise TDS pour renvoyer datatables. Ce protocole est conçu pour être efficace pour renvoyer des données tabulaires. Il ne répète pas les noms de champ pour chaque ligne – ce qui se passe dans votre object JSON. Ma conjecture est que la représentation de JSON est réellement plus grande que la représentation de TDS. Parce que ce cas d'utilisation est limité par la bande passante du réseau (plus que la latence), Redis semble être plus lent.

Notez que Redis n'est pas spécialement optimisé pour stocker et renvoyer des objects volumineux de toute façon.

7 Mo pour 225 ms représentent 31 Mo / s. Cela dépend évidemment de la taille de vos pipes, mais cela ne semble pas si mal pour un environnement virtualisé.

Utilisez msgpack pour augmenter les performances. Lien de reference sur les benchmarks de performance – https://jsperf.com/msgpack-vs-json-perf/3