Cet article vous présentera les lacunes des deux modes de persistance de Redis (RDB et AOF). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
[Recommandations associées : Tutoriel vidéo Redis]
Défauts du mode de persistance RDB
1. Description du problème :
200 canaux simultanés, simulant une écriture continue sur Redis. Après 4 heures, un grand nombre d'appels d'interface ont commencé à échouer :
{"data":{"sendResult":null},"base":{"returncode":"99999","returndesc":"系统异常:MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error."},"qrybase":{"total":0,"count":0,"start":0}}
Raison spécifique : Afin d'éviter que le processus principal suspende l'animation lorsque Redis enregistre les données dans le disque dur, il doit créer une copie. Le processus principal termine ensuite l'opération de sauvegarde des données sur le disque dur dans le processus Fork. Si le processus principal utilise 2,2 Go de mémoire, 2,2 Go supplémentaires sont nécessaires lors du Fork du processus enfant. À ce stade, la mémoire n'est pas suffisante, Fork échoue et les données sont également enregistrées.
3. Plan d'atténuation (ne peut pas fondamentalement résoudre le problème) :
3.1 Modifier l'élément de configuration stop-writes-on-bgsave-error no dans le fichier redis.conf (la valeur par défaut est oui), c'est-à-dire lorsqu'une erreur se produit lors de l'opération d'instantané bgsave, arrêtez d'écrire des données sur le disque. De cette manière, toute erreur d'écriture ultérieure échouera. Afin de ne pas affecter les opérations d'écriture ultérieures, la valeur de cet élément doit être. changé en méthode no3.2 Modifier les paramètres du noyau (3 ci-dessous)), mais nécessite les autorisations root :(1) 编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效 (2)sysctl vm.overcommit_memory=1 (3)echo 1 > /proc/sys/vm/overcommit_memory
2. Défauts du mode de persistance AOF
1. Description du problème 1 :Redis maître-esclave Tous les nœuds sont activés en mode AOF, avec 200 connexions simultanées, simulant une écriture continue sur Redis. Après 15 minutes, un grand nombre d'appels d'interface ont commencé à échouer et. le serveur virtuel Linux sur lequel se trouvait Redis était bloqué.
L'erreur d'interface est la suivante :{"data":null,"base":{"returndesc":"系统异常","returncode":"999999"},"qrybase":null} Biz(dubbo)接口报错如下: 2015-06-05 11:28:28.760 [DubboServerHandler-X.X.X.X:20882-thread-173] ERROR - error while validate jedis! redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out
Il ressort également du journal système que le temps de blocage des E/S dépasse 120 secondes et que la machine se bloque en raison du mécanisme de sécurité du système.
Résumé
Les résultats des tests prouvent que le mode AOF présente le défaut le plus évident, c'est-à-dire que les IO deviendront un goulot d'étranglement des performances lorsque la pression d'accès est élevée, entraînant une indisponibilité du service. 3. Solution d'atténuation (ne peut pas fondamentalement résoudre le problème) Modifiez /etc/sysctl.conf et ajoutez la configuration suivante :vm.dirty_background_ratio = 5 vm.dirty_ratio = 10
Vidéo de programmation
! !Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!