Heim  >  Artikel  >  Datenbank  >  Was sind die Redis-Spezifikationen?

Was sind die Redis-Spezifikationen?

王林
王林nach vorne
2023-06-03 14:19:491234Durchsuche

redis verfügt über leistungsstarke Funktionen und umfangreiche Datentypen. Egal wie schnell das System ist, es kann verrücktem Missbrauch nicht standhalten. Durch die Deaktivierung einiger risikoreicher Funktionen und das Aufhängen der Fesseln der Entwicklung kann das Unternehmen Probleme mit prägnanten und allgemeinen Ideen betrachten, anstatt an eine bestimmte Implementierung gebunden zu sein.

Redis verfügt über unterschiedliche Persistenzstrategien und Räumungsstrategien basierend auf unterschiedlichen Verwendungszwecken. Bitte klären Sie daher vor der Verwendung und Beantragung eines Redis-Clusters, ob dieser zum Caching oder zur Speicherung verwendet wird. Der Redis-Cluster verfügt über zwei Modi: Master-Slave und Cluster, die beide ihre eigenen Vor- und Nachteile haben. Die folgenden Spezifikationen unterscheiden nicht zwischen Cluster-Modi. Wir erläutern sie im Hinblick auf Nutzungsszenarien und Betriebseinschränkungen.

Nutzungsspezifikationen

Unterscheidung heißer und kalter Daten

Obwohl Redis Persistenz unterstützt, ist das Speichern aller Daten in Redis sehr teuer. Es wird empfohlen, heiße Daten (z. B. Daten mit QPS über 5 KB) in Redis zu laden. Niederfrequenzdaten können in Mysql und ElasticSearch gespeichert werden. 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

Geschäftsdatentrennung#🎜🎜##🎜🎜#Fügen Sie nicht alle irrelevanten Datendienste in einem Redis zusammen. Einerseits werden gegenseitige geschäftliche Auswirkungen vermieden, andererseits wird die Erweiterung einer einzelnen Instanz vermieden und die Auswirkungen können verringert werden, sodass im Falle eines Ausfalls eine schnelle Wiederherstellung möglich ist. #🎜🎜##🎜🎜#Grenze für die Nachrichtengröße#🎜🎜##🎜🎜#Da Redis ein Single-Threaded-Dienst ist, werden zu viele Nachrichten andere Vorgänge blockieren und verlangsamen. Es empfiehlt sich, den Nachrichteninhalt unter 1 KB zu halten. Einzelne Datensätze, die 50 KB überschreiten, sind strengstens untersagt. Zu große Nachrichten verursachen außerdem eine hohe Auslastung der Netzwerkbandbreite und E/A-Probleme beim Speichern auf der Festplatte. #🎜🎜##🎜🎜#Verbindungslimit#🎜🎜##🎜🎜# Das häufige Erstellen und Zerstören von Verbindungen verschwendet viele Systemressourcen und führt im Extremfall zum Absturz des Hosts. Bitte stellen Sie sicher, dass Sie die richtige Konfiguration des Redis-Client-Verbindungspools verwenden. #🎜🎜##🎜🎜#Cache-Schlüssel Ablaufzeit festlegen #🎜🎜##🎜🎜#Für Schlüssel, der als Cache verwendet wird, muss die Ablaufzeit festgelegt werden. Je länger die Ablaufzeit ist, desto besser legen Sie sie entsprechend der Art Ihres Unternehmens fest. Beachten Sie, dass einige Einheiten der Ausfallzeit Sekunden und andere Millisekunden sind. Viele Schüler können leicht Fehler machen, wenn sie nicht aufpassen. #🎜🎜##🎜🎜#Der Cache darf keine Zwischenzustände haben#🎜🎜##🎜🎜#Der Cache sollte nur zum Caching verwendet werden, nachdem er entfernt wurde, und er darf nicht in das Geschäft eingeschnitten werden . Erstens wirkt sich die hohe Verfügbarkeit des Caches auf das Geschäft aus. Zweitens wird die tiefe Kopplung unvorhersehbare Auswirkungen haben. Drittens wird sie einen Skin-Effekt auf die Wartungszeile haben. #🎜🎜##🎜🎜#Erweiterungsmethode bevorzugter Client-Hash#🎜🎜##🎜🎜##🎜🎜#Vergessen Sie kleine Anwendungen#🎜🎜##🎜🎜##🎜🎜#Rudanredis Der Code > Der Cluster kann Ihre Daten nicht überstürzen (einschließlich M/S und Cluster). Je größer der Cluster, desto schlechter ist die Leistung bei der Statussynchronisierung und -persistenz. Priorisieren Sie die Verwendung von Client-<code>Hash für die Clusteraufteilung. Beispiel: 10 Cluster werden nach Benutzer-ID unterteilt, und der Benutzer, dessen letzte Zahl 0 ist, fällt in den ersten Cluster. #🎜🎜##🎜🎜#Betriebseinschränkungen#🎜🎜##🎜🎜#Die Verwendung von Schlüsseln ist strengstens untersagt.#🎜🎜##🎜🎜#Schlüssel Die Befehlseffizienz ist äußerst gering und beträgt O(N) -Vorgang blockiert andere normale Befehle und führt zu einer katastrophalen Operation für cluster. Die Verwendung ist strengstens untersagt. DBA sollte diesen Befehl umbenennen und ihn in der Quelle deaktivieren. #🎜🎜##🎜🎜#Es ist strengstens verboten, Flush zu verwenden#🎜🎜##🎜🎜# Der Befehl flush löscht alle Daten und ist ein Vorgang mit hohem Risiko. Die Verwendung ist strengstens untersagt. DBA sollte diesen Befehl umbenennen, in der Quelle deaktiviert, nur DBA kann funktionieren. #🎜🎜##🎜🎜#Es ist strengstens verboten, es als Nachrichtenwarteschlange zu verwenden#🎜🎜##🎜🎜#Wenn keine besonderen Anforderungen vorliegen, ist es strengstens verboten, Redis als zu verwenden eine Nachrichtenwarteschlange. Wenn Redis als Nachrichtenwarteschlange verwendet wird, treten verschiedene Probleme hinsichtlich Kapazität, Netzwerk, Effizienz und Funktionalität auf. Wenn Sie eine Nachrichtenwarteschlange benötigen, können Sie den Hochdurchsatz Kafka oder den äußerst zuverlässigen RocketMQ verwenden. #🎜🎜##🎜🎜#Batch-Operationen ohne Festlegung eines Bereichs sind strengstens verboten.#🎜🎜##🎜🎜#redis Daher gehören schnelle und langsame Abfragen, mit Ausnahme von Netzwerkverzögerungen, zu diesen Batch-Operationsfunktionen . Die meisten Online-Probleme werden durch diese Funktionen verursacht. #🎜🎜#
1. [zset] Operationen ohne Gültigkeitsbereich auf zset sind strengstens verboten
#🎜🎜#ZRANGE, ZRANGEBYSCORE und andere Operationen ZSET-Funktion verwenden, ist die Verwendung von ZRANGE myzset 0 -1 und anderen Vorgängen, die keinen Bereich festlegen, strengstens untersagt. Bitte geben Sie den Bereich an, z. B. ZRANGE myzset 0 100. Wenn Sie sich über die Länge nicht sicher sind, können Sie ZCARD verwenden, um die Länge zu bestimmen#🎜🎜#
2 Es ist strengstens verboten, HGETALL für Schlüssel mit großem Datenvolumen zu verwendenh5>#🎜🎜#HGETALL ruft alle Daten im Zusammenhang mit <code>HASH ab. Wenn die Anzahl der Datenelemente zu groß ist, führt dies ebenfalls zu einer Überlastung des Unternehmens ist kontrollierbar. Wenn Sie sich über die Länge nicht sicher sind, können Sie zuerst HLEN verwenden, um die Länge zu bestimmen#🎜🎜#
3 [key] mget operation of Redis Cluster Cluster
#🎜🎜 #Redis ClusterMGET-Operation von /code> sammelt Daten von jedem Shard. Im Vergleich zur herkömmlichen M/S-Architektur wird die Leistung stark sinken . Bitte testen und bewerten Sie es im Voraus function#🎜🎜##🎜🎜#select Die Funktion wird zum Wechseln der Datenbank verwendet. Für Benutzer kann es hier leicht zu Problemen kommen. Der Code>-Modus unterstützt nicht mehrere Datenbanken, ohne jeglichen Nutzen, deaktiviert. #🎜🎜#

Transaktionen deaktivieren

redis selbst ist bereits sehr schnell. Wenn kein ernsthafter Bedarf besteht, wird empfohlen, keine Transaktionsfunktionen abzufangen. Nur wenige Menschen tun dies.

redis 本身已经很快了,如无大的必要,建议捕获异常进行回滚,不要使用事务函数,很少有人这么干。

禁用 lua 脚本扩展

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

禁止长时间 monitor

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

Key 规范

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

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

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

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

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

一般,一个 keyLua-Skripterweiterung deaktivieren

Das lua-Skript kann zwar viele Dinge tun, die cool aussehen, aber es wird gespeichert Prozeduren wie SQL führen zu Leistungsproblemen und einigen schwierigen Wartungsproblemen und sollten deaktiviert werden.

Langzeitüberwachung verbieten
Mit der Funktion monitor können Sie schnell den Datenfluss erkennen, der derzeit von redis ausgeführt wird. Aber seien Sie vorsichtig: Wenn Sie den Befehl monitor für längere Zeit in Spitzenzeiten blockieren, wird die Leistung von redis ernsthaft beeinträchtigt. Die Verwendung dieses Befehls ist nicht verboten, bei der Verwendung ist jedoch besondere Vorsicht geboten.

Schlüsselspezifikation

Rediss Schlüssel muss standardisiert sein, damit bei auftretenden Problemen diese leicht lokalisiert werden können . Redis gehört zur KV-Datenbank ohne scheme, daher verlassen wir uns auf Konventionen, um seine scheme-Semantik festzulegen. Seine Vorteile:
  1. #🎜🎜# kann Daten basierend auf einem bestimmten Schlüsseltyp bereinigen #🎜🎜#
  2. #🎜🎜 # kann Daten basierend auf einem bestimmten Schlüsseltyp aktualisieren#🎜🎜#
  3. #🎜🎜#In der Lage sein, die Besitz- und Anwendungsszenarien eines bestimmten Schlüsseltyps zu verstehen#🎜🎜#
  4. #🎜🎜# Bereiten Sie sich auf die Vereinheitlichung und Plattformisierung vor und reduzieren Sie technische Änderungen#🎜🎜#
#🎜🎜#Im Allgemeinen muss ein Schlüssel die folgenden Abmessungen haben: Geschäft, Hauptzweck, Variablen usw., jede Dimension wird durch getrennt: Im Folgenden sind Beispiele für mehrere Schlüssel aufgeführt: #🎜🎜##🎜 🎜#msg:achi 201712’s Ranking der Anzahl der Benutzerkommentare#🎜🎜##🎜🎜#

Das obige ist der detaillierte Inhalt vonWas sind die Redis-Spezifikationen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen