回答:
これについてhttp://redis.io/topics/persistenceで読むことをお勧めします。基本的に、メモリ内の格納のみを使用してパフォーマンスを向上させると、保証された永続性が失われます。メモリにINSERTするシナリオを想像してください。ただし、ディスクに永続化される前に電源が失われます。データが失われます。
Redisは、いわゆる「スナップショット」をサポートしています。これは、ある時点(たとえば、1時間ごと)にメモリ内のwhatsの完全なコピーを実行することを意味します。2つのスナップショット間で電源が失われると、最後のスナップショットとクラッシュの間の時間からデータが失われます(停電である必要はありません。)。Redisは、ほとんどのNoSQL-DBと同様に、データの安全性とパフォーマンスをトレードオフします。
ほとんどのNoSQLデータベースは、このリスクを最小限に抑えるために、複数のノード間のレプリケーションの概念に従っています。Redisは、データの一貫性を保証するデータベースではなく、より高速なキャッシュと見なされています。したがって、その使用例は通常、実際のデータベースの使用例とは異なります。たとえば、セッション、パフォーマンスカウンターなどを格納して、比類のないパフォーマンスを実現し、クラッシュした場合でも実際の損失はありません。ただし、注文/購入履歴などの処理は、従来のデータベースの仕事と見なされています。
Redisサーバーは、すべてのデータをHDDに時々保存するため、ある程度の永続性が提供されます。
次のいずれかの場合にデータを保存します。
しかし、redisのデータは実際には永続的ではありません。
BGSAVE
操作は、十分な空きRAMがある場合にのみ実行できます(追加のRAMの量は、redis DBのサイズと同じです)注意: BGSAVE
RAM要件は実際の問題です。これは、実行するRAMがなくなるまでredisは動作し続けるためですが、HDDへのデータの保存がはるかに早く停止します(RAMの約50%)。
詳細については、Redisの永続性を参照してください。
それは構成の問題です。Redisでは、データの永続性をまったく、部分的に、または完全に保持できます。最良の決定は、プロジェクトの技術的およびビジネス上のニーズによって決まります。
永続性に関するRedisのドキュメントによれば、インスタンスを設定して、時々、または各クエリでデータをディスクに保存することができます。これらはAOFとRDBの2つの戦略/メソッドを提供します(そのときの詳細については、ドキュメントを参照してください)。それぞれを単独で、または一緒に使用できます。
「SQLのような永続性」が必要な場合は、次のように述べています。
一般的な指摘は、PostgreSQLが提供できるものと同等のデータの安全性が必要な場合は、両方の永続化メソッドを使用する必要があることです。
答えは一般的にはいですが、より完全な答えは、保存しようとしているデータの種類によって異なります。一般に、より完全な短い答えは次のとおりです。
そうは言っても、デフォルトではRedis は定期的にデータスナップショットを保持します(どうやらこれは1分ごとですが、これは確認していません。これは、以下の記事で説明されています。これは基本的なイントロです):
http://qnimate.com/redis-permanent-storage/
TL; DR
公式ドキュメントから:
- RDBパーシスタンス [デフォルト]は、指定された間隔でデータセットの特定の時点のスナップショットを実行します。
- AOFの永続性 (明示的に構成する必要があります)は、サーバーが受信したすべての書き込み操作をログに記録します。これはサーバーの起動時に再び再生され、元のデータセットを再構築します。
これが必要な場合、Redis をAOF永続化用に明示的に構成する必要があります。これにより、パフォーマンスが低下するだけでなく、ログが増大します。限られた量のデータフローが比較的信頼性の高い状態で持続するのに十分な場合があります。