redisとmemcacheの違いとmemcacheの期限切れポリシー

2956 ワード

https://www.zhihu.com/question/19829601
 
https://blog.csdn.net/hhjianlong/article/details/73928653
memcacheのmutex設計モード
https://timyang.net/programming/memcache-mutex/
memcache分散ロック
 
//cache.add (key ,value);

  service1      ,             ,         ,       ,        ,          ?


public void sevice1(){

if(cache.add(key,value)){
	//      ,       。
 }else{
       //       ,           。
 }
                  。

 }



            ,       。




         ,               ,           ,    。

                      ,                 。
(    :          token,    ,
                       ,             ,
         ,  token,      ,           token 
   ,         ,  ,         ,    token    ,
        。            。
)

memcacheとredisはインターネット階層アーキテクチャで最もよく使われるKVキャッシュである.多くの学生は型を選ぶ時、memcacheを選ぶのかredisを選ぶのか悩んでいます.
memcacheが提供する機能はredisが提供する機能のサブセットで、あまり考えなくてもいいです.redisを選ぶのは間違いありませんか.
   
redis傾向:
複雑なデータ構造:valueがハッシュ、リスト、集合、秩序化集合のような複雑なデータ構造である場合、mcはこれらのニーズを満たすことができないためredisを選択します.ユーザー注文リスト、ユーザーメッセージ、投稿コメントリストなど.
永続化:mcは永続化のニーズを満たすことができず、redisを選択するしかありません.しかし、redisを本当にデータベースとして使用しないでください.
  • redisの定期スナップショットでは、
  • のデータが失われないことは保証されません.
  • redisのAOFは効率を低下させ、大きなデータ量
  • をサポートできない
  • redisがmysqlよりも硬化ストレージを行うことを期待しないでください.異なるツールはそれぞれ得意なことをします.
  • redisは再起動をオフにすると急速にホットデータを復元することができるが、その間にデータの変更があるとデータが一致しない可能性があるため、読み取り専用シーン、またはいくつかの不一致なビジネスシーンを許可し、redisの硬化機能
  • をオンにすることができる.
    高可用性クラスタ:redis自身がクラスタをサポートし、主従読み書き分離機能を実現し、公式にもsentinal哨兵のクラスタ管理ツールを提供し、主従監視、故障移転を実現し、memcachedがクラスタを実現するには二次開発が必要である.
    しかし、多くの場合、本当に高い利用が必要ですか?キャッシュはcache missを実行することが多いが、cacheが切れてdbを読むことができる
    格納内容は比較的大きい:memcache単一valueは最大1 M格納され、1 Mを超えるとredisしか使用できない.
    注意:純粋なk-vはデータ量が特に大きく、合併も大きいのでmemcacheを使うのが適切かもしれません.
  • メモリ割り当て:memcacheは予め割り当てられたメモリプールの煩わしい管理メモリを使用し、メモリ割り当て時間を節約し、redisは一時的な申請方式を使用し、kennelは破片を招く.比較的にmemcacheのほうが速い
  • memcacheはすべてのデータを物理メモリに格納します.redisには独自のVMメカニズムがあり、理論的には物理メモリよりも多くのデータを格納することができ、データが過剰になるとswapを引き起こし、冷たいデータをディスクにブラシすることができます.データ量が大きい場合に比べてmemcacheの方が速い
  • memcacheは非ブロックIO多重モデルを使用し、redisも非ブロックIO多重モデルを使用しているが、redisは非KVストレージ以外のソート、集約機能も提供しているため、これらの機能を実行する際に複雑なCPU計算が行われ、IOスケジューリング全体をブロックする.この点、redisは機能が多いため、mcはより速くなります.
  • memcacheは、マルチスレッド、プライマリスレッドリスニング、workerサブスレッド受信要求、読み書きを実行します.この過程で、ロック競合が発生する可能性があります.redisは単一スレッドを用い,ロック競合はないが,マルチコアの特性を利用して全体的なスループットを向上させることは困難である.この点からmcは少し速くなります.

  •  
    memcached期限切れポリシー:
    1、memcachedの有効期限は、最大30日で、30日を超えると記憶時にtrueが返されますが、データを取るときには取れません(このkeyは1秒後に有効期限が切れます).
    2、memcachedのキャッシュ失効ポリシーはLRU(最近最小使用)と失効ポリシーです.memcachedにデータを格納すると、永続的であっても一定期間であってもよい期限切れを設定することができますが、memcachedに割り当てられたメモリが使用済みになると、まず失効したデータが置き換えられ、次に最近最も使用されていないデータが置き換えられます.
    3、memcached内部では記録が期限切れであるかどうかを監視するのではなく、get時に記録のタイムスタンプを表示し、記録が期限切れであるかどうかを確認する.この技術は不活性期限切れと呼ばれている.このためmemcachedは,期限切れ監視にCPU時間を費やすことはない.
    4、失効値が0(デフォルト)に設定されている場合、この要素は期限切れになりません(ただし、サービス側が他の新しい要素にスペースを割り当てるために削除される可能性があります).