Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 47166|Răspunde: 1

[Sursă] Redis MISCONF Redis este configurat pentru a salva instantanee RDB

[Copiază linkul]
Postat la 2021-5-14 21:18:50 | | | |
Folosind StackExchange.Redis pentru a manipula cache-ul redis, eroarea este următoarea:

StackExchange.Redis.RedisServerException: MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

Soluție temporară, modifică fișierul redis.windows.conf,Serviciul Redis trebuie repornit, setați astfel:
Dacă nu doriți să reporniți serviciul Reddis, puteți folosi comanda redis-cli pentru a-l configura astfel:



Explicația este următoarea:
# Implicit, Redis va înceta să mai accepte scrieri dacă snapshot-urile RDB sunt activate
# (cel puțin un punct de salvare) și cea mai recentă salvare de fundal a eșuat.
# Acest lucru va face utilizatorul conștient (într-un mod dificil) că datele nu persistă
# pe disc corect, altfel șansele sunt ca nimeni să nu observe și unii
# Dezastrul se va întâmpla.
#
# Dacă procesul de salvare în fundal va începe să funcționeze din nou, Redis va funcționa
# permite automat scrierile din nou.
#
# Totuși, dacă ai configurat monitorizarea corespunzătoare a serverului Redis
# și persistență, poate vrei să dezactivezi această funcție astfel încât Redis să
# continuă să funcționeze ca de obicei chiar dacă apar probleme cu discul,
# permisiuni, și așa mai departe.
Pe scurt: Redis trebuie să facă un fork al unui proces principal pentru a evita ca acesta să simuleze moartea atunci când salvează date pe hard disk, apoi să finalizeze operațiunea de salvare a datelor pe hard disk în procesul fork; dacă procesul principal folosește 4GB de memorie, sunt necesari încă 4GB când este nevoie de sub-procesul fork-ului, iar în acest moment memoria nu este suficientă, fork-ul eșuează, iar apoi hard disk-ul de salvare a datelor cedează și el.

Pentru a vizualiza jurnalele redis, trebuie să configurezi redis.windows.conf după cum urmează:

# Specifică numele fișierului de jurnal. De asemenea, "stdout" poate fi folosit pentru a forța
# Redis pentru a înregistra ieșirea standard.
logfile "E:/Redis-x64-3.2.100/redis.txt"

Excepțiile din logarim sunt următoarele:

[8984] 14 mai 14:05:09.060 * Salvare în fundal începută de pid 8672
[8672] 14 mai 14:05:09.169 #
Versiunea Windows a Redis păstrează memoria heap din fișierul de pagină al sistemului
pentru partajare cu procesul bifurcat folosit pentru operațiuni de persistență. În acest moment, nu există suficient spațiu liber contiguu disponibil în
fișier de paginare de sistem. Poți mări dimensiunea fișierului de paginare al sistemului.
Uneori, o repornire va defragmenta suficient fișierul de paging al sistemului pentru
această operațiune a fost finalizată cu succes.

Redis nu poate continua. Ieșim.
[8984] 14 mai 14:05:09.278 # operație de furcare eșuată



După analiză, s-a dovedit că problema configurației "maxheap" de dimensiunea maximă a heap-ului se datora memoriei disponibile insuficiente.

Soluție

Deschide fișierul de configurare "redis.windows.conf" al lui Redis și găsește următoarea secțiune de cod:


# Heap-ul Redis trebuie să fie mai mare decât valoarea specificată de maxmemory
# flag, deoarece alocatorul heap-ului are propriile cerințe de memorie și
# Fragmentarea grămezii este inevitabilă. Dacă doar flag-ul maxmemory este
# Specificat, maxheap va fi setat la 1.5*maxmemory. Dacă flag-ul maxheap-ului este
# specificat împreună cu maxmemory, flag-ul maxheap va fi automat
# crește dacă este mai mic de 1.5*maxmemory.
#  
# maxheap <bytes>

Adăugarea acestei setări este bună,Serviciul Redis nu pornește!!!!!!!
Valoarea implicită este: maxheap 1024000000≈976.56M

Nu am găsit acest comentariu în fișierul conf, am găsit ceva de genul acesta:
# Nu folosiți mai multă memorie decât numărul specificat de octeți.
# Când limita de memorie este atinsă, Redis va încerca să elimine cheile
# Conform politicii de evacuare selectate (vezi Maxmemory-policy).
#
# Dacă Redis nu poate elimina cheile conform politicii, sau dacă politica este
# setat pe 'noeviction', Redis va începe să răspundă cu erori la comenzi
# care ar folosi mai multă memorie, cum ar fi SET, LPUSH și așa mai departe, și va continua
# pentru a răspunde la comenzi doar pentru citire precum GET.
#
# Această opțiune este de obicei utilă atunci când se folosește Redis ca cache LRU sau pentru a seta
# O limită strictă de memorie pentru o instanță (folosind politica "noeviction").
#
# ATENȚIE: Dacă ai sclavi atașați unei instanțe cu maxmemory activat,
# Se scade dimensiunea bufferelor de ieșire necesare pentru a alimenta sclavii
# din numărul de memorie folosită, astfel încât problemele de rețea / resincronizările vor
# să nu declanșeze o buclă în care cheile să fie eliminate și, implicit, ieșirea
# bufferul de sclavi este plin cu DEL-uri ale cheilor evacuate, declanșând ștergerea
# de mai multe chei, și așa mai departe până când baza de date este complet golită.
#
# Pe scurt... Dacă ai sclavi atașați, se recomandă să setezi un sclavi mai mic
# limită pentru maxmemory astfel încât să existe ceva memorie RAM liberă pe sistem pentru slave
# buffere de ieșire (dar acest lucru nu este necesar dacă politica este "noeviction").
#
# ATENȚIE: nesetarea maxmemory va face ca Redis să se termine cu un
# excepție de ieșire din memorie dacă limita heap-ului este atinsă.
#
# NOTĂ: deoarece Redis folosește fișierul de paginare al sistemului pentru a aloca memoria heap,
# utilizarea memoriei setului de lucru arătată de Managerul de Sarcini Windows sau de altele
# unelte precum ProcessExplorer nu vor fi întotdeauna precise. De exemplu, dreapta
# după o salvare în fundal a fișierelor RDB sau AOF, valoarea setului de lucru
# poate scădea semnificativ. Pentru a verifica cantitatea corectă de memorie folosită
# de către serverul redis, pentru a stoca datele, folosește comanda client INFO. INFORMAȚIILE
Comanda # arată doar memoria folosită pentru stocarea datelor Redis, nu și extra-ul
# memorie folosită de procesul Windows pentru propriile cerințe. Th3 cantitate suplimentară
# de memorie neraportată de comanda INFO poate fi calculată scăzând
# Setul de lucru de vârf raportat de Managerul de Activități Windows și de used_memory_peak
# raportat de comanda INFO.
#
# maxmemorie <bytes>

Avertisment: Dacă limita heap-ului este atinsă, nesetarea maxmemory va determina terminarea Redis cu o excepție pentru lipsa memoriei.

Notă: Din cauzaRedis folosește fișiere de paginare a sistemului pentru a aloca memoria heap

Managerul de activități din Windows sau alte instrumente precum ProcessExplorer nu arată întotdeauna o utilizare exactă a memoriei setului de lucru. Pe scurt,Utilizarea memoriei afișată de Task Manager nu este exactă!!!

Folosește comanda info pentru a interoga astfel:

# Memorie
used_memory:2011338768
used_memory_human:1,87G
used_memory_rss:2011279992
used_memory_rss_human:1,87G
used_memory_peak:2011338768
used_memory_peak_human:1,87G
total_system_memory:0
total_system_memory_human:0B
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:neevacuare
mem_fragmentation_ratio:1.00
mem_allocator:jemalloc-3.6.0



Setările sunt următoarele:

1073741824 octeți = 1G
După setare, clientul redis .net adaugă o eroare cache după cum urmează:

Comanda OOM nu este permisă când se folosește memorie > 'maxmemory'.
# POLITICĂ MAXMEMORY: cum va selecta Redis ce să elimine când maxmemory
# este atins. Poți alege dintre cinci comportamente:
#
# volatile-lru -> elimină cheia cu un set de expirare folosind un algoritm LRU
# allkeys-lru -> elimină orice cheie conform algoritmului LRU
# volatile-aleatoare -> elimină o cheie aleatorie cu setul expire
# allkeys-random -> elimină o cheie aleatorie, orice cheie
# volatile-ttl -> elimină cheia cu cel mai apropiat timp de expirare (minor TTL)
# Noeviction - > nu expiră deloc, doar returnează o eroare la operațiunile de scriere
#
# Notă: cu oricare dintre politicile de mai sus, Redis va returna o eroare la scriere
# Operațiuni, când nu există chei potrivite pentru evacuare.
#
# La data redactării, aceste comenzi sunt: set setnx setex append
# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
# sinter sinterstore sunion sunionstore sdiff sdiff sdiff zadd zincrby
# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
# getset mset msetnx exec sort
#
# Implicitul este:
#
# Politica MaxMemory-Noeviction
#MAXMEMORY策略: Când MAXMEMORY

#到达. Poți alege dintre cinci comportamente:

#

#volatile LRU-> folosește algoritmul LRU pentru a elimina cheile cu seturi de expirare

#allkeys LRU-> șterge orice cheie conform algoritmului LRU

#volatile aleatoriu - > elimină cheile aleatorii cu seturi expirate

#allkeys > aleatoriu șterge cheile aleatorii, chei arbitrare

#volatile TTL-> Șterge cheia cu cel mai apropiat timp de expirare (TTL minor)

#noeviction-> nu expiră deloc, doar returnează erori de scriere

#

#注意: Pentru oricare dintre strategiile de mai sus, Redis returnează o eroare la scriere

#操作, atunci când nu există o cheie potrivită pentru evacuare.

#

#在编写之日, aceste comenzi sunt: set setnx setex append

#递增递减rpush lpushx lpushx linsert lset rpoplpush sadd

#烧结店sunion sunionstore sdiff sdiff sdiffstore zadd zincrby

#zunionstore Zinterstore Hset Hset, HMSET Hincrby Incrby Decrby

#getset mset msetEC Exec Sorting

#

#默认值为:

#

#maxmemory策略无效
De asemenea, trebuie să configurezi următoarele configurații:

Setarea redis implicită este foarte conservatoare, adică nu este stocată după ce limita de memorie este depășită, iar politica poate fi schimbată în algoritmul LRU (cel mai puțin folosit recent) - informațiile nou stocate vor înlocui cele vechi.

Recenzie:

Diferența de persistență Redis între RDB și AOF
https://www.itsvse.com/thread-9555-1-1.html

Instalarea Docker rulează cache-ul Redis
https://www.itsvse.com/thread-8995-1-1.html

Exemplele explică ce sunt penetrarea cache-ului Ridis, avalanșa cache-ului și decompunerea cache-ului
https://www.itsvse.com/thread-8968-1-1.html

Wildcard-uri Redis pentru a șterge cheile în masă
https://www.itsvse.com/thread-7957-1-1.html

Instalare CentOS 7 Redis 5.0.3 tutorial
https://www.itsvse.com/thread-7201-1-1.html

Instalează extensia Redis sub php 5.5.7 în CentOS
https://www.itsvse.com/thread-7200-1-1.html

Câte chei pot fi stocate într-o instanță Redis și care sunt cheile și valorile maxime?
https://www.itsvse.com/thread-6848-1-1.html

Problema redis chinezilor nu poate fi prezentată corect
https://www.itsvse.com/thread-5032-1-1.html

Redis permite accesul de la distanță
https://www.itsvse.com/thread-5011-1-1.html

Windows nu reușește să pornească serviciul Redis, eroarea 1067: Procesul se termină neașteptat.
https://www.itsvse.com/thread-5010-1-1.html

CentOS a instalat Redis 4.0.8
https://www.itsvse.com/thread-4614-1-1.html

Redis setează conexiuni și parole de acces la distanță
https://www.itsvse.com/thread-4101-1-1.html

Redis golește cache-ul de date
https://www.itsvse.com/thread-4027-1-1.html

Configurarea persistenței Redis și persistența dezactivată
https://www.itsvse.com/thread-4012-1-1.html

Diferența dintre save și bgsave în redis
https://www.itsvse.com/thread-4010-1-1.html

Redis două metode și principii de persistență
https://www.itsvse.com/thread-4009-1-1.html

Redis are trei moduri de a începe
https://www.itsvse.com/thread-4008-1-1.html

Metoda Redis pentru ascunderea ferestrelor din linia de comandă
https://www.itsvse.com/thread-2988-1-1.html

Redis Hash Hash Hash Problema Hash Value
https://www.itsvse.com/thread-2587-1-1.html

5 lucruri pe care trebuie să le știi înainte de a folosi Redis
https://www.itsvse.com/thread-2580-1-1.html

Redis modifică numărul portului implicit și setează parola de acces
https://www.itsvse.com/thread-2577-1-1.html

Redis Windows 64-bit download, adresa oficială de descărcare
https://www.itsvse.com/thread-2576-1-1.html

Redis folosește scripturi Lua pentru explicații detaliate
https://www.itsvse.com/thread-9634-1-1.html

Testul de performanță Redis Benchmark
https://www.itsvse.com/thread-9645-1-1.html

(Sfârșit)






Precedent:Hotărârea NPOI privind tipul de dată a celulei
Următor:Explicație detaliată a Operațiunii Excel NPOI
 Proprietarul| Postat la 2023-7-12 21:08:55 |
Strategii de eliminare a celor opt memorie Redis
https://www.itsvse.com/thread-10626-1-1.html
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com