15 Tipps für den Einstieg in Redis
1. Einführung in Redis
REmote DIctionary Server (Redis) ist ein von Salvatore Sanfilippo geschriebenes Schlüsselwertspeichersystem . Redis ist eine Open Source-Lösung, die in der ANSI-C-Sprache geschrieben ist, dem BSD-Protokoll entspricht, das Netzwerk unterstützt, speicherbasiert oder persistent sein kann, eine Protokolltyp-Schlüsselwertdatenbank ist und APIs in mehreren Sprachen bereitstellt. Er wird oft als Datenstrukturserver bezeichnet , da der Wert (Wert) ein String (String), ein Hash (Map), eine Liste (Liste), eine Sammlung (Sets) und eine geordnete Sammlung (sortierte Sets) und andere Typen sein kann.
Jeder weiß, dass Redis eine Datenbank ohne SQL ist, die auf Schlüsselwerten basiert. Lassen Sie uns daher zunächst etwas über schlüsselbezogene Wissenspunkte lernen.
1. Jede Binärsequenz kann als Schlüssel verwendet werden.
2. Redis verfügt über einheitliche Regeln zum Entwerfen von Schlüsseln
. 3. Die maximal zulässige Länge für Schlüsselwerte beträgt 512 MB.
2. Unterstützte Sprachen
ActionScript Bash CC# C++ Clojure Common LispCrystal D Dart Elixir Emacs Lisp Erlang Fancy Gawk GNU Prolog Go Haskell Haxe Io Java Javascript Julia Lua Matlab Mruby Nim Node.js Objective-C OCaml Pascal Perl PHP Pure Data Python R Racket Rebol Ruby Rust Scala Scheme Smalltalk Swift Tcl VB VCL
3. Was sind die Anwendungsszenarien von Redis?
1. Am häufigsten wird der Sitzungscache verwendet.
2. Nachrichtenwarteschlange, z. B. Zahlung
. 3. Aktivitätsbestenliste oder -zählung
. 4. Veröffentlichen und Abonnieren von Nachrichten (Nachrichtenbenachrichtigungen)
. 5. Warenlisten, Kommentarlisten usw.
Erweiterung: 16 Hauptanwendungsszenarien von Redis
4. Redis-Installation
Eine Einführung in die Redis-Installation und verwandte Wissenspunkte finden Sie unter Nosql Database Service redis
Die ungefähren Schritte zur Installation sind wie folgt:
Redis wurde in der Sprache C entwickelt. Für die Installation von Redis ist eine Kompilierungsumgebung für die Sprache C erforderlich.
Wenn Sie nicht über gcc verfügen, müssen Sie es online installieren: yum install gcc-c++
Schritt 1: Holen Sie sich das Quellpaket: wget http://download.redis.io/releases/redis-3.0.0.tar.gz
Schritt 2: Dekomprimieren Sie Redis: tar zxvf redis-
3.0.0.tar.gz Schritt drei: kompilieren. Geben Sie das Redis-Quellcodeverzeichnis ein (cd redis-3.0.0). Führen Sie
den vierten Schritt von make:installation aus. make install PREFIX=/usr/local/redis
Der PREFIX-Parameter gibt das Installationsverzeichnis von Redis an
5. Redis-Datentyp
Redis unterstützt insgesamt fünf Datentypen
1. string (string)
2. hash (hash)
3. list (list)
4. set (set)
5. zset (sortierte Menge geordnete Menge)
string(string)
Es handelt sich um den grundlegendsten Datentyp von Redis. Ein Schlüssel entspricht einem Wert. Es ist zu beachten, dass der maximale Speicher eines Schlüsselwerts 512 MB beträgt.
127.0.0.1:6379> set key "hello world"
OK
127.0.0.1:6379> get key
"hello world"
127.0.0.1:6379> getset key "nihao"
"hello world"
127.0.0.1:6379> mset key1 "hi" key2 "nihao" key3 "hello"
OK
127.0.0.1:6379> get key1
"hi"
127.0.0.1:6379> get key2
"nihao"
127.0.0.1:6379> get key3
"hello"
Einführung in verwandte Befehle
set Wert (Wert) für einen Schlüssel festlegen
get Den Wert (Wert) entsprechend
einem Schlüssel abrufen getset Wert (Wert) für einen Schlüssel festlegen und den entsprechenden Wert zurückgeben
mset Wert (Wert) für mehrere Schlüssel festlegen
Hash
Redis-Hash ist eine Sammlung von Schlüssel-Wert-Paaren. Es handelt sich um eine Zuordnungstabelle für Felder und Werte vom Typ Zeichenfolge, die zum Speichern von Objekten geeignet ist.
127.0.0.1:6379> hset redishash 1 "001"
(integer) 1
127.0.0.1:6379> hget redishash 1
"001"
127.0.0.1:6379> hmset redishash 1 "001" 2 "002"
OK
127.0.0.1:6379> hget redishash 1
"001"
127.0.0.1:6379> hget redishash 2
"002"
127.0.0.1:6379> hmget redishash 1 2
1) "001"
2) "002"
Einführung in verwandte Befehle
hset konfiguriert das Feld im Hash, das dem Schlüssel als Wert entspricht. Wenn der Hash nicht vorhanden ist, wird er automatisch erstellt. Hget erhält
den Wert der Feldkonfiguration in einem bestimmten Hash.
hmset konfiguriert mehrere Feldwerte im selben Hash hmget erhält stapelweise
denselben Hash. Mehrere Feldwerte in
Liste(Liste)
ist eine einfache Liste von Zeichenfolgen in Redis, sortiert in der Einfügereihenfolge
127.0.0.1:6379> lpush word hi
(integer) 1
127.0.0.1:6379> lpush word hello
(integer) 2
127.0.0.1:6379> rpush word world
(integer) 3
127.0.0.1:6379> lrange word 0 2
1) "hello"
2) "hi"
3) "world"
127.0.0.1:6379> llen word
(integer) 3
Einführung in verwandte Befehle
lpush Fügt Elemente links von der angegebenen Liste ein und gibt die Länge der eingefügten Liste zurück.
rpush Fügt Elemente rechts von der angegebenen Liste ein und gibt die Länge der eingefügten Liste zurück.
llen Gibt die Länge der angegebenen Liste
zurück. lrange Gibt den Elementwert von zurück der angegebene Bereich in der angegebenen Liste
einstellen(setzen)
Es handelt sich um eine ungeordnete Sammlung vom Typ String und kann nicht wiederholt werden.
127.0.0.1:6379> sadd redis redisset
(integer) 1
127.0.0.1:6379> sadd redis redisset1
(integer) 1
127.0.0.1:6379> sadd redis redisset2
(integer) 1
127.0.0.1:6379> smembers redis
1) "redisset1"
2) "redisset"
3) "redisset2"
127.0.0.1:6379> sadd redis redisset2
(integer) 0
127.0.0.1:6379> smembers redis
1) "redisset1"
2) "redisset"
3) "redisset2"
127.0.0.1:6379> smembers redis
1) "redisset1"
2) "redisset3"
3) "redisset"
4) "redisset2"
127.0.0.1:6379> srem redis redisset
(integer) 1
127.0.0.1:6379> smembers redis
1) "redisset1"
2) "redisset3"
3) "redisset2"
Einführung in verwandte Befehle
sadd fügt der Menge, die dem Schlüssel entspricht, ein Zeichenfolgenelement hinzu, gibt bei Erfolg 1 zurück, gibt 0 zurück, wenn das Element existiert.
smembers gibt alle Elemente in der angegebenen Menge zurück
. srem löscht ein Element in der angegebenen Menge
zset (sortierte Menge geordnete Menge)
Es handelt sich um eine geordnete Sammlung vom Typ String, die nicht wiederholt werden kann.
Jedes Element im sortierten Satz muss eine Bewertung angeben, und die Elemente werden in aufsteigender Reihenfolge entsprechend der Bewertung sortiert. Wenn mehrere Elemente dieselbe Bewertung haben, ist dies der Fall in aufsteigender Reihenfolge in lexikografischer Reihenfolge sortiert. Sortierter Satz ist daher ideal für die Implementierung von Rankings
127.0.0.1:6379> zadd nosql 0 001
(integer) 1
127.0.0.1:6379> zadd nosql 0 002
(integer) 1
127.0.0.1:6379> zadd nosql 0 003
(integer) 1
127.0.0.1:6379> zcount nosql 0 0
(integer) 3
127.0.0.1:6379> zcount nosql 0 3
(integer) 3
127.0.0.1:6379> zrem nosql 002
(integer) 1
127.0.0.1:6379> zcount nosql 0 3
(integer) 2
127.0.0.1:6379> zscore nosql 003
"0"
127.0.0.1:6379> zrangebyscore nosql 0 10
1) "001"
2) "003"
127.0.0.1:6379> zadd nosql 1 003
(integer) 0
127.0.0.1:6379> zadd nosql 1 004
(integer) 1
127.0.0.1:6379> zrangebyscore nosql 0 10
1) "001"
2) "003"
3) "004"
127.0.0.1:6379> zadd nosql 3 005
(integer) 1
127.0.0.1:6379> zadd nosql 2 006
(integer) 1
127.0.0.1:6379> zrangebyscore nosql 0 10
1) "001"
2) "003"
3) "004"
4) "006"
5) "005"
Einführung in verwandte Befehle
zadd Ein oder mehrere Elemente zum angegebenen Sortierset hinzufügen
zrem Ein oder mehrere Elemente aus dem angegebenen Sortierset löschen
zcount Anzahl der Elemente innerhalb des angegebenen Bewertungsbereichs im angegebenen Sortierset anzeigen
zscore Die Elemente der angegebenen Bewertung im angegebenen Sortierset anzeigen
zrangebyscore Alle anzeigen Elemente innerhalb des angegebenen Bewertungsbereichs im angegebenen Sortiersatz
6. Befehle im Zusammenhang mit Schlüsselwerten
127.0.0.1:6379> exists key
(integer) 1
127.0.0.1:6379> exists key1
(integer) 1
127.0.0.1:6379> exists key100
(integer) 0
127.0.0.1:6379> get key
"nihao,hello"
127.0.0.1:6379> get key1
"hi"
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> rename key key0
OK
127.0.0.1:6379> get key(nil)
127.0.0.1:6379> get key0
"nihao,hello"
127.0.0.1:6379> type key0
string
existiert #Bestätigen Sie, ob der Schlüssel vorhanden ist
del #Schlüssel löschen
Ablauf #Schlüsselablaufzeit festlegen (in Sekunden)
persist #Konfiguration der Schlüsselablaufzeit entfernen
rename #Schlüsseltyp umbenennen
#Typ des Rückgabewerts
7. Befehle für den Redis-Dienst
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> info
# Server
redis_version:3.0.6
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:347e3eeef5029f3
redis_mode:standalone
os:Linux 3.10.0-693.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:31197
run_id:8b6ec6ad5035f5df0b94454e199511084ac6fb12
tcp_port:6379
uptime_in_seconds:8514
uptime_in_days:0
hz:10
lru_clock:14015928
config_file:/usr/local/redis/redis.conf
-------------------省略N行
127.0.0.1:6379> CONFIG GET 0
(empty list or set)
127.0.0.1:6379> CONFIG GET 15
(empty list or set)
slect #Datenbank auswählen (Datenbanknummer 0-15)
quit #Verbindungsinformationen
beenden #Dienstinformationen und Statistiken abrufen
Monitor #Echtzeitüberwachungskonfiguration
get #Dienstkonfiguration abrufen
Flushdb #Löschen Sie den Schlüssel in der aktuell ausgewählten Datenbank
Flushall #Löschen Sie alle Datenbankschlüssel
8. Redis-Veröffentlichung und Abonnement
Redis Publish and Subscribe (Pub/Sub) ist ein Nachrichtenkommunikationsmodus. Eine Partei sendet Informationen und die andere Partei empfängt Informationen.
Das Bild unten zeigt drei Kunden, die gleichzeitig denselben Kanal abonnieren.
Das Bild unten zeigt, dass beim Senden neuer Informationen an Kanal 1 die Nachricht an die drei Clients gesendet wird, die sie abonniert haben.
9. Redis-Transaktion
Redis-Transaktionen können mehrere Befehle gleichzeitig ausführen
1. Legen Sie ihn vor dem Senden des Exec-Befehls in den Warteschlangen-Cache und beenden Sie die Transaktion.
2. Führen Sie den Transaktionsvorgang nach dem Empfang des Exec-Befehls aus. Wenn die Ausführung eines Befehls fehlschlägt, können andere Befehle weiterhin ausgeführt werden.
3. Während der Ausführung Andere Clients senden die Anforderung einer Transaktion und werden nicht in die Befehlsliste der Transaktionsausführung eingefügt
Eine Transaktion durchläuft drei Phasen
Transaktion starten (Befehl: multi)
Befehlsausführung
Transaktion beenden (Befehl: exec)
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set key key1
QUEUED
127.0.0.1:6379> get key
QUEUED
127.0.0.1:6379> rename key key001
QUEUED
127.0.0.1:6379> exec
1) OK
2) "key1"
3) OK
10. Redis-Sicherheitskonfiguration
Die Sicherheit kann durch Ändern des Gerätekennwortparameters in der Konfigurationsdatei verbessert werden
#requirepass foobared
Sie können das Passwort konfigurieren, indem Sie den Kommentar # entfernen.
Wenn kein Passwort konfiguriert ist, fragen Sie wie folgt ab:
127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass"
2) ""
Nach der Konfiguration des Passworts ist eine Authentifizierung erforderlich
127.0.0.1:6379> CONFIG GET requirepass
(error) NOAUTH Authentication required.
127.0.0.1:6379> AUTH foobared
#认证OK
127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass"
2) "foobared"
11. Redis-Persistenz
Es gibt zwei Möglichkeiten, Redis beizubehalten: Snapshotting (Snapshot) und Append-only file (AOF)
Schnappschüsse machen
1、将存储在内存的数据以快照的方式写入二进制文件中,如默认dump.rdb中
2、save 900 1
#900秒内如果超过1个Key被修改,则启动快照保存
3、save 300 10
#300秒内如果超过10个Key被修改,则启动快照保存
4、save 60 10000
#60秒内如果超过10000个Key被修改,则启动快照保存
Datei nur anhängen (AOF)
1、使用AOF持久时,服务会将每个收到的写命令通过write函数追加到文件中(appendonly.aof)
2、AOF持久化存储方式参数说明
appendonly yes
#开启AOF持久化存储方式
appendfsync always
#收到写命令后就立即写入磁盘,效率最差,效果最好
appendfsync everysec
#每秒写入磁盘一次,效率与效果居中
appendfsync no
#完全依赖OS,效率最佳,效果没法保证
12. Redis-Leistungstest
Wird mit relevanten Testtools geliefert
[root@test ~]# redis-benchmark --help
Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]
-h <hostname> Server hostname (default 127.0.0.1)
-p <port> Server port (default 6379)
-s <socket> Server socket (overrides host and port) -a <password> Password for Redis Auth
-c <clients> Number of parallel connections (default 50)
-n <requests> Total number of requests (default 100000)
-d <size> Data size of SET/GET value in bytes (default 2)
-dbnum <db> SELECT the specified db number (default 0)
-k <boolean> 1=keep alive 0=reconnect (default 1)
-r <keyspacelen> Use random keys for SET/GET/INCR, random values for SADD Using this option the benchmark will expand the string __rand_int__ inside an argument with a 12 digits number in the specified range from 0 to keyspacelen-1. The substitution changes every time a command is executed. Default tests use this to hit random keys in the specified range.
-P <numreq> Pipeline <numreq> requests. Default 1 (no pipeline).
-q Quiet. Just show query/sec values --csv Output in CSV format
-l Loop. Run the tests forever
-t <tests> Only run the comma separated list of tests. The test names are the same as the ones produced as output.
-I Idle mode. Just open N idle connections and wait.
Examples:
Run the benchmark with the default configuration against 127.0.0.1:6379:
$ redis-benchmark
Use 20 parallel clients, for a total of 100k requests, against 192.168.1.1:
$ redis-benchmark -h 192.168.1.1 -p 6379 -n 100000 -c 20
Fill 127.0.0.1:6379 with about 1 million keys only using the SET test:
$ redis-benchmark -t set -n 1000000 -r 100000000
Benchmark 127.0.0.1:6379 for a few commands producing CSV output:
$ redis-benchmark -t ping,set,get -n 100000 --csv
Benchmark a specific command line:
$ redis-benchmark -r 10000 -n 10000 eval 'return redis.call("ping")' 0
Fill a list with 10000 random elements:
$ redis-benchmark -r 10000 -n 10000 lpush mylist __rand_int__
On user specified command lines __rand_int__ is replaced with a random integer with a range of values selected by the -r option.
Der eigentliche Test führt 1 Million Anfragen gleichzeitig aus
[root@test ~]# redis-benchmark -n 1000000 -q
PING_INLINE: 152578.58 requests per second
PING_BULK: 150308.14 requests per second
SET: 143266.47 requests per second
GET: 148632.58 requests per second
INCR: 145857.64 requests per second
LPUSH: 143781.45 requests per second
LPOP: 147819.66 requests per second
SADD: 138350.86 requests per second
SPOP: 134282.27 requests per second
LPUSH (needed to benchmark LRANGE): 141302.81 requests per second
LRANGE_100 (first 100 elements): 146756.67 requests per second
LRANGE_300 (first 300 elements): 148104.27 requests per second
LRANGE_500 (first 450 elements): 152671.75 requests per second
LRANGE_600 (first 600 elements): 148104.27 requests per second
MSET (10 keys): 132731.62 requests per second
13. Redis-Sicherung und -Wiederherstellung
Es gibt zwei Möglichkeiten, Redis automatisch zu sichern
- Die erste besteht darin, eine Sicherung über die Datei dump.rdb durchzuführen
- Die zweite Methode verwendet AOF-Dateien, um eine automatische Sicherung zu erreichen.
dump.rdb-Sicherung
Die standardmäßige automatische Dateisicherungsmethode des Redis-Dienstes (wenn AOF nicht aktiviert ist) . Wenn der Dienst startet, lädt er automatisch Daten aus der Datei dump.rdb .
Die spezifische Konfiguration befindet sich in redis.conf
save 900 1
save 300 10
save 60 10000
Sie können den Speicherbefehl auch manuell ausführen, um eine manuelle Sicherung zu erreichen.
127.0.0.1:6379> set name key
OK
127.0.0.1:6379> SAVE
OK
127.0.0.1:6379> set name key1
OK
127.0.0.1:6379> BGSAVE
Background saving started
Wenn Redis einen Snapshot einer Dump-Datei erstellt, wird die Datei dump.rdb automatisch generiert.
# The filename where to dump the DB
dbfilename dump.rdb
-rw-r--r-- 1 root root 253 Apr 17 20:17 dump.rdb
- Der SAVE- Befehl bedeutet, dass der Hauptprozess verwendet wird, um einen Snapshot der aktuellen Datenbank in einer Dump-Datei zu erstellen.
- Der Befehl BGSAVE gibt an, dass der Hauptprozess einen untergeordneten Prozess verzweigt, um eine Snapshot-Sicherung durchzuführen.
Der Unterschied zwischen den beiden Backups besteht darin, dass ersteres den Hauptprozess blockiert, letzteres jedoch nicht.
Wiederherstellungsbeispiel
# Note that you must specify a directory here, not a file name.dir
/usr/local/redisdata/
#备份文件存储路径
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/redisdata"
127.0.0.1:6379> set key 001
OK
127.0.0.1:6379> set key1 002
OK
127.0.0.1:6379> set key2 003
OK
127.0.0.1:6379> save
OK
Sichern Sie Sicherungsdateien in anderen Verzeichnissen
[root@test ~]# ll /usr/local/redisdata/
total 4
-rw-r--r-- 1 root root 49 Apr 17 21:24 dump.rdb
[root@test ~]# date
Tue Apr 17 21:25:38 CST 2018
[root@test ~]# cp ./dump.rdb /tmp/
Daten löschen
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> get key1
(nil)
Schließen Sie den Dienst und kopieren Sie die ursprüngliche Sicherungsdatei zurück in das Sicherungsverzeichnis
[root@test ~]# redis-cli -a foobared shutdown
[root@test ~]# lsof -i :6379
[root@test ~]# cp /tmp/dump.rdb /usr/local/redisdata/
cp: overwrite ‘/usr/local/redisdata/dump.rdb’? y
[root@test ~]# redis-server /usr/local/redis/redis.conf &
[1] 31487
Melden Sie sich an, um zu sehen, ob die Daten wiederhergestellt wurden
[root@test ~]# redis-cli -a foobared
127.0.0.1:6379> mget key key1 key2
1) "001"
2) "002"
3) "003"
Automatische AOF-Sicherung
Der Redis-Dienst deaktiviert diese Konfiguration standardmäßig
###### APPEND ONLY MODE ##########
appendonly no
# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"
# appendfsync always
appendfsync everysec
# appendfsync no
Die relevanten Parameter der Konfigurationsdatei wurden bereits ausführlich vorgestellt.
Bei der AOF-Dateisicherung werden alle historischen Aufzeichnungen und ausgeführten Befehle gesichert. Sie ist dem MySQL-Binlog sehr ähnlich. Beim Wiederherstellen wird der zuvor ausgeführte Befehl erneut ausgeführt. Es ist zu beachten, dass er vor der Wiederherstellung manuell gelöscht werden muss B. Datenbankwiederherstellung, ausgeführte Del-Befehle oder falsch ausgeführte Befehle.
AOF unterscheidet sich vom Dump-Backup
1. Die AOF-Dateisicherung unterscheidet sich von der Dump-Dateisicherung.
2. Der Dienst liest Dateien in einer anderen Prioritätsreihenfolge und wird gemäß den folgenden Prioritäten gestartet.
Wenn nur AOF konfiguriert ist, wird die AOF-Datei zur Wiederherstellung geladen Daten beim Neustart
. Wenn RBD und AOF gleichzeitig konfiguriert sind, wird beim Start nur die AOF-Datei geladen, um Daten wiederherzustellen.
Wenn nur RBD konfiguriert ist, wird die Dump-Datei geladen, um Daten beim Start wiederherzustellen.
Hinweis: Solange aof konfiguriert ist Da jedoch keine AOF-Datei vorhanden ist, ist die Startdatenbank zu diesem Zeitpunkt leer
14. Einführung in die Redis-Produktionsoptimierung
1. Optimierung der Speicherverwaltung
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
#list的成员与值都不太大的时候会采用紧凑格式来存储,相对内存开销也较小
Wenn Redis in einer Linux-Umgebung ausgeführt wird und der Systemspeicher relativ klein ist, kann die automatische Sicherung zu diesem Zeitpunkt fehlschlagen und der Parameter vm.overcommit_memory des Systems muss geändert werden. Dieser Parameter ist die Speicherzuweisungsstrategie des Linux-Systems .
0 bedeutet, dass der Kernel prüft, ob genügend Speicher für den Anwendungsprozess verfügbar ist. Wenn genügend Speicher verfügbar ist, ist die Speicheranwendung zulässig. Andernfalls schlägt die Speicheranwendung fehl und ein Fehler wird an den Anwendungsprozess zurückgegeben.
1 bedeutet, dass der Kernel die Zuweisung des gesamten physischen Speichers unabhängig vom aktuellen Speicherstatus zulässt.
2 bedeutet, dass der Kernel mehr Speicher zuweisen darf als der gesamte physische Speicher und der Auslagerungsspeicher zusammen
In der offiziellen Beschreibung von Redis wird empfohlen, den Wert von vm.overcommit_memory auf 1 zu ändern , was auf folgende Weise geändert werden kann:
(1) Bearbeiten Sie /etc/sysctl.conf zu vm.overcommit_memory=1, dann sysctl -p, damit die Konfigurationsdatei wirksam wird
(2) sysctl vm.overcommit_memory=1
(3) echo 1 > /proc/sys/vm/ overcommit_memory
2. Speichervorabzuweisung
3. Persistenzmechanismus
- Geplante Snapshots: nicht effizient und können zu Datenverlust führen
- AOF: Datenintegrität aufrechterhalten (die Anzahl der Instanzen sollte nicht zu groß sein, maximal 2G)
Zusammenfassung der Optimierung
1) Wählen Sie den geeigneten Datentyp entsprechend den Geschäftsanforderungen aus.
2) Deaktivieren Sie alle Persistenzmethoden, wenn das Geschäftsszenario keine Persistenz erfordert (verwenden Sie SSD-Festplatten, um die Effizienz zu verbessern).
3) Verwenden Sie keinen virtuellen Speicher, schreiben Sie AOF jede Sekunde in Echtzeit.
4 ) Lassen Sie nicht zu, dass der physische Speicher des Servers, auf dem sich REDIS befindet, 3/5 des Gesamtspeichers überschreitet.
5) Verwenden Sie maxmemory.
6) Verwenden Sie je nach Geschäft mehrere Redis-Instanzen separat für große Datenmengen
15. Redis-Clusteranwendung
Cluster besteht darin, mehrere Redis-Instanzen zusammenzufassen , um dieselben Geschäftsanforderungen zu erfüllen oder eine hohe Verfügbarkeit und einen Lastausgleich zu erreichen.
Welche Clusterlösungen gibt es?
1. Haproxy+Keepalived+Redis-Cluster
1) Realisieren Sie die Master-Slave-Replikation und die Lese-/Schreibtrennung über die Konfigurationsdatei von Redis.
2) Realisieren Sie den Lastausgleich über die Konfiguration von Haproxy und entfernen Sie T rechtzeitig aus dem Cluster, wenn der Slave ausfällt.
3) Verwenden Sie Keepalived, um eine hohe Verfügbarkeit zu erreichen Belastung
2. Redis offizielles Sentinel-Clusterverwaltungstool
Praktischer Prozess der Hochverfügbarkeitslösung für die Redis-Clusterproduktionsumgebung
1) Sentinel ist für die Überwachung, Erinnerung und das automatische Failover des Master-Slave-Dienstes im Cluster verantwortlich.
2) Der Redis-Cluster ist für die Bereitstellung externer Dienste verantwortlich
Informationen zur Clusterkonfiguration des Redis Sentinel-Clusters finden Sie unter
3、Redis-Cluster
Redis Cluster ist eine verteilte Lösung für Redis . Es wurde offiziell in Redis Version 3.0 eingeführt und löst effektiv die verteilten Anforderungen von Redis. Bei Engpässen wie Einzelmaschinenspeicher, Parallelität und Datenverkehr kann die Cluster-Architektur zum Lastausgleich eingesetzt werden.
1) Offizielle Empfehlung, kein Zweifel.
2) Dezentralisierung, der Cluster kann bis zu 1.000 Knoten umfassen und die Leistung wächst linear mit der Anzahl der Knoten.
3) Einfach zu verwalten, Sie können später Knoten hinzufügen oder entfernen, Slots verschieben usw.
4) Einfach und leicht zu bedienen.