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.
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. 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
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. #🎜🎜#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#🎜🎜#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#🎜🎜#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. #🎜🎜#redis
selbst ist bereits sehr schnell. Wenn kein ernsthafter Bedarf besteht, wird empfohlen, keine Transaktionsfunktionen abzufangen. Nur wenige Menschen tun dies. redis
本身已经很快了,如无大的必要,建议捕获异常进行回滚,不要使用事务函数,很少有人这么干。
lua
脚本虽然能做很多看起来很 cool
的事情,但它就像是 SQL
的存储过程,会引入性能和一些难以维护的问题,禁用。
monitor
函数可以快速看到当前 redis
正在执行的数据流,但是当心,高峰期长时间阻塞在 monitor
命令上,会严重影响 redis
的性能。此命令不禁止使用,但使用一定要特别特别注意。
Redis
的 Key
一定要规范,这样在遇到问题时,能够进行方便的定位。Redis
属于无 scheme
的 KV
数据库,所以,我们靠约定来建立其 scheme
语义。其好处:
能够根据某类 key 进行数据清理
能够根据某类 key 进行数据更新
能够方面了解到某类 key 的归属方和应用场景
为统一化、平台化做准备,减少技术变更
一般,一个 key
Lua-Skripterweiterung deaktivieren
Daslua
-Skript kann zwar viele Dinge tun, diecool
aussehen, aber es wird gespeichert Prozeduren wieSQL
führen zu Leistungsproblemen und einigen schwierigen Wartungsproblemen und sollten deaktiviert werden. Langzeitüberwachung verbieten
Mit der Funktionmonitor
können Sie schnell den Datenfluss erkennen, der derzeit vonredis
ausgeführt wird. Aber seien Sie vorsichtig: Wenn Sie den Befehlmonitor
für längere Zeit in Spitzenzeiten blockieren, wird die Leistung vonredis
ernsthaft beeinträchtigt. Die Verwendung dieses Befehls ist nicht verboten, bei der Verwendung ist jedoch besondere Vorsicht geboten.Schlüsselspezifikation
Redis
sSchlüssel
muss standardisiert sein, damit bei auftretenden Problemen diese leicht lokalisiert werden können .Redis
gehört zurKV
-Datenbank ohnescheme
, daher verlassen wir uns auf Konventionen, um seinescheme
-Semantik festzulegen. Seine Vorteile:
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!