Redis possède des fonctions puissantes et des types de données riches. Quelle que soit la vitesse du système, il ne peut pas résister à des abus insensés. En désactivant certaines fonctions à haut risque et en suspendant les chaînes du développement, l'entreprise peut examiner les problèmes avec des idées concises et générales au lieu d'être liée à une certaine mise en œuvre.
Redis aura différentes stratégies de persistance et d'expulsion basées sur différentes utilisations. Par conséquent, avant d'utiliser et de demander un cluster Redis, veuillez préciser s'il est utilisé pour la mise en cache ou le stockage. Le cluster Redis dispose de deux modes : maître-esclave et cluster, qui ont tous deux leurs propres avantages et inconvénients. Les spécifications suivantes ne font pas de distinction entre les modes de cluster. Nous les expliquons en termes de scénarios d'utilisation et de restrictions opérationnelles.
Bien que Redis prenne en charge la persistance, le stockage de toutes les données dans Redis est très coûteux. Il est recommandé de charger les données chaudes (telles que les données avec un QPS supérieur à 5 000) dans Redis. Les données basse fréquence peuvent être stockées dans Mysql
et ElasticSearch
. Mysql
、 ElasticSearch中
。
不要将不相关的数据业务都放到一个 Redis
中。一方面避免业务相互影响,另一方面避免单实例膨胀,并能在故障时降低影响面,快速恢复。
由于 Redis
是单线程服务,消息过大会阻塞并拖慢其他操作。保持消息内容在 1KB 以下是个好的习惯。严禁超过 50KB 的单条记录。消息过大还会引起网络带宽的高占用,持久化到磁盘时的 IO 问题。
连接的频繁创建和销毁,会浪费大量的系统资源,极限情况会造成宿主机当机。请确保使用了正确的 Redis
客户端连接池配置。
作为缓存使用的 Key
,必须要设置失效时间。失效时间并不是越长越好,请根据业务性质进行设置。注意,失效时间的单位有的是秒,有的是毫秒,这个很多同学不注意容易搞错。
缓存应该仅作缓存用,去掉后业务逻辑不应发生改变,万不可切入到业务里。第一,缓存的高可用会影响业务;第二,产生深耦合会发生无法预料的效果;第三,会对维护行产生肤效果。
小应用就算了
如单 redis
集群并不能为你的数据服务,不要着急扩大你的 redis
集群(包括 M/S 和 Cluster),集群越大,在状态同步和持久化方面的性能越差。 优先使用客户端 hash
进行集群拆分。如:根据用户 id 分 10 个集群,用户尾号为 0 的落在第一个集群。
Keys
命令效率极低,属于 O(N)
操作,会阻塞其他正常命令,在 cluster
上,会是灾难性的操作。严禁使用,DBA
应该 rename
此命令,从根源禁用。
flush
命令会清空所有数据,属于高危操作。严禁使用,DBA
应该 rename
此命令,从根源禁用,仅 DBA
可操作。
如没有非常特殊的需求,严禁将 Redis
当作消息队列使用。Redis
当作消息队列使用,会有容量、网络、效率、功能方面的多种问题。如需要消息队列,可使用高吞吐的 Kafka
或者高可靠的 RocketMQ
。
redis
那么快,慢查询除了网络延迟,就属于这些批量操作函数。大多数线上问题都是由于这些函数引起。
ZRANGE
、 ZRANGEBYSCORE
等多个操作 ZSET
的函数,严禁使用 ZRANGE myzset 0 -1
等这种不设置范围的操作。请指定范围,如 ZRANGE myzset 0 100
。如不确定长度,可使用 ZCARD
判断长度
HGETALL
会取出相关 HASH
的所有数据,如果数据条数过大,同样会引起阻塞,请确保业务可控。如不确定长度,可使用 HLEN
先判断长度
Redis Cluster
的 MGET
操作,会到各分片取数据聚合,相比传统的 M/S
架构,性能会下降很多,请提前压测和评估
select
函数用来切换 database
,对于使用方来说,这是很容易发生问题的地方,cluster
模式也不支持多个 database
Redis
. D'une part, cela évite l'impact commercial mutuel, d'autre part, cela évite l'expansion d'une seule instance, et peut réduire l'impact et récupérer rapidement en cas de panne. 🎜🎜Taille limite des messages🎜🎜Étant donné que Redis
est un service à thread unique, les messages excessifs bloqueront et ralentiront les autres opérations. C'est une bonne pratique de conserver le contenu des messages à moins de 1 Ko. Les enregistrements uniques dépassant 50 Ko sont strictement interdits. Des messages trop volumineux entraîneront également une utilisation élevée de la bande passante du réseau et des problèmes d'E/S lors de la persistance sur le disque. 🎜🎜Limitation du nombre de connexions🎜🎜La création et la destruction fréquentes de connexions gaspilleront beaucoup de ressources système et, dans les cas extrêmes, entraîneront un crash de l'hôte. Veuillez vous assurer que vous utilisez la configuration correcte du pool de connexions client Redis
. 🎜🎜Cache Key définit le délai d'expiration🎜🎜En tant que Clé
utilisée comme cache, le délai d'expiration doit être défini. Plus le délai d'expiration est long, mieux c'est. Veuillez le définir en fonction de la nature de votre entreprise. Notez que certaines unités du temps d'échec sont des secondes et d'autres des millisecondes. De nombreux étudiants peuvent facilement commettre des erreurs s'ils n'y prêtent pas attention. 🎜🎜Le cache ne peut pas avoir d'états intermédiaires🎜🎜Le cache doit être utilisé uniquement pour la mise en cache. La logique métier ne doit pas changer après sa suppression et elle ne doit pas être intégrée à l'entreprise. Premièrement, la haute disponibilité du cache affectera l’entreprise ; deuxièmement, le couplage profond aura des effets imprévisibles ; troisièmement, il aura un effet cutané sur la ligne de maintenance ; 🎜🎜La méthode d'expansion préférée est le hachage côté client🎜🎜🎜Oubliez les petites applications🎜🎜🎜Un seul cluster redis
ne peut pas servir vos données, alors ne vous précipitez pas pour étendre votre redis Cluster (y compris M/S et Cluster), plus le cluster est grand, plus les performances en matière de synchronisation et de persistance des états sont mauvaises. Donnez la priorité à l'utilisation du <code>hash
client pour le fractionnement du cluster. Par exemple : 10 clusters sont divisés en fonction de l'ID utilisateur, et l'utilisateur dont le dernier numéro est 0 tombe dans le premier cluster. 🎜🎜Restrictions de fonctionnement🎜🎜Il est strictement interdit d'utiliser Keys🎜🎜La commande Keys
est extrêmement inefficace et appartient à l'opération O(N)
, qui bloquera d'autres commandes normales. Dans cluster, ce serait une opération désastreuse. L'utilisation est strictement interdite, <code>DBA
doit renommer
cette commande, désactivée depuis la source. 🎜🎜Il est strictement interdit d'utiliser Flush🎜🎜La commande flush
effacera toutes les données et constitue une opération à haut risque. L'utilisation est strictement interdite, DBA
doit renommer
cette commande, désactivée depuis la source, seul DBA
peut fonctionner. 🎜🎜Il est strictement interdit de l'utiliser comme file d'attente de messages🎜🎜S'il n'y a pas de besoins très particuliers, il est strictement interdit d'utiliser Redis
comme file d'attente de messages. Lorsque Redis
est utilisé comme file d'attente de messages, divers problèmes se poseront en termes de capacité, de réseau, d'efficacité et de fonctionnalité. Si vous avez besoin d'une file d'attente de messages, vous pouvez utiliser le Kafka
à haut débit ou le RocketMQ
très fiable. 🎜🎜Les opérations par lots sans définir de plage sont strictement interdites🎜🎜redis
Les requêtes donc rapides et lentes, à l'exception des retards du réseau, appartiennent à ces fonctions d'opération par lots. La plupart des problèmes en ligne sont causés par ces fonctions. 🎜ZRANGE
, ZRANGEBYSCORE
et autres opérations fonction ZSET
, il est strictement interdit d'utiliser ZRANGE myzset 0 -1
et d'autres opérations qui ne définissent pas de plage. Veuillez spécifier la plage, telle que ZRANGE myzset 0 100
. Si vous n'êtes pas sûr de la longueur, vous pouvez utiliser ZCARD
pour déterminer la longueur🎜HGETALL
supprimera les données pertinentes dans HASH
, si le nombre d'éléments de données est trop grand, cela entraînera également une congestion. Veuillez vous assurer que l'entreprise est contrôlable. Si vous n'êtes pas sûr de la longueur, vous pouvez d'abord utiliser HLEN
pour déterminer la longueur🎜Redis Cluster. L'opération <code>MGET
collectera les données de chaque fragment et les agrégera. Par rapport à l'architecture M/S
traditionnelle, les performances diminueront considérablement. tester et évaluer à l'avance🎜select La fonction code> est utilisée pour changer de <code>base de données
, pour les utilisateurs, c'est là que des problèmes peuvent facilement survenir, le mode cluster
ne prend pas en charge plusieurs base de données
, et n'a aucun avantage, il est donc désactivé. 🎜redis
lui-même est déjà très rapide. S'il n'y a pas de besoin majeur, il est recommandé d'intercepter les exceptions et de revenir en arrière. Peu de gens le font. redis
本身已经很快了,如无大的必要,建议捕获异常进行回滚,不要使用事务函数,很少有人这么干。
lua
脚本虽然能做很多看起来很 cool
的事情,但它就像是 SQL
的存储过程,会引入性能和一些难以维护的问题,禁用。
monitor
函数可以快速看到当前 redis
正在执行的数据流,但是当心,高峰期长时间阻塞在 monitor
命令上,会严重影响 redis
的性能。此命令不禁止使用,但使用一定要特别特别注意。
Redis
的 Key
一定要规范,这样在遇到问题时,能够进行方便的定位。Redis
属于无 scheme
的 KV
数据库,所以,我们靠约定来建立其 scheme
语义。其好处:
能够根据某类 key 进行数据清理
能够根据某类 key 进行数据更新
能够方面了解到某类 key 的归属方和应用场景
为统一化、平台化做准备,减少技术变更
一般,一个 key
Interdire la surveillance à long termeBien que le script
lua
puisse faire beaucoup de choses qui semblentcool
, c'est comme le stockage deSQL
Le processus, qui introduira des performances et quelques problèmes de maintenance difficiles, est désactivé.
LaLa fonction
monitor
permet de voir rapidement le flux de données en cours d'exécution parredis
, mais attention, il sera bloqué dansmonitor affectera sérieusement les performances de <code>redis
. Il n'est pas interdit d'utiliser cette commande, mais des précautions particulières doivent être prises lors de son utilisation.Spécification de la clé
Clé
de Redis
doit être standardisée afin que lorsque des problèmes sont rencontrés, ils puissent être facilement localisés. Redis
appartient à la base de données KV
sans schéma
, nous nous appuyons donc sur la convention pour établir sa sémantique de schéma
. Ses avantages : 🎜clé
doit avoir les dimensions suivantes : entreprise, objectif clé, variables, etc. Chaque dimension est séparée par :. Voici des exemples de plusieurs clés : 🎜🎜🎜utilisateur:sexe. sexe de l'utilisateur 10002232🎜🎜🎜 🎜msg:achi 201712, classement du nombre de commentaires des utilisateurs🎜🎜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!