Maison  >  Article  >  base de données  >  Comment Redis garantit la cohérence des données

Comment Redis garantit la cohérence des données

(*-*)浩
(*-*)浩original
2019-11-28 09:56:2016121parcourir

Redis est désormais largement utilisé sur Internet. Son utilisation varie selon les entreprises. Cependant, il existe généralement des problèmes de cohérence du stockage et de la mise en cache des données. Voici quelques solutions matures et pratiques.

Comment Redis garantit la cohérence des données

Méthode 1 :

La base de données enregistre les données, Redis ne persiste pas Après le démarrage de Redis, le chargement des données à partir du la base de données n'est pas requise Les demandes de lecture qui nécessitent une forte cohérence et des performances en temps réel sont traitées par Redis. Les demandes de lecture qui nécessitent une forte cohérence et des performances en temps réel sont traitées par la base de données. Il existe deux méthodes de traitement pour les demandes d'écriture, qui sont traitées par. la base de données. (Apprentissage recommandé : Tutoriel vidéo Redis)

L'application écrit d'abord dans la base de données, puis met à jour redis

L'application écrit d'abord dans la base de données, et puis d'autres démons se synchronisent avec Redis

Avantage : le démarrage de Redis n'a pas besoin de gérer les incohérences entre les données Redis et la base de données

Inconvénient : le démarrage de Redis exerce beaucoup de pression de lecture sur la base de données

Méthode 2 :

La base de données et Redis gèrent respectivement différents types de données et les exigences de traitement de la base de données Données fortement cohérentes et en temps réel, telles que les données financières et les données de transaction ; qui ne nécessite pas une forte cohérence et des performances en temps réel, comme les publications les plus populaires du site Web

synchronisation des données Redis et MySQL, le niveau de code peut être à peu près le suivant Faire : Lire : Lire redis->Non , lisez mysql->Réécrivez les données mysql dans redis Écrivez : écrivez mysql->Succès, écrivez redis

La concurrence n'est pas élevée : Lisez : lisez redis- >Non, lisez mysql->Écrivez le données mysql vers redis, ou récupérez-les directement depuis redis s'il y en a ; écrivez : écrivez mysql->success, puis écrivez dans redis

Situation de concurrence élevée : read : Lire redis->Non, read mysql->Réécrivez les données MySQL dans redis, s'il y en a, récupérez-les directement depuis redis Écrivez : si elles sont asynchrones, écrivez-les d'abord dans le cache redis, puis renvoyez-les directement aux actions régulières ou spécifiques. enregistré sur MySQL, qui peut être mis à jour plusieurs fois et enregistré une fois

--Remarque : si vous écrivez Redis, vous devez utiliser des transactions Redis :

127.0.0.1:6379> WATCH id
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> INCR id
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 342183
127.0.0.1:6379>

Méthode 3 :

Utiliser le script lua : redis ne permet qu'un seul script de s'exécuter en même temps lors de l'utilisation de lua, ce qui est conforme à l'atomicité des transactions, mais un script lua ne peut pas être exécuté trop longtemps, sinon il bloquera

EVAL

La commande EVAL exécute et évalue les scripts Lua.

Syntaxe :

EVAL script numkeys key [key …] arg [arg …]
rrree

Un exemple vaut mille mots d'explication

script lua脚本内容 注意的是脚本不应该是Lua函数。
numkeys 表示指定键名参数的个数。
key [key ...] 表示脚本对应的key值列表 在脚本中可以使用KEYS[1] KEYS[2] KEYS[3]KEYS[n] n从1开始 。
arg [arg ...] 命名行中传递的参数列表 在脚本中可以使用ARGV[1] ARGV[2] ARGV[3]ARGV[n] n从1开始 。

L'exécution du script ci-dessus renvoie

eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 id name 3 mytest

Pour plus d'articles techniques liés à Redis, veuillez visiter la colonne Tutoriel de démarrage de Redis pour apprendre !

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn