この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 47166|答える: 1

[出典] Redis MISCONF RedisはRDBスナップショットを保存するように設定されています

[リンクをコピー]
2021年5月14日 21:18:50に投稿 | | | |
StackExchange.Redisを使ってredisキャッシュを操作すると、エラーは以下の通りです:

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.

一時的な解決策、redis.windows.confファイルを修正してください。Redisのサービスを再起動する必要があります、次のように設定されます:
Redisサービスを再起動したくない場合は、redis-cliコマンドを使って以下のように設定できます:



説明は以下の通りです。
# デフォルトでは、RDBスナップショットが有効になるとRedisは書き込みの受け入れを停止します
#(少なくとも1つのセーブポイント)と最新のバックグラウンドセーブが失敗しました。
# これによりユーザーには(厳しい意味で)データが永続化していないことを認識できます
#正しくディスクに、そうでなければ誰も気づかないでしょうし、
# 災難が起こる。
#
# バックグラウンドセーブが再び動き出せば、Redisは
# 自動的に再び書き込みを許可します。
#
# しかし、もしあなたがRedisサーバーの適切な監視を設定しているなら
#および持続性については、この機能を無効にするとRedisが
# ディスクに問題があってもいつも通りに動くこと、
# 許可など。
簡単に言えば、Redisはメインプロセスをフォークして、ハードディスクにデータを保存する際にメインプロセスが死んだふりを防ぐ必要があり、その後フォークプロセスでハードディスクへのデータ保存の操作を完了する必要があります。メインプロセスが4GBのメモリを使用している場合、フォークサブプロセスが必要な場合はさらに4GBが必要で、その時点でメモリが不足し、フォークが失敗し、データ保存用ハードディスクも故障します。

redisのログを見るには、redis.windows.confを次のように設定する必要があります:

# ログファイル名を指定してください。 また、「stdout」は強制に使うこともできます
# Redisは標準出力にログを取る。
logfile "E:/Redis-x64-3.2.100/redis.txt"

ログの例外は以下の通りです:

[8984] 5月14日 14:05:09.060 * PID 8672によってバックグラウンドセーブ開始
[8672] 5月14日 14:05:09.169 #
Windows版のRedisは、システムページングファイルからヒープメモリを予約しています
永続化操作に使われるフォークされたプロセスと共有するために。 現時点では、
システムページングファイル。 システムページングファイルのサイズを大きくすることができます。
時には再起動でシステムページングファイルが十分にデフラグされることもあります。
この作戦は成功裏に完了する。

Redisは続行できません。 退出。
[8984] 5月14日 14:05:09.278 # フォーク操作失敗



分析の結果、最大ヒープサイズの「maxheap」構成の問題は利用可能なメモリ不足に起因することが判明しました。

解決

Redisの設定ファイル「redis.windows.conf」を開き、以下のコードセクションを見つけてください。


# Redis ヒープは maxmemory で指定された値より大きくなければなりません
# フラグは、ヒープアロケータが独自のメモリ要件を持ち、
# 山の断片化は避けられない。 もしmaxmemoryフラグが
# 指定された場合、maxheapは1.5*maxmemoryに設定されます。 もし最大ヒープフラグが
#とmaxmemoryを指定すると、maxheapフラグは自動的に
#が1.5*maxmemoryより小さい場合は増加します。
#  
# マックスヒープ<bytes>

この設定を追加するのは良いことです。Redisのサービスが起動しません!!!!!!!
デフォルト値は:maxheap 1024000000≈976.56M

このコメントはコンフットファイルには見つかりませんでしたが、こんな感じのものを見つけました:
# 指定されたバイト数を超えてメモリを使わないでください。
# メモリ制限に達したら、Redis はキーの除去を試みます
#選択された退去ポリシー(maxmemory-policy参照)に従っています。
#
# Redisがポリシーに従ってキーを削除できない場合、あるいはポリシーが
# 「noeviction」に設定すると、Redisはコマンドに対してエラー応答を開始します
#はSET、LPUSHなど、より多くのメモリを消費し、継続します
# GETのような読み取り専用コマンドに応答するために。
#
# このオプションは通常、RedisをLRUキャッシュとして使う場合や設定時に便利です
# インスタンスのハードメモリ制限(「noeviction」ポリシーを使用)。
#
# 警告:最大メモリがオンのインスタンスに奴隷を割り当てている場合、
# 奴隷に食料を与えるために必要な出力バッファの大きさを差し引く
#使用済みメモリ数から、ネットワークの問題や再同期が起こるため、
# キーが追い出されるループをトリガーし、その結果、出力が
# 奴隷のバッファはDELでいっぱいで、削除がトリガーとなるキーが追い出されています
#のキー数を増やし、データベースが完全に空になるまで続きます。
#
# 要するに... 奴隷がいる場合はロワーを設定することをおすすめします
#maxmemoryの制限を設けて、システムにスレーブ用の空きRAMがあるようにします。
# 出力バッファ(ただしポリシーが「noeviction」の場合は不要)。
#
# 警告:maxmemoryを設定しないと、Redisは
# メモリ外例外はヒープの上限に達した場合です。
#
# 注:Redisはシステムページングファイルを使ってヒープメモリを割り当てるため、
# ワーキングセットのメモリ使用状況はWindowsタスクマネージャーやその他の方法で表示されています
# ProcessExplorerのようなツールは必ずしも正確とは限りません。 例えば、右です
# RDBまたはAOFファイルのバックグラウンドセーブ後、ワーキングセットの値
#は大幅に下がる可能性があります。 正しいメモリ量を確認するために
#データを保存するためにRedisサーバーのINFOクライアントコマンドを使います。 情報
# コマンドはREDISデータを保存するために使われたメモリのみを示し、余分なデータは表示しません
#Windowsプロセスが自身の要件で使用しているメモリ。 Th3の追加金額
INFOコマンドで報告されないメモリの#は、
# ピークワーキングセットはWindowsタスクマネージャーとused_memory_peakで報告されています
#はINFOコマンドによって報告されました。
#
# マックスメモリー <bytes>

警告:ヒープの上限に達した場合、maxmemoryを設定しないとRedisはメモリ外例外で終了します。

注:以下のためRedisはシステムページングファイルを使ってヒープメモリを割り当てます

WindowsタスクマネージャーやProcessExplorerのような他のツールは、ワークセットのメモリ使用量を正確に表示できるとは限りません。 簡単に言えば、タスクマネージャーで表示されるメモリ使用量は正確ではありません!!!

infoコマンドを使って以下の方法でクエリを行ってください:

# 記憶
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



舞台設定は以下の通りです:

1073741824バイト=1G
設定後、redis .netクライアントは以下のキャッシュエラーを追加します:

「maxmemory」>メモリ使用時にOOMコマンドは許可されません。
# MAXMEMORY ポリシー:Redis が maxmemory で何を削除するかを選択する方法
#は到達した。 5つの行動から選べます:
#
# volatile-lru -> LRUアルゴリズムを用いて有効期限セットで鍵を除去します
# allkeys-lru -> LRUアルゴリズムに従って任意のキーを削除する
# volatile-random -> 有効期限セットのランダムキーを除去
# allkeys-random -> ランダムキーを除去してください、どんなキーでもいい
# volatile-ttl -> 有効期限が最も近いキーを除去(マイナーTTL)
# Noeviction -> まったく期限切れではなく、書き込み操作でエラーを返すだけです
#
# 注:上記のいずれのポリシーでも、Redisは書き込み時にエラーを返します
# 操作、立ち退きに適したキーがない場合に。
#
# 執筆時点でこれらのコマンドは以下の通りです:set setnx setex append(付け加え)です
# incr decr rpush lpush rpush lpushx lpushx linsert lset rpoplpush sadd
# 焼結 シンターストア スニオン スユニオンストア スディフ スディフストレット ザッド ジンクルビー
# Zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
# getset mset msetnx exec sort
#
# デフォルトは以下の通りです:
#
# Maxmemory-policy noeviction
#MAXMEMORY策略:MAXMEMORYのとき

#到达. 5つの行動から選べます:

#

#volatile LRU->は、期限切れセットを持つ鍵を除去するためにLRUアルゴリズムを使用します

#allkeys LRU-> LRUアルゴリズムに従って任意のキーを削除します

#volatile ランダム - 期限切れ>ランダムな鍵を除去する

#allkeys ランダム>ランダムキー、任意のキーを削除します

#volatile TTL-> 最も近い有効期限の鍵を削除(マイナーTTL)

#noeviction->は全く期限切れではなく、書き込み操作エラーだけを返します

#

#注意: 上記の戦略のいずれかに対して、Redisは書き込み時にエラーを返します

#操作、立ち退きに適した鍵がない場合に。

#

#在编写之日、これらのコマンドは以下の通りです: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策略无效
また、以下の構成を設定する必要があります:

デフォルトのredis設定は非常に保守的で、メモリ制限を超えた後は保存されず、ポリシーはLRUアルゴリズム(最近最も使われていないアルゴリズム)に変更可能です。新たに保存された情報が古い情報に置き換えられます。

復習:

RedisにおけるRDBとAOFの永続性の違い
https://www.itsvse.com/thread-9555-1-1.html

DockerのインストールはRedisキャッシュを実行します
https://www.itsvse.com/thread-8995-1-1.html

例として、Redisのキャッシュ貫通、キャッシュアバランチ、キャッシュのブレイクダウンについて説明します
https://www.itsvse.com/thread-8968-1-1.html

Redisのワイルドカードでキーを一括削除する
https://www.itsvse.com/thread-7957-1-1.html

CentOS 7インストール Redis 5.0.3チュートリアル
https://www.itsvse.com/thread-7201-1-1.html

CentOSのphp 5.5.7でredis拡張をインストールしてください
https://www.itsvse.com/thread-7200-1-1.html

Redisインスタンスに保存可能なキーは何個で、最大キーや値はどれくらいですか?
https://www.itsvse.com/thread-6848-1-1.html

redis chineseの問題は正しく表示できません
https://www.itsvse.com/thread-5032-1-1.html

Redisはリモートアクセスを可能にします
https://www.itsvse.com/thread-5011-1-1.html

WindowsがRedisサービスを起動できず、エラー1067:プロセスが予期せず終了します。
https://www.itsvse.com/thread-5010-1-1.html

CentOSはRedis 4.0.8をインストールしました
https://www.itsvse.com/thread-4614-1-1.html

Redisはリモート接続とアクセスパスワードを設定します
https://www.itsvse.com/thread-4101-1-1.html

REDISはデータキャッシュを空にします
https://www.itsvse.com/thread-4027-1-1.html

REDISの永続化設定と持続性のオフ
https://www.itsvse.com/thread-4012-1-1.html

redisにおけるセーブとbgsaveの違い
https://www.itsvse.com/thread-4010-1-1.html

Redisの2つの永続性手法と原則
https://www.itsvse.com/thread-4009-1-1.html

Redisには3つのスタート方法があります
https://www.itsvse.com/thread-4008-1-1.html

Redisによるコマンドラインウィンドウの隠し方法
https://www.itsvse.com/thread-2988-1-1.html

Redis ハッシュ ハッシュ ハッシュ値問題
https://www.itsvse.com/thread-2587-1-1.html

Redisを使う前に知っておくべき5つのこと
https://www.itsvse.com/thread-2580-1-1.html

Redisはデフォルトのポート番号を変更し、アクセスパスワードを設定します
https://www.itsvse.com/thread-2577-1-1.html

Redis Windows 64ビットダウンロード、公式ダウンロードアドレス
https://www.itsvse.com/thread-2576-1-1.html

Redisは詳細な説明のためにLuaスクリプトを使用しています
https://www.itsvse.com/thread-9634-1-1.html

Redis ベンチマーク性能テスト
https://www.itsvse.com/thread-9645-1-1.html

(終わり)






先の:NPOIによるセル年代型の判断
次に:NPOIオペレーション・エクセル詳細解説
 地主| 2023年7月12日 21:08:55に投稿 |
Redis メモリー8の排除戦略
https://www.itsvse.com/thread-10626-1-1.html
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com