Redis&Redisデスクトップ管理ツールRedis Desktop Manager


Redisの概要
Redisは完全にオープンソースで無料で、BSDプロトコルを遵守し、先進的なkey-value持続化製品です.値(value)は、文字列(String)、ハッシュ(Map)、リスト(list)、セット(sets)、およびシーケンスセット(sorted sets)などのタイプであることができるため、通常、データ構造サーバと呼ばれる.
redisは高性能key-valueデータベースです.redisの出現はmemcachedのようなkeyvalueストレージの不足を大きく補償し,一部の場合関係データベースに良い補完作用を果たすことができる.Python、Ruby、Erlang、PHPクライアントを提供し、使いやすいです.問題は,このプロジェクトがまだ新しく,まだ十分に安定していない可能性があり,実際のいくつかの大規模なシステム応用例がないことである.また,mcにおける一括getの欠如も比較的大きな問題であり,常に一括取得は複数回取得したネットワークオーバーヘッドとは異なる.性能テスト結果:SET操作は毎秒110000回、GET操作は毎秒81000回、サーバー配置は以下の通り:Linux 2.6、Xeon X 3320 2.5 Ghz.stackoverflowサイトではRedisをキャッシュサーバとして使用しています.
インストール手順:Redisは高度なkey-valueデータベースです.memcachedと似ていますが、データは永続化され、サポートされているデータ型は豊富です.文字列、チェーンテーブル、コレクション、および整列コレクションがあります.サーバ側での集計、交差、補完などをサポートし、複数のソート機能もサポートします.したがって、Redisはデータ構造サーバと見なすこともできる.
Redisのすべてのデータはメモリに保存され、不定期に非同期でディスクに保存されます(「半永続化モード」と呼ばれます).データの変化のたびにappend only file(aof)に書き込むこともできます(「全持続化モード」と呼ばれます).
1、redis         ,     redisDb      。  ,redisDb.id     redis            。redisDb.dict              。redisDb.expires             。

2、 redis        ,      16     (             ),           redisServer       redisServer.db    。         select number   ,       redisServer.db[number]       。                    ,     redisDb.id   。

3、                    redisDb.dict ,           key   ,        dict     :

typedef struct dict {

//           
dictType *type;

//            
void *privdata;

//    (2 )
dictht ht[2];

//    rehash      ,  -1    rehash    
int rehashidx;

//               
int iterators;
} dict;
          ,redis                。dict                ,   0     (ht[0])              , 1            0        rehash    ,rehash             ,         。  redis      key,        dict      ht[0]       。

4、     ,             ,                   ?redis                  。    ,   key          ,         1,                    key。  ,            1,          o(1)。

redisでは、データベースはデータベース名ではなく整数インデックスによって識別されます.デフォルトでは、クライアントはデータベース0に接続されます.redisプロファイルの次のパラメータを使用して、データベースの合計数を制御します.
デフォルトでは16個です.redisを変更します.confのdatabasesコマンド:
databases 16
次のコマンドで別のデータベースに切り替えることができます.
select 2
Redisで最もよく使用されるデータ型は主に以下の5種類があります.
  ●String
  ●Hash
  ●List
  ●Set
  ●Sorted set
Redis共通コマンド
set,get,decr,incr,mget
hget,hset,hgetall
lpush,rpush,lpop,rpop,lrange
sadd,spop,smembers,sunion
zadd,zrange,zrem,zcard
Redisの永続化メカニズム
Redisは非常に豊富なメモリデータ構造タイプをサポートしているため、これらの複雑なメモリ組織方式をどのようにディスクに永続化するかは難しいので、Redisの永続化方式は従来のデータベース方式と比較的に多くの違いがあり、Redisは全部で4つの永続化方式をサポートしています.
●タイミングショット方式(snapshot)
●文に基づいてファイルを追加する方式(aof)
●仮想メモリ(vm)
●Diskstore方式
共通メモリ最適化手段とパラメータ
上記のいくつかの実装上の分析から、redisの実際のメモリ管理コストは非常に高く、すなわちメモリが過剰に消費されていることが明らかになったので、著者らはこの点についてもよく知っているので、メモリを制御し、節約するための一連のパラメータと手段を提供し、それぞれ議論します.
まず、最も重要なのは、RedisのVMオプションである仮想メモリ機能をオンにしないことです.これは、物理メモリデータを超えたデータをRedisに格納するためのメモリとディスクを交換する永続化ポリシーですが、メモリ管理コストも非常に高く、この永続化ポリシーが成熟していないため、VM機能をオフにする必要があります.あなたのredisをチェックしてください.confファイルのvm-enabledはnoです.
次にredisを設定ことが望ましい.confのmaxmemoryオプションは、Redisが物理メモリをどれだけ使用したかを示すと、後続の書き込み要求を拒否し始めます.このパラメータは、Redisが物理メモリを使用しすぎたためにswapを招くことなく、パフォーマンスに深刻な影響を及ぼし、破壊することはありません.
また、Redisは異なるデータ型に対してそれぞれ1組のパラメータを提供してメモリの使用を制御している.RedisHashはvalue内部がHashMapであることを前に詳しく分析したが、このMapのメンバー数が比較的少ない場合、1次元線形のコンパクトなフォーマットを採用してMapを記憶する.すなわち、ポインタのメモリオーバーヘッドが大幅に省ける、このパラメータ制御はredisに対応する.confプロファイルには、次の2つがあります.
  hash-max-zipmap-entries 64
  hash-max-zipmap-value 512
  hash-max-zipmap-entries
意味は、valueというMapの内部に複数のメンバーが含まれていない場合、線形コンパクトフォーマットで格納されます.デフォルトは64です.つまり、valueの内部に64人以下のメンバーがいる場合は、線形コンパクトストレージを使用し、この値を超えると自動的に本物のHashMapに変換されます.
hash-max-zipmap-valueは、valueというMap内部の各メンバー値の長さが数バイトを超えない場合、線形コンパクトストレージを採用してスペースを節約することを意味します.
以上の2つの条件のいずれかが設定値を超えると本物のHashMapに変換され、メモリを節約することはなくなります.この値が設定されているほど良いのではないでしょうか.答えはもちろん否定的ですが、HashMapの利点は、検索と操作の時間の複雑さがO(1)であることです.Hashを放棄して1次元ストレージを採用するのはO(n)の時間の複雑さです.
メンバー数が少ない場合、影響は大きくありません.そうしないと、パフォーマンスに深刻な影響を及ぼすため、この値の設定を考慮すると、全体的に最も根本的な時間コストと空間コストのバランスが取れます.
同様のパラメータは、次のとおりです.
  list-max-ziplist-entries 512
説明:listデータ型のノード数以下では、ポインタを外すコンパクトなストレージフォーマットが採用されます.
  list-max-ziplist-value 64
説明:listデータ型ノードの値サイズが何バイト未満の場合、コンパクトなストレージフォーマットが使用されます.
  set-max-intset-entries 512
説明:setデータ型内部データがすべて数値型で、どれだけのノードが含まれているか以下はコンパクトなフォーマットで格納されます.
最後に言いたいのは、Redis内部実装はメモリ割り当ての面であまり最適化されておらず、ある程度メモリフラグメントが存在するが、これはRedisのパフォーマンスのボトルネックにはならないことが多いが、Redis内部に格納されているデータの大部分が数値型であれば、Redis内部にsharedintegerを採用することでメモリ割り当てのオーバーヘッドを省くことができる.すなわち、システム起動時に1~n程度の複数の数値オブジェクトを1つのプールに割り当てる、格納データがちょうどこの数値範囲内のデータであれば、そのオブジェクトを直接プールから取り出し、カウントを参照することで共有することで、システムに大量の数値が格納された場合にも、ある程度メモリを節約する性能を向上することができる、このパラメータ値nの設定には、ソースコードのマクロ定義REDIS_を1行変更する必要があります.SHARED_INTEGERS、この値のデフォルトは10000で、自分の必要に応じて修正することができて、修正してから再コンパイルすればいいです.
まとめ:
  1.ビジネスのニーズに応じて適切なデータ型を選択し、異なるアプリケーションシーンに対応するコンパクトなストレージパラメータを設定します.
  2.ビジネスシーンでデータの永続化が不要な場合、すべての永続化方式をオフにすると、最適なパフォーマンスと最大のメモリ使用量が得られます.
  3.永続化が必要な場合は、失われたデータの一部を再起動できるかどうかに応じて、仮想メモリやdiskstore方式を使用しないで、スナップショット方式と文追加方式のどちらかを選択します.  4.Redisが存在するマシンの物理メモリを実際のメモリの総量の3/5を超えて使用しないでください. 
         
Redis Desktop Manager 
Redis Desktop Managerは、Qt 5に基づいて開発され、SSH Tunnel接続をサポートするプラットフォーム間でのRedisデスクトップ管理ツールです.
転載先:https://www.cnblogs.com/gson/p/6171933.html