在不影响性能的情况下,怎么快速批量删除redis数据?
黄舟
黄舟 2017-04-21 11:15:52
0
4
756

业务场景:
redis数据切换到Oracle,取消持久化,redis只做缓存

具体需求:
从redis从库里获得了400w个无过期时间的hashkey,需要在主库中将其删除

矛盾点:
1.如果直接批量删除会导致redis拥塞,影响正常业务
2.如果每删除一个key,sleep50ms,不会影响业务,但是根据经验要跑两天

最终问题:
在不影响性能的情况下,怎么快速批量删除redis数据?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

répondre à tous(4)
Peter_Zhu

Redis supprime les clés très rapidement, même 4 millions de clés ne posent pas de problème. Je soupçonne que le goulot d'étranglement vient en fait du réseau.

Si vous supprimez les clés une par une, chaque fois que vous envoyez une commande, le client attendra une réponse de redis, ce qui gaspille beaucoup de bande passante réseau.

Vous pouvez essayer d'utiliser le pipeline/transactions. Sans saturer la bande passante du réseau côté redis, la commande est envoyée à la vitesse maximale puis exécutée en une seule fois.

Si cela ne fonctionne pas, vous pouvez écrire un script Lua pour identifier et supprimer les clés inutiles, et les envoyer à Redis pour exécution avec eval. Cela ne devrait pas bloquer le réseau.

Si cela affecte toujours l'entreprise. . La solution ultime consiste à créer un maître/esclave, à supprimer la clé sur l'esclave et à utiliser le maître pour gérer la requête. Après avoir supprimé la clé, promouvez l'esclave au rang de maître, puis transférez-lui la demande.

迷茫

Essayez la commande eval de redis.

Par exemple, supprimez toutes les CLÉS commençant par old-fashioned :

eval "redis.call('del', unpack(redis.call('keys','old-fashioned:*')))" 0

Si une seule suppression consomme beaucoup de performances, vous pouvez envisager de supprimer par lots.

伊谢尔伦

À mon humble avis, vous pouvez le supprimer à 2 heures du milieu de la nuit. Le délai le plus long est probablement de 1 minute. Il ne devrait pas y avoir beaucoup de gens qui l'utilisent à ce moment-là, à moins qu'il ne s'agisse d'un 24. Site Web à trafic horaire comme Baidu Taobao ! Pas besoin de me remercier, je m'appelle Lei Feng

巴扎黑
$ redis-cli --scan --pattern 'user:*' | xargs -L 1000 redis-cli del

à partir de Redis 3.4 :

$ redis-cli --scan --pattern 'user:*' | xargs -L 1000 redis-cli unlink
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!