Redis---キャッシュ(キー値型NoSQL)
6225 ワード
全称:REmote DIctionary Server歴史:イタリア人Salvatore Sanfilippo、2009年にRedisがオープンし、2010年からRedisの開発作業はVMwareが主宰し、2013年からRedisの開発はPivotalが公式サイトを後援した.https://redis.io/Windows版Redis:https://github.com/MicrosoftArchive/redis
同類の製品はMemcacheに比べて:データ型は単一で、StringだけタオバオTairを洗う:単一ノードの性能はわりに低くて、コミュニティは活発ではありません
LinuxはRedis 1をインストールし、公式サイトでredisをダウンロードする.tar.gz;/usrにアップロードします.tar -zxvf redis.tar.gz 2、redisインストールディレクトリに入り、make 3、redis.conf設定bind 0.0.0.0;protected-mode no 4、起動:/usr/redis/src/redis-server/usr/redis/redis.confは、指定されたプロファイルを表示する必要があります.そうしないと、プロファイルは有効になりません.5、shellが新しくなります.クライアント:/usr/redis/src/redis-cli 6、インタフェースの傍受を確認します.netstat-tunlp|grep 6379、テスト時に外部がアクセスできることを確保し、クラウドホストセキュリティグループのルールを設定し、6379ポートがオープンしているかどうかをスキャンします.
原理単一スレッド
データ型
String:文字列、整数、浮動小数点数List:Stringをノードとする双方向チェーンテーブルSet:String重複しない集合zSet:秩序集合Hash:Map HyperLog:基数
クライアントコマンド
クリア:flushdbマッチングを表示するkey:keys*db:select 2//クライアントがデフォルトで開いているのは0番目のdbです.合計16個のdb=========================================================================================================================================================================================ncrbyfloat key float
=================================================================================================================================================================================================キー:hexists key field削除フィールド:hdel key field 1 field 2フィールドプラス整数:hincrby key field intフィールドプラス浮動小数点数:hincrbyfloat key field int
====================================================================ノード:lrange list start endチェーンテーブル長を取得する:llen keyポップアップノード:lpop key count value以下のノードを削除する:lrem key count valueチェーンテーブルを切り取り、startをstop:ltrim key start stopに保持する
右側操作rpush key node 1 node 2 rpushx list node rpop key
ブロック操作blpop key timeout:lpopにノードがない場合、ノードまたはtimeoutがあるまでブロックします.
==============================================================================================================================================================================================ionstore des key 1 key 2すべてのメンバーを取得:smembers keyランダムにメンバーをポップアップ:spop keyが含まれているかどうか:sismember key member除去要素:srem key member 1 member 2
=============================================================================================================================================
順序関連操作追加要素:zadd key score 1 value 1 score 2 value 2範囲内の数値を取得する要素:zcount key(min max)メンバー値範囲内の要素を取得する:zlexcount key[min max]複数の要素を取得:zrange key start end範囲内の要素を削除する:zremrangebyscore key min範囲内の要素を削除する:zremrangebylex key min max複数の要素を削除する:zremrangebyscore key start endメンバー値を取得する:zscore key member
==========================================================================================================================
楽観ロック:非ブロックロック、すなわち他のスレッドをブロックしないで、同時にある程度データの一致性を保証することができて、CASメカニズムでCAS:compare and swapを実現することができて、マルチスレッドの情況の下でロックを使って性能の損失をもたらす1種のメカニズムを解決します;一つのスレッドは、一つのデータを変更する前に、まず彼の現在値と以前値を比較し、一致しない場合はABAの修正を放棄する問題:CASメカニズムの下で、一つのデータの前値はAで、現在値もAで、前後は一致して、変化していないと考えられる;A->B->A Redisを2回変更してABAの問題を解決する可能性があります.各データにはversionが付属しており、versionが変化しているかどうかを確認します.
=============================================================================================1別のクライアントで公開:publish channel_2
=========================================================================ビットは秒タイムアウト設定を表示します:pptl key milliseconds//単位はミリ秒タイムアウト設定をキャンセルします:persist key不活性回収:タイムアウト後にgetをもう一度呼び出してから本当に回収されます
コンフィギュレーション
場所:インストールディレクトリ/redis.conf AOFモード持続化:Append-ONly File、すべての書き込み動作LRUアルゴリズムを記録する:複数のサンプルの中で最も少ないサンプルTTLアルゴリズムを使用する:複数のサンプルの中で残りの生存時間(タイムアウト)が最も短いサンプルを見つける
マスターコピー
1.redisを配置する.conf
2、コマンドで本slaveのmaster slaveofserver portを変更する
哨兵モード
1、mater、書くだけ
2、slave、読むだけ
3、哨兵sentinelを配置する.conf哨兵プロセスの起動スクリプトもredisのインストールパッケージ内にあり、1台のホスト上でredis-serverプロセスとredis-sentinelプロセスの主観的なオフラインを同時に起動することができる:1つのsentinelはmaterダウンタイムを発見して客観的なオフライン:1つのsentinelは投票を開始して、masterダウンタイムを確認して、すべてのsentinelにmasterを切り替えることを通知します
4、起動プロセスの起動順序:master server->slave server->sentinel起動哨兵プロセス:/usr/redis/src/redis-sentinel/usr/redis/sentinel.conf
プロキシモード
Twitter社が出品しているTwemproxyは、Redisの代理店として使用できます
クラスタモード
歩哨モードとの違い:メインノードには複数台があり、ノードからそれぞれ1つのメインノードに追随し、メインノードに歩哨を持参し、故障したノードをラインオフする.利点:マルチノード書き込み可能;欠点:ネットワークIOの比較的頻繁なスライス機能:すべてのkeyは16384個のスロットビットslotに分割され、スロットのhash関数はcrc 16(key)%16384であり、複数のプライマリノードは16384個のスロットに分割される.データ操作要求はランダムにプライマリノードに配布され、データのkeyが属するスロットがこのノードにない場合、リクエスト側に正しいプライマリノードを要求するように通知される.
redisクラスタ構築1、複数(6個を例に)の単一ノードredisをインストールし、クラスタ機能cluster-enabled yesを開くように構成し、2を起動し、1つのノードを選択してrubyスクリプトを実行してクラスタインストールruby:yum install-y rubyインストールrubygems:yum install-y rubygemsを初期化し、rubyパッケージ管理ツールインストールredis.gem:gem install redis 3、初期化クラスタ:/usr/redis/src/redis-trib.rb create --replicas 1 IP_1:ポートIP_2:ポートIP_3:ポートIP_4:ポートIP_5:ポートIP_6:ポート4、クライアントでクラスタを接続する:redis/src/redis-cli-h 127.0.0.1-p 7001-c 5、クラスタを接続した後、クラスタ状態を照会する:cluster info;cluster nodes;この時点でスライスが完了しています(スロットが割り当てられています)
スライススキーム
1、クライアントスライス:性能がよく、実現が簡単で、位置決めされた問題;侵入業務2、エージェントスライス:コスト増加、性能低下3、クラスタスライス
アリ雲
クラウドデータベースRedis版
同類の製品はMemcacheに比べて:データ型は単一で、StringだけタオバオTairを洗う:単一ノードの性能はわりに低くて、コミュニティは活発ではありません
LinuxはRedis 1をインストールし、公式サイトでredisをダウンロードする.tar.gz;/usrにアップロードします.tar -zxvf redis.tar.gz 2、redisインストールディレクトリに入り、make 3、redis.conf設定bind 0.0.0.0;protected-mode no 4、起動:/usr/redis/src/redis-server/usr/redis/redis.confは、指定されたプロファイルを表示する必要があります.そうしないと、プロファイルは有効になりません.5、shellが新しくなります.クライアント:/usr/redis/src/redis-cli 6、インタフェースの傍受を確認します.netstat-tunlp|grep 6379、テスト時に外部がアクセスできることを確保し、クラウドホストセキュリティグループのルールを設定し、6379ポートがオープンしているかどうかをスキャンします.
原理単一スレッド
データ型
String:文字列、整数、浮動小数点数List:Stringをノードとする双方向チェーンテーブルSet:String重複しない集合zSet:秩序集合Hash:Map HyperLog:基数
クライアントコマンド
クリア:flushdbマッチングを表示するkey:keys*db:select 2//クライアントがデフォルトで開いているのは0番目のdbです.合計16個のdb=========================================================================================================================================================================================ncrbyfloat key float
=================================================================================================================================================================================================キー:hexists key field削除フィールド:hdel key field 1 field 2フィールドプラス整数:hincrby key field intフィールドプラス浮動小数点数:hincrbyfloat key field int
====================================================================ノード:lrange list start endチェーンテーブル長を取得する:llen keyポップアップノード:lpop key count value以下のノードを削除する:lrem key count valueチェーンテーブルを切り取り、startをstop:ltrim key start stopに保持する
右側操作rpush key node 1 node 2 rpushx list node rpop key
ブロック操作blpop key timeout:lpopにノードがない場合、ノードまたはtimeoutがあるまでブロックします.
==============================================================================================================================================================================================ionstore des key 1 key 2すべてのメンバーを取得:smembers keyランダムにメンバーをポップアップ:spop keyが含まれているかどうか:sismember key member除去要素:srem key member 1 member 2
=============================================================================================================================================
順序関連操作追加要素:zadd key score 1 value 1 score 2 value 2範囲内の数値を取得する要素:zcount key(min max)メンバー値範囲内の要素を取得する:zlexcount key[min max]複数の要素を取得:zrange key start end範囲内の要素を削除する:zremrangebyscore key min範囲内の要素を削除する:zremrangebylex key min max複数の要素を削除する:zremrangebyscore key start endメンバー値を取得する:zscore key member
==========================================================================================================================
楽観ロック:非ブロックロック、すなわち他のスレッドをブロックしないで、同時にある程度データの一致性を保証することができて、CASメカニズムでCAS:compare and swapを実現することができて、マルチスレッドの情況の下でロックを使って性能の損失をもたらす1種のメカニズムを解決します;一つのスレッドは、一つのデータを変更する前に、まず彼の現在値と以前値を比較し、一致しない場合はABAの修正を放棄する問題:CASメカニズムの下で、一つのデータの前値はAで、現在値もAで、前後は一致して、変化していないと考えられる;A->B->A Redisを2回変更してABAの問題を解決する可能性があります.各データにはversionが付属しており、versionが変化しているかどうかを確認します.
=============================================================================================1別のクライアントで公開:publish channel_2
=========================================================================ビットは秒タイムアウト設定を表示します:pptl key milliseconds//単位はミリ秒タイムアウト設定をキャンセルします:persist key不活性回収:タイムアウト後にgetをもう一度呼び出してから本当に回収されます
コンフィギュレーション
場所:インストールディレクトリ/redis.conf AOFモード持続化:Append-ONly File、すべての書き込み動作LRUアルゴリズムを記録する:複数のサンプルの中で最も少ないサンプルTTLアルゴリズムを使用する:複数のサンプルの中で残りの生存時間(タイムアウト)が最も短いサンプルを見つける
requirepass "abcdefg" #
# , Redis server ,
save 900 1 # 900 1 ,
save 300 10 # 300 10 ,
save 60 10000 # 60 10000 ,
# save ,
dbfilename dump.rdb #
appendonly no # AOF ,
appendfilename "appendonly.aof" # AOF
##
maxmemory-samples 5 # LRU TTL
maxmemory-policy noeviction #
maxmemory-policy volatile-ttl # TTL
maxmemory-policy volatile-random #
maxmemory-policy allkeys-random #
maxmemory-policy volatile-lru # LRU
maxmemory-policy allkeys-lru # LRU
マスターコピー
1.redisを配置する.conf
bind 0.0.0.0 # IP ,
slaveof server port # master,
2、コマンドで本slaveのmaster slaveofserver portを変更する
哨兵モード
1、mater、書くだけ
bind 0.0.0.0
2、slave、読むだけ
bind 0.0.0.0
slaveof server port # master
masterauth pass1 # master
3、哨兵sentinelを配置する.conf哨兵プロセスの起動スクリプトもredisのインストールパッケージ内にあり、1台のホスト上でredis-serverプロセスとredis-sentinelプロセスの主観的なオフラインを同時に起動することができる:1つのsentinelはmaterダウンタイムを発見して客観的なオフライン:1つのsentinelは投票を開始して、masterダウンタイムを確認して、すべてのsentinelにmasterを切り替えることを通知します
protected-mode no # ,
# sentinel monitor ip port master
sentinel monitor mymaster ip port 2 # redis, 127.0.0.1, Spring
sentinel auth-pass mymaster pass1
4、起動プロセスの起動順序:master server->slave server->sentinel起動哨兵プロセス:/usr/redis/src/redis-sentinel/usr/redis/sentinel.conf
プロキシモード
Twitter社が出品しているTwemproxyは、Redisの代理店として使用できます
クラスタモード
歩哨モードとの違い:メインノードには複数台があり、ノードからそれぞれ1つのメインノードに追随し、メインノードに歩哨を持参し、故障したノードをラインオフする.利点:マルチノード書き込み可能;欠点:ネットワークIOの比較的頻繁なスライス機能:すべてのkeyは16384個のスロットビットslotに分割され、スロットのhash関数はcrc 16(key)%16384であり、複数のプライマリノードは16384個のスロットに分割される.データ操作要求はランダムにプライマリノードに配布され、データのkeyが属するスロットがこのノードにない場合、リクエスト側に正しいプライマリノードを要求するように通知される.
redisクラスタ構築1、複数(6個を例に)の単一ノードredisをインストールし、クラスタ機能cluster-enabled yesを開くように構成し、2を起動し、1つのノードを選択してrubyスクリプトを実行してクラスタインストールruby:yum install-y rubyインストールrubygems:yum install-y rubygemsを初期化し、rubyパッケージ管理ツールインストールredis.gem:gem install redis 3、初期化クラスタ:/usr/redis/src/redis-trib.rb create --replicas 1 IP_1:ポートIP_2:ポートIP_3:ポートIP_4:ポートIP_5:ポートIP_6:ポート4、クライアントでクラスタを接続する:redis/src/redis-cli-h 127.0.0.1-p 7001-c 5、クラスタを接続した後、クラスタ状態を照会する:cluster info;cluster nodes;この時点でスライスが完了しています(スロットが割り当てられています)
スライススキーム
1、クライアントスライス:性能がよく、実現が簡単で、位置決めされた問題;侵入業務2、エージェントスライス:コスト増加、性能低下3、クラスタスライス
アリ雲
クラウドデータベースRedis版