Redisは簡単に紹介します.

4277 ワード

【redisとは何か】
redisは、オープンソースでC言語で記述され、ネットワークインタラクションをサポートし、メモリベースでも持続可能なKey-Valueデータベースです.
redisの公式サイトの住所、とても覚えやすくて、redisです.io.(わざわざ調べてみると、ドメイン名接尾辞ioは国家ドメイン名、british Indian Ocean territory、すなわち英領インド洋領地)
現在、Vmwareはredisプロジェクトの開発とメンテナンスを支援しています.
【redisの作者】
ドアを開けて山を見て、まず写真を見ます.
あなたの予想を裏切ったのではないでしょうか.うん、達人にはいつも変わったところがあります.
こちらはredisの作者で、Salvatore Sanfilippoと呼ばれ、イタリアのシチリア島から来て、今カタニアに住んでいます.現在Pivotalに勤務している.
【redisのインストール】
最新版redis-X.Y.Z.tar.をダウンロードgz後に解凍し、redis-X.Y.Zフォルダに入ってから直接makeすればいいです.
makeが成功すると、redis-server、redis-cliなど、srcフォルダの下にバイナリ実行可能ファイルが生成されます.
 
   
$ find . -type f -executable
./redis-benchmark // redis
./redis-check-dump // dump.rdb
./redis-cli //redis
./redis-server //redis
./redis-check-aof // AOF
./redis-sentinel //

【redis起動】
redisを起動するのは簡単です.直接./redis-serverでは、サービス・エンドを起動できます.また、ロードするプロファイルを次の方法で指定できます.
 
   
./redis-server ../redis.conf

デフォルトでは、redis-serverはdaemon以外の方法で実行され、デフォルトのサービスポートは6379です.
著者がなぜデフォルトポートとして6379を選んだのかについては、英語の上手な学生が著者のこのブログの説明を見ることができる興味深いエピソードもあります.
【redisクライアントの使用】
例を直接見てみましょう
 
   
// redis
$ ./redis-cli
// set key、value
127.0.0.1:6379> set name "roc" 
OK
// name
127.0.0.1:6379> get name 
"roc"
// redis
127.0.0.1:6379> shutdown 
127.0.0.1:6379>

【redisデータ構造–概要】
redisは高度なkey:valueストレージシステムで、valueは5つのデータ型をサポートしています.
1.文字列(strings)2.文字列リスト3.文字列集合(sets)4.秩序文字列集合(sorted sets)5.ハッシュ
keyについては、いくつか注意しなければならないことがあります.
1.keyはあまり長くないで、できるだけ1024バイトを超えないでください.これはメモリを消費するだけでなく、検索の効率を低下させます.2.keyも短すぎず、短すぎるとkeyの可読性が低下します.3.1つのプロジェクトでは、keyはuser:100000:passwdなどの統一されたネーミングモードを使用することが望ましい.
【redisデータ構造–strings】
redisの文字列タイプのみを使用し、redisの永続化機能を使用しない場合、redisはmemcacheに非常に似ていると言われています.これはstringsタイプが基礎的なデータ型であり、どのストレージシステムにも必要なデータ型であることを示しています.
最も簡単な例を見てみましょう
 
   
set mystr "hello world!" //
get mystr //

文字列タイプの使い方は、バイナリセキュリティなので、画像ファイルの内容を文字列として保存することができます.
また、文字列タイプで数値操作を行うこともできます.
 
   
127.0.0.1:6379> set mynum "2"
OK
127.0.0.1:6379> get mynum
"2"
127.0.0.1:6379> incr mynum
(integer) 3
127.0.0.1:6379> get mynum
"3"

数値操作に遭遇すると、redisは文字列タイプを数値に変換します.
INCRなどの命令自体が原子操作の特性を持っているため、redisのINCR、INCRBY、DECR、DECRBYなどの命令を完全に利用して原子カウントの効果を実現することができ、あるシーンで3つのクライアントがmynumの値(値は2)を同時に読み出し、その後1を同時に加算した操作があれば、最後にmynumの値は必ず5である.多くのサイトでは、redisのこの特性を利用して、ビジネス上の統計的なカウント要件を実現しています.
【redisデータ構造–lists】
redisのもう一つの重要なデータ構造はlistsと呼ばれ、中国語に翻訳して「リスト」と呼ばれています.
まず、redisのlistsは、下位実装では配列ではなくチェーンテーブルであることを明確にします.つまり、百万以上の要素を持つlistsにとって、頭と尾に新しい要素を挿入します.その時間的複雑さは定数レベルです.例えば、LPUSHで10要素のlists頭に新しい要素を挿入します.数千万要素のlistsヘッダに新しい要素を挿入する速度と同じであるべきです.
listsにはこのような利点があるが,チェーンテーブル型listsの要素位置決めは比較的遅く,配列型listsの要素位置決めはより速くなるという弊害がある.
Listsの一般的な動作には、LPUSH、RPUSH、LRANGEなどが含まれる.LPUSHでlistsの左側に新しい要素を挿入し、RPUSHでlistsの右側に新しい要素を挿入し、LRANGEコマンドでlistsから範囲を指定して要素を抽出することができます.いくつかの例を見てみましょう.
 
   
// list mylist, "1"
127.0.0.1:6379> lpush mylist "1" 
// mylist
(integer) 1 
// mylist "2"
127.0.0.1:6379> rpush mylist "2" 
(integer) 2
// mylist "0"
127.0.0.1:6379> lpush mylist "0" 
(integer) 3
// mylist 0 1
127.0.0.1:6379> lrange mylist 0 1 
1) "0"
2) "1"
// mylist 0
127.0.0.1:6379> lrange mylist 0 -1 
1) "0"
2) "1"
3) "2"

Listsの応用はかなり広範で、例:
1.listsを使用してメッセージキューを実装でき、MySQLのようにORDER BYでソートする必要がなく、優先順位を確保できます.2.LRANGEを利用すれば、ページング機能も容易に実現できる.