Izmantojot StackExchange.Redis, lai manipulētu ar redis kešatmiņu, kļūda ir šāda:
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.
Pagaidu risinājums, modificējiet failu redis.windows.conf,Redis pakalpojums ir jārestartē, iestatiet šādi:
Ja nevēlaties restartēt Redis pakalpojumu, varat izmantot komandu redis-cli, lai to iestatītu šādi:
Skaidrojums ir šāds:
# Pēc noklusējuma Redis pārtrauks rakstīt, ja ir iespējoti RDB momentuzņēmumi # (vismaz viens saglabāšanas punkts) un pēdējā fona saglabāšana neizdevās. # Tas ļaus lietotājam apzināties (grūtā veidā), ka dati nesaglabājas # uz diska pareizi, pretējā gadījumā pastāv iespēja, ka neviens nepamanīs un daži # katastrofa notiks.
# # Ja fona saglabāšanas process atkal sāks darboties, Redis # automātiski atļaut rakstīt vēlreiz.
# # Tomēr, ja esat iestatījis pareizu Redis servera uzraudzību # un neatlaidība, iespējams, vēlēsities atspējot šo funkciju, lai Redis # turpināt strādāt kā parasti, pat ja rodas problēmas ar disku, # atļaujas utt. Vienkārši sakot: Redis ir jāpārtrauc galvenais process, lai izvairītos no galvenā procesa viltošanas nāves, saglabājot datus cietajā diskā, un pēc tam pabeidz datu saglabāšanu cietajā diskā dakšas procesā, ja galvenais process izmanto 4 GB atmiņas, ir nepieciešami papildu 4 GB, ja ir nepieciešams dakšas apakšprocess, šobrīd atmiņa nav pietiekama, dakša neizdodas, un tad arī datu taupīšanas cietais disks neizdodas. Lai apskatītu redis žurnālus, jums jākonfigurē redis.windows.conf šādi:
# Norādiet žurnāla faila nosaukumu. Arī "stdout" var izmantot, lai piespiest # Redis, lai pieteiktos standarta izvadē. žurnālfails "E:/Redis-x64-3.2.100/redis.txt" Žurnāla izņēmumi ir šādi:
[8984] 14 May 14:05:09.060 * Fona saglabāšanu sāka pid 8672 [8672] 14. maijs 14:05:09.169 # Redis Windows versija rezervē kaudzes atmiņu no sistēmas peidžeru faila koplietošanai ar dakšas procesu, ko izmanto noturības operācijām. Šobrīd nav pietiekami daudz brīvas vietas Sistēmas peidžeru fails. Varat palielināt sistēmas peidžeru faila lielumu. Dažreiz atsāknēšana defragmentēs sistēmas peidžeru failu pietiekami, lai Šī darbība ir veiksmīgi pabeigta.
Redis nevar turpināt. Izeja. [8984] 14. maijs 14:05:09.278 # dakšas darbība neizdevās
Pēc analīzes izrādījās, ka problēma ar maksimālo kaudzes izmēru "maxheap" konfigurāciju bija saistīta ar nepietiekamu pieejamo atmiņu.
Šķīdums
Atveriet Redis konfigurācijas failu "redis.windows.conf" un atrodiet šādu koda sadaļu:
# Redis kaudzei jābūt lielākai par maxmemory norādīto vērtību # karodziņš, jo kaudzes sadalītājam ir savas atmiņas prasības un # kaudzes sadrumstalotība ir neizbēgama. Ja tikai maxmemory karodziņš ir # norādīts, maxheap tiks iestatīts uz 1.5 * maxmemory. Ja maksimuma karodziņš ir # norādīts kopā ar maxmemory, maxheap karodziņš tiks automātiski # palielināts, ja tas ir mazāks par 1.5*maxmemory. # # maksimums <bytes> Šī iestatījuma pievienošana ir laba,Redis pakalpojums neizdodas startēt!!!!!!!
Noklusējuma vērtība ir: maxheap 1024000000≈976.56M
Es neatradu šo komentāru conf failā, es atradu kaut ko līdzīgu šim:
# Neizmantojiet vairāk atmiņas par norādīto baitu daudzumu. # Kad atmiņas ierobežojums ir sasniegts, Redis mēģinās noņemt atslēgas # saskaņā ar izvēlēto izlikšanas politiku (skatīt maxmemory-policy).
# # Ja Redis nevar noņemt atslēgas saskaņā ar politiku vai ja politika ir # iestatīts uz 'noeviction', Redis sāks atbildēt ar kļūdām uz komandām #, kas patērētu vairāk atmiņas, piemēram, SET, LPUSH utt., un turpinās #, lai atbildētu uz tikai lasāmām komandām, piemēram, GET.
# # Šī opcija parasti ir noderīga, izmantojot Redis kā LRU kešatmiņu vai lai iestatītu # cietās atmiņas ierobežojums instancē (izmantojot "noeviction" politiku).
# # BRĪDINĀJUMS: Ja jums ir vergi, kas pievienoti instancei ar ieslēgtu maxmemory, # tiek atņemts izejas buferu lielums, kas nepieciešams, lai pabarotu vergus # no izmantotās atmiņas skaita, lai tīkla problēmas / atkārtota sinhronizācija # neaktivizēt cilpu, kur atslēgas tiek izliktas, un savukārt izeja # vergu buferis ir pilns ar izlikto atslēgu DEL, kas izraisa dzēšanu # vairāk atslēgu un tā tālāk, līdz datu bāze ir pilnībā iztukšota.
# # Īsāk sakot... Ja jums ir pievienoti vergi, ieteicams iestatīt zemāku # ierobežojums maxmemory, lai sistēmā būtu brīva RAM vergam # izvades buferi (bet tas nav nepieciešams, ja politika ir "noeviction").
# # BRĪDINĀJUMS: neiestatot maxmemory, Redis tiks pārtraukts ar # Atmiņas trūkuma izņēmums, ja ir sasniegts kaudzes ierobežojums.
# # PIEZĪME: tā kā Redis izmanto sistēmas peidžeru failu, lai piešķirtu kaudzes atmiņu, # Darba komplekta atmiņas lietojums, ko parāda Windows uzdevumu pārvaldnieks vai citi # rīki, piemēram, ProcessExplorer, ne vienmēr būs precīzi. Piemēram, pareizi # pēc RDB vai AOF failu fona saglabāšanas darba kopas vērtība # var ievērojami samazināties. Lai pārbaudītu pareizo izmantotās atmiņas daudzumu # ar redis-serveri, lai saglabātu datus, izmantojiet INFO klienta komandu. INFORMĀCIJA # komanda rāda tikai atmiņu, kas tiek izmantota redis datu glabāšanai, nevis papildu # atmiņa, ko Windows process izmanto savām vajadzībām. Th3 papildu summa # atmiņas, ko neziņo komanda INFO, var aprēķināt, atņemot # Maksimālais darba komplekts, par kuru ziņo Windows uzdevumu pārvaldnieks un used_memory_peak # ziņo komanda INFO.
# # maksimālā atmiņa <bytes> Brīdinājums: Ja kaudzes ierobežojums ir sasniegts, neiestatot maksimālo atmiņu, Redis tiks pārtraukts ar izņēmumu bez atmiņas.
Piezīme: Sakarā arRedis izmanto sistēmas peidžeru failus, lai piešķirtu kaudzes atmiņu,
Windows uzdevumu pārvaldnieks vai citi rīki, piemēram, ProcessExplorer, ne vienmēr parāda precīzu darbkopas atmiņas lietojumu. Vienkārši sakot,Uzdevumu pārvaldnieka parādītais atmiņas lietojums nav precīzs!!!
Izmantojiet komandu info, lai vaicātu šādi:
# Atmiņa 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
Iestatījumi ir šādi:
1073741824 baiti = 1G Pēc iestatījuma redis .net klients pievieno kešatmiņas kļūdu šādi:
OOM komanda nav atļauta, ja izmantotā atmiņa > 'maxmemory'. # MAXMEMORY POLICY: kā Redis izvēlēsies, ko noņemt, kad maxmemory # ir sasniegts. Varat izvēlēties kādu no piecām darbībām:
# # volatile-lru -> noņemiet atslēgu ar derīguma termiņu, izmantojot LRU algoritmu # allkeys-lru -> noņemt jebkuru atslēgu saskaņā ar LRU algoritmu # gaistošs-nejaušs -> noņemiet nejaušu atslēgu ar derīguma termiņa beigu kopu # allkeys-random -> noņemt nejaušu atslēgu, jebkuru atslēgu # volatile-ttl -> noņemiet atslēgu ar tuvāko derīguma termiņu (neliels TTL) # noeviction -> vispār nebeidzas, vienkārši atgrieziet kļūdu rakstīšanas operācijās
# # Piezīme: izmantojot kādu no iepriekš minētajām politikām, Redis atgriezīs kļūdu rakstīšanas laikā # operācijas, kad nav piemērotu atslēgu izlikšanai.
# # Šo komandu rakstīšanas dienā ir: set setnx setex pievienot # incr decr rpush lpush rpushx lpush linsert lset rpoplpush sadd # Sinter SinterStore Sunion SunionStore Sdiff Sdiffstore Zadd Zincrby # zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby # getset mset msetnx exec sort
# # Noklusējums ir:
# # maxmemory-politika noeviction #MAXMEMORY策略: Kad MAXMEMORY
#到达. Varat izvēlēties kādu no piecām darbībām:
#
#volatile LRU-> izmanto LRU algoritmu, lai noņemtu atslēgas ar derīguma termiņa beigām
#allkeys LRU-> izdzēš jebkuru atslēgu saskaņā ar LRU algoritmu
#volatile nejaušs - > noņemt nejaušas atslēgas ar derīguma termiņu
#allkeys nejauši > izdzēš nejaušas atslēgas, patvaļīgas atslēgas
#volatile TTL-> Dzēst atslēgu ar tuvāko derīguma termiņu (neliels TTL)
#noeviction-> vispār nebeidzas, atgriež tikai rakstīšanas operācijas kļūdas
#
#注意: Jebkurai no iepriekš minētajām stratēģijām Redis atgriež kļūdu rakstīšanas laikā
#操作, ja nav piemērotas izlikšanas atslēgas.
#
#在编写之日 šīs komandas ir: 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 exec sorting
#
#默认值为:
#
#maxmemory策略无效 Jums ir jāiestata arī šādas konfigurācijas:
Noklusējuma redis iestatījums ir ļoti konservatīvs, tas ir, tas netiek saglabāts pēc atmiņas ierobežojuma pārsniegšanas, un politiku var mainīt uz LRU algoritmu (nesen vismazāk izmantotais algoritms) - jaunā saglabātā informācija aizstās veco informāciju.
Pārskats:
(Beigas)
|