Maison  >  Article  >  base de données  >  Quelles sont les spécifications Redis ?

Quelles sont les spécifications Redis ?

王林
王林avant
2023-06-03 14:19:491234parcourir

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.

Spécifications d'utilisation

Distinction des données chaudes et froides

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. MysqlElasticSearch中

业务数据分离

不要将不相关的数据业务都放到一个 Redis中。一方面避免业务相互影响,另一方面避免单实例膨胀,并能在故障时降低影响面,快速恢复。

消息大小限制

由于 Redis 是单线程服务,消息过大会阻塞并拖慢其他操作。保持消息内容在 1KB 以下是个好的习惯。严禁超过 50KB 的单条记录。消息过大还会引起网络带宽的高占用,持久化到磁盘时的 IO 问题。

连接数限制

连接的频繁创建和销毁,会浪费大量的系统资源,极限情况会造成宿主机当机。请确保使用了正确的 Redis 客户端连接池配置。

缓存 Key 设置失效时间

作为缓存使用的 Key,必须要设置失效时间。失效时间并不是越长越好,请根据业务性质进行设置。注意,失效时间的单位有的是秒,有的是毫秒,这个很多同学不注意容易搞错。

缓存不能有中间态

缓存应该仅作缓存用,去掉后业务逻辑不应发生改变,万不可切入到业务里。第一,缓存的高可用会影响业务;第二,产生深耦合会发生无法预料的效果;第三,会对维护行产生肤效果。

扩展方式首选客户端 hash

小应用就算了

如单 redis 集群并不能为你的数据服务,不要着急扩大你的 redis 集群(包括 M/S 和 Cluster),集群越大,在状态同步和持久化方面的性能越差。 优先使用客户端 hash 进行集群拆分。如:根据用户 id 分 10 个集群,用户尾号为 0 的落在第一个集群。

操作限制

严禁使用 Keys

Keys 命令效率极低,属于 O(N)操作,会阻塞其他正常命令,在 cluster 上,会是灾难性的操作。严禁使用,DBA 应该 rename 此命令,从根源禁用。

严禁使用 Flush

flush 命令会清空所有数据,属于高危操作。严禁使用,DBA 应该 rename 此命令,从根源禁用,仅 DBA 可操作。

严禁作为消息队列使用

如没有非常特殊的需求,严禁将 Redis 当作消息队列使用。Redis 当作消息队列使用,会有容量、网络、效率、功能方面的多种问题。如需要消息队列,可使用高吞吐的 Kafka 或者高可靠的 RocketMQ

严禁不设置范围的批量操作

redis 那么快,慢查询除了网络延迟,就属于这些批量操作函数。大多数线上问题都是由于这些函数引起。

1、[zset] 严禁对 zset 的不设范围操作

ZRANGEZRANGEBYSCORE等多个操作 ZSET 的函数,严禁使用 ZRANGE myzset 0 -1 等这种不设置范围的操作。请指定范围,如 ZRANGE myzset 0 100。如不确定长度,可使用 ZCARD 判断长度

2、[hash] 严禁对大数据量 Key 使用 HGETALL

HGETALL会取出相关 HASH 的所有数据,如果数据条数过大,同样会引起阻塞,请确保业务可控。如不确定长度,可使用 HLEN 先判断长度

3、[key] Redis Cluster 集群的 mget 操作

Redis ClusterMGET 操作,会到各分片取数据聚合,相比传统的 M/S架构,性能会下降很多,请提前压测和评估

4、[其他] 严禁使用 sunion, sinter, sdiff等一些聚合操作

禁用 select 函数

select函数用来切换 database,对于使用方来说,这是很容易发生问题的地方,cluster 模式也不支持多个 database

Séparation des données d'entreprise🎜🎜Ne regroupez pas tous les services de données non pertinents dans un seul 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. 🎜
1. [zset] Les opérations non ciblées sur zset sont strictement interdites
🎜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🎜
2 [hash] Il est strictement interdit d'utiliser HGETALL
pour les clés à gros volume de données🎜. 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🎜
3 [clé] opération mget du cluster Redis Cluster
🎜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🎜
4. [Autres] Il est strictement interdit d'utiliser certaines opérations d'agrégation telles que sunion, sinter, sdiff etc.
🎜Désactivez la fonction de sélection🎜🎜Le 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é. 🎜

Désactiver les transactions

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 脚本扩展

lua 脚本虽然能做很多看起来很 cool 的事情,但它就像是 SQL 的存储过程,会引入性能和一些难以维护的问题,禁用。

禁止长时间 monitor

monitor函数可以快速看到当前 redis 正在执行的数据流,但是当心,高峰期长时间阻塞在 monitor 命令上,会严重影响 redis 的性能。此命令不禁止使用,但使用一定要特别特别注意。

Key 规范

RedisKey 一定要规范,这样在遇到问题时,能够进行方便的定位。Redis 属于无 schemeKV 数据库,所以,我们靠约定来建立其 scheme 语义。其好处:

  1. 能够根据某类 key 进行数据清理

  2. 能够根据某类 key 进行数据更新

  3. 能够方面了解到某类 key 的归属方和应用场景

  4. 为统一化、平台化做准备,减少技术变更

一般,一个 key

Désactiver l'extension du script Lua

Bien que le script lua puisse faire beaucoup de choses qui semblent cool, c'est comme le stockage de SQL Le processus, qui introduira des performances et quelques problèmes de maintenance difficiles, est désactivé.

Interdire la surveillance à long terme

La fonction monitor permet de voir rapidement le flux de données en cours d'exécution par redis, mais attention, il sera bloqué dans monitor 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é

La 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 : 🎜
  1. 🎜Peut nettoyer les données en fonction d'un certain type de clé🎜
  2. 🎜Peut mettre à jour les données en fonction d'un certain type de clé🎜
  3. 🎜Être capable de comprendre les scénarios de propriété et d'application de certains types de clés🎜
  4. 🎜Préparer l'unification et la plateforme, et réduire les changements techniques🎜
🎜Généralement, une 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer