Redisのいくつかの問題


抜粋https://mp.weixin.qq.com/s/LGkS_2wkcXhThfOiRRQC7Q
一、Redisの通信プロトコルは何ですか.
Redisの通信プロトコルはテキストプロトコルであり、はい、RedisサーバはクライアントとRESP(Redis Serialization Protocol)プロトコルを介して通信します.
二、RedisはACID事務があるかどうか
1、原子性
トランザクションに原子性があるとは、データベースがトランザクション内の複数のオペレーションを1つの全体として実行し、サービスがトランザクション内のすべてのオペレーションを実行するか、1つのオペレーションも実行しないことを意味します.
a、なぜRedisはロールバックをサポートしないのか
これはやはりログを書くことと関係があり、Redisは操作が完了してからAOFログ記録を行い、AOFログの位置付けは操作を記録する命令記録にすぎない.
2、一致性
トランザクションに一貫性があるとは、トランザクションが実行される前にデータベースが一貫している場合、トランザクションが実行された後でも、トランザクションが成功したかどうかにかかわらず、データベースが一貫している必要があります.不明
3、隔離性
独立性とは、データベースに複数のトランザクションが同時実行され、各トランザクション間で相互に影響を及ぼさず、同時実行されたトランザクションとシリアル実行されたトランザクションの結果が完全に同じであることを意味します.
Redisは単一スレッド操作であるため、独立性には生まれつきの独立メカニズムがあり、Redisがトランザクションを実行する場合、Redisのサービス側はトランザクションの実行中にトランザクションを中断しないことを保証するため、Redisトランザクションは常にシリアルで実行され、トランザクションも独立性を備えている.
4、持続性
トランザクションの永続性とは、トランザクションの実行が完了すると、そのトランザクションを実行した結果が永続化されたストレージに保存され、サーバがトランザクションの実行が完了した後にダウンタイムしても、実行されたトランザクションの結果が失われないことを意味します.
Redisが永続化を備えているかどうかは、Redisの永続化モードに依存します.
  • は純メモリで動作し、持続性がなく、サービスが停止すると、すべてのデータが失われます.
  • RDBモードは、RDBポリシーに依存して、Bgsaveがポリシーを満たす場合にのみ実行され、非同期実行はRedisの永続化を保証することはできません.
  • AOFモードで、appendfsyncをalwaysに設定した場合にのみ、プログラムはコマンド同期を実行してディスクに保存されます.このモードでは、Redisは永続化されます.(appendfsyncをalwaysに設定するのは、理論的に持続化は可能であるが、一般的にはそうはしない)
  • 簡単なまとめ:
  • Redisは一定の原子性を備えているが,ロールバックはサポートされていない.
  • RedisはACIDにおける一貫性の概念を備えていない.(あるいはRedisは設計時にこれを無視する)
  • Redisは隔離性を備えている.
  • Redisは、一定のポリシーによって永続性を保証することができる.

  • 三、Redisの楽観ロックWatchはどのように実現したのか
    RedisのWatchメカニズムは、Redis自体の単一スレッドのメカニズムを利用し、watched_を採用していることが多い.keysのデータ構造とシリアルプロセスは楽観的なロックメカニズムを実現した.
    四、Redisはどのように持続化したのか
    1、RDB
    Bgsaveを使用すると、RedisはサブプロセスをForkし、スナップショットの永続化はサブプロセスに渡され、親プロセスはオンラインビジネスの要求を処理し続けます.
    2、AOF
    AOFはRedis操作命令のログ記憶であり、AOF書き込み操作はRedisが業務ロジックを処理した後、一定のポリシーに従ってAOFログディスクをいくつか行うのもそのためであり、Redisは処理ロジックが前であるため操作ログを記録した後であり、Redisがロールバックできない原因の一つでもある.
    しかし、AOFログには2つの大きな問題があります.
    1、    AOF           ,              ,AOF           。
    
    2、       AOF        ,          ,           。
    

    bgrewriteaof:上記の問題に対して、Redisは2.4以降もbgrewriteaofを用いてAOFログを痩身している.
    bgrewriteaofコマンドは、AOFファイルの書き換え操作を非同期で実行するために使用されます.書き換えると、現在のAOFファイルのボリューム最適化バージョンが作成されます.
    3、RDBとAOFの混合組み合わせモード
    Redisをリカバリする場合、Bgsaveのポリシーのため、RDBの方法を採用すると、大量のデータが失われる可能性があります.
    AOFモードを採用した場合,AOF操作ログ再生により回復し,再生AOFログはRDBよりずっと長い.
    Redis 4.0の後,新しい永続化モードを導入し,混合永続化し,RDBのファイルと局所増分AOFファイルを結合した.
    RDBは、AOFがフル・ログである必要はなく、前回のRDBストレージの開始からこの期間のインクリメンタルAOFログを保存するだけで、長い時間間隔で保存することができる.一般的に、このログの量は非常に小さい.
    五、Redisはどのように期限切れの削除策略を制定したのか
    ≪タイミング削除|Time Delete|emdw≫:キーの経過時間を設定するとともに、キーの有効期限が切れた時点で、キーの削除操作を直ちに実行するタイマを作成します.
    不活性削除:キーが期限切れになるのを放置しますが、キースペースからキーを取得するたびに、キーが期限切れになっているかどうかをチェックし、期限切れになったら削除します.
    定期削除:一定の時間ごとに、プログラムはデータベースを検査し、中の期限切れキーを削除します.どのくらいの期限切れキーを削除するかは、アルゴリズムによって決まります.
    Redisが採用した期限切れポリシー:不活性削除+定期削除