2017-09-25 2 views
0

Scénario: lorsque j'exécute un test, s'il échoue, stocke l'horodatage et la valeur d'échec dans redis et récupère les trois derniers horodatages et les valeurs du même test si tous échouent, puis envoie un Email au chef de projet.Redis Type de données pour stocker les mêmes valeurs avec différents scores

Je pensais hors ajouter des scores à Zset trié dans Redis:

zadd Health:TestName timestamp1 "Fail" 
zadd Health:TestName timestamp2 "Success" 
zadd Health:TestName timestamp3 "Fail" 
zadd Health:TestName timestamp4 "Fail" 
zadd Health:TestName timestamp5 "Fail" 

Donc, si je lance le test TestName maintenant et si elle échoue, I get last three timestamps and values and check if all are Fail. Si tous échouent, envoyez un e-mail. Mais Zadd ne me permet pas d'ajouter la même valeur pour différents scores. Quel pourrait être l'autre moyen de stocker ces données.

Remarque. Je dois utiliser redis seulement.

Répondre

1

Le « truc » est de rendre les membres uniques, et la façon la plus simple est de concaténer le résultat et l'horodatage, i.e. .:

zadd Health:TestName timestamp1 "Fail:timestamp1" 
zadd Health:TestName timestamp2 "Success:timestamp2" 
zadd Health:TestName timestamp3 "Fail:timestamp3" 
zadd Health:TestName timestamp4 "Fail:timestamp4" 
zadd Health:TestName timestamp5 "Fail:timestamp5" 

Puis, lors de la récupération des membres, ignorez simplement le suffixe. Conseil: pour économiser de la RAM, passez à l'utilisation de chaînes courtes. Dans votre cas, au lieu de "Fail" et "Success", utilisez simplement 0 et 1 (ou "F" et "S" ...), économisant ainsi 9 octets pour chaque membre. Vous pouvez également supprimer le signe deux-points (":") lors de la concaténation pour un octet enregistré supplémentaire, à savoir Ftimestamp1, Stimestamp2 et ainsi de suite.