Kasutades StackExchange.Redis redis-vahemälu manipuleerimiseks, on viga järgmine:
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.
Ajutine lahendus, muuda redis.windows.conf faili,Redis'i teenus tuleb taaskäivitada, seatud järgmiselt:
Kui sa ei soovi Redis teenust taaskäivitada, saad kasutada käsu redis-cli abil selle seadistamiseks järgmiselt:
Selgitus on järgmine:
# Vaikimisi lõpetab Redis kirjutiste vastuvõtmise, kui RDB hetktõmmised on lubatud # (vähemalt üks salvestuspunkt) ja viimane taustasalvestus ebaõnnestus. # See teeb kasutaja teadlikuks (raskel moel), et andmed ei püsi # kettale õigesti, muidu on tõenäoline, et keegi ei pane tähele ja mõned # katastroof juhtub.
# # Kui taustasalvestuse protsess uuesti tööle hakkab, siis Redis töötab # Luba automaatselt uuesti kirjutada.
# # Kui oled aga seadistanud korraliku jälgimise Redis serveri üle # ja püsivus, võid selle funktsiooni keelata, et Redis saaks # jätka tööd tavapäraselt, isegi kui kettaga on probleeme, # õigused ja nii edasi. Lihtsalt öeldes: Redis peab hargnema põhiprotsessi, et vältida põhiprotsessi võltsimist andmete salvestamisel kõvakettale, ning seejärel lõpetama andmete salvestamise kõvakettale fork-protsessis; kui põhiprotsess kasutab 4GB mälu, on vaja veel 4GB mälu, kui on vaja forki alamprotsessi, sel hetkel mälust ei piisa, fork rikneb ja seejärel ka andmete salvestamise kõvaketas ebaõnnestub. Redis logide vaatamiseks tuleb seadistada redis.windows.conf järgmiselt:
# Täpsusta logifaili nimi. Samuti võib kasutada 'stdout' sundimiseks # Redis logib sisse standardse väljundi. logifail "E:/Redis-x64-3.2.100/redis.txt" Logaritmilised erandid on järgmised:
[8984] 14. mai 14:05:09.060 * Taustasalvestust alustas pid 8672 [8672] 14. mai 14:05:09.169 # Windowsi versioon Redis'ist reserveerib kuhjatud mälu süsteemi lehekülgede failist jagamiseks hargnenud protsessiga, mida kasutatakse püsivusoperatsioonide jaoks. Praegu ei ole piisavalt ühtlast vaba ruumi süsteemi lehekülgede fail. Võid suurendada süsteemi lehekülgede faili suurust. Mõnikord taaskäivitamine defragmenteerib süsteemi lehekülgede faili piisavalt, et see operatsioon õnnestus edukalt lõpule viia.
Redis ei saa jätkata. Väljumine. [8984] 14. mai 14:05:09.278 # kahvlitöö ebaõnnestus
Pärast analüüsi selgus, et maksimaalse kuhja suuruse "maxheap" konfiguratsiooni probleem tulenes ebapiisavast mälust.
Lahus
Ava Redis'i konfiguratsioonifail "redis.windows.conf" ja leia järgmine koodiosa:
# Redis-kuhja peab olema suurem kui maxmemory määratud väärtus # lipp, kuna kuhja allokaatoril on oma mälunõuded ja # kuhja killustumine on vältimatu. Kui ainult maxmemory lipp on # määratud, maxheap seatakse väärtuseks 1,5*maxmemory. Kui maxheap-lipp on # Koos maxmemory'ga määratakse maxheap-lipp automaatselt # suurendatud, kui see on väiksem kui 1,5*maxmemory. # # Maxheap <bytes> Selle seadistuse lisamine on hea,Redis teenus ei käivitu!!!!!!!
Vaikimisi väärtus on: maxheap 1024000000≈976.56M
Ma ei leidnud seda kommentaari konverentsifailist, leidsin midagi sellist:
# Ära kasuta rohkem mälu kui määratud baitide arv. # Kui mälupiirang on täis, proovib Redis võtmeid eemaldada # vastavalt valitud väljatõstmispoliitikale (vt maxmemory-policy).
# # Kui Redis ei saa võtmeid eemaldada vastavalt poliitikale või kui poliitika on # seatud 'noeviction', hakkab Redis vastama käskudele vigadega # mis kasutaks rohkem mälu, nagu SET, LPUSH jne, ja jätkab # et vastata ainult lugemiseks mõeldud käskudele nagu GET.
# # See valik on tavaliselt kasulik, kui kasutada Redist LRU vahemäluna või seadistada # kõva mälupiirang instantsi jaoks (kasutades 'noeviction' poliitikat).
# # HOIATUS: Kui sul on orjad, mis on seotud instantsiga maxmemory sees, # orjade toitmiseks vajalike väljundpuhvrite suurus lahutatakse # kasutatud mälu arvust, nii et võrguprobleemid / taassünkroonimised # ei käivita tsüklit, kus klahvid välja tõstetakse, ja omakorda väljund # orjade puhver on täis võtmete DEL-idega, mis on välja tõstetud, mis käivitab kustutamise # rohkem võtmeid ja nii edasi, kuni andmebaas on täielikult tühjaks saanud.
# # Lühidalt... Kui sul on orjad küljes, soovitatakse seada madalam # piirang maksimaalsele mälule, et süsteemis oleks vaba RAM-i orja jaoks # väljundpuhvreid (kuid seda pole vaja, kui poliitika on 'noeviction').
# # HOIATUS: maxmemory'i seadistamata jätmine põhjustab Redise lõpetamise # mälust väljas erand, kui kuhja piirang on ületatud.
# # MÄRKUS: kuna Redis kasutab süsteemi lehekülgede faili kuhja mälu eraldamiseks, # Töökomplekti mälukasutus, mida näitab Windowsi tegumihaldur või muu # tööriistad nagu ProcessExplorer ei pruugi alati täpsed olla. Näiteks, parem # pärast RDB või AOF failide taustasalvestust, töötab töökomplekti väärtus # võib oluliselt langeda. Et kontrollida kasutatud mälu õiget hulka # redis-serveri poolt andmete salvestamiseks kasuta INFO kliendikäsku. The INFO # käsk näitab ainult mälu, mida kasutatakse Redis andmete salvestamiseks, mitte lisamälu # mälu, mida Windowsi protsess kasutab oma vajadusteks. Th3 lisasumma # mälust, mida INFO käsk ei teatanud, saab arvutada, lahutades # Windowsi tegumihalduri ja used_memory_peak poolt teatatud tipptasemel töökomplekt # teatas INFO juhtkond.
# # maxmemory <bytes> Hoiatus: Kui kuhja piirang on saavutatud, põhjustab maxmemory'i mitte seadistamine Redis lõpetamise mäluvälise erandiga.
Märkus: TänuRedis kasutab süsteemilehendusfaile kuhja mälu eraldamiseks,
Windowsi tegumihaldur või teised tööriistad nagu ProcessExplorer ei näita alati täpset töökomplekti mälukasutust. Lihtsalt öeldes,Tegumihalduri näidatud mälukasutus ei ole täpne!!!
Kasuta infokäsku järgmise päringu tegemiseks:
# Mälestus 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:noeviction mem_fragmentation_ratio:1.00 mem_allocator:jemalloc-3.6.0
Seaded on järgmised:
1073741824 baiti = 1G Pärast seadistust lisab redis .net klient vahemäluvea järgmiselt:
OOM käsk ei ole lubatud, kui kasutatakse mälu > 'maxmemory'. # MAXMEMORY POLICY: kuidas Redis valib, mida eemaldada, kui maxmemory # on saavutatud. Saad valida viie käitumise vahel:
# # volatile-lru -> eemalda võti aegumiskomplektiga LRU algoritmi abil # allkeys-lru -> eemalda ükskõik milline võti vastavalt LRU algoritmile # volatile-random -> eemalda juhuslik võti, millel on aegumiskomplekt # allkeys-random -> eemalda juhuslik võti, ükskõik milline võti # volatile-ttl -> eemalda võti, millel on lähim aegumisaeg (väike TTL) # noeviction -> ei aegu üldse, lihtsalt tagasta vea kirjutamistoimingute ajal
# # Märkus: kõigi ülaltoodud poliitikate puhul tagastab Redis kirjutamisel vea # operatsioonid, kui sobivaid võtmeid väljatõstmiseks pole.
# # Nende käskude kirjutamise kuupäeval on: set setnx setex append # incr decr rpush lpush lpushx lpushx linsert lset rpoplpush sadd # sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby # zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby # getset mset msetnx täitevsort
# # Vaikimisi on:
# # maxmemory-poliitika väljatõstmine #MAXMEMORY策略: Kui MAXMEMORY
#到达. Saad valida viie käitumise vahel:
#
#volatile LRU-> kasutab LRU algoritmi, et eemaldada võtmed, mille komplektid on aegunud
#allkeys LRU-> kustutab iga võtme vastavalt LRU algoritmile
#volatile juhuslik – > eemaldada juhuslikud võtmed aegunud komplektidega
#allkeys juhuslik> kustuta juhuslikud võtmed, suvalised võtmed
#volatile TTL-> Kustuta võti, millel on lähim aegumisaeg (väike TTL)
#noeviction-> ei aegu üldse, vaid tagastab ainult kirjutamisoperatsiooni vead
#
#注意: Kõigi ülaltoodud strateegiate puhul tagastab Redis vea kirjutamisel
#操作, kui sobivat võtit väljatõstmiseks pole.
#
#在编写之日 need käsud on: set setnx setex append
#递增递减rpush lpushx lpushx linsert lset rpoplpush sadd
#烧结店sunion sunionstore sdiff sdiffstore zadd zincrby
#zunionstore Zinterstore Hset Hsetnx HMSET Hincrby Incrby Decrby
#getset MSET MSETNX täitevsorteerimine
#
#默认值为:
#
#maxmemory策略无效 Samuti pead seadistama järgmised konfiguratsioonid:
Vaikimisi redis seade on väga konservatiivne, st seda ei salvestata pärast mälupiirangu ületamist ning poliitikat saab muuta LRU algoritmiks (viimasel ajal kõige vähem kasutatud algoritm) – uus salvestatud info asendab vana info.
Läbivaatamine:
(Lõpp)
|