redis学習記録
11306 ワード
redisはkey-valueストレージシステムです.Memcachedと同様に、string(文字列)、list(チェーンテーブル)、set(セット)、zset(sorted set--秩序セット)、hash(ハッシュタイプ)など、格納されたvalueタイプが相対的に多くサポートされています.これらのデータ型は、push/pop、add/remove、および交差および差セット、およびより豊富な操作をサポートし、これらの操作は原子的である.これに基づいて、redisは様々な方法のソートをサポートします.memcachedと同様に、効率を保証するために、データはメモリにキャッシュされます.違いはredisが更新したデータを定期的にディスクに書き込むか、修正操作を追加の記録ファイルに書き込むか、それに基づいてmaster-slave同期を実現することである.
Redisは高性能なkey-valueデータベースです.redisの出現はmemcachedのようなkey/valueストレージの不足を大きく補償し,一部の場合関係データベースに良い補完作用を果たすことができる.Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlangなどのクライアントを提供しており、使いやすいです.
[1]
Redisは主従同期をサポートする.データは、プライマリ・サーバから任意の数のセカンダリ・サーバに同期でき、セカンダリ・サーバは、他のセカンダリ・サーバに関連付けられたプライマリ・サーバであってもよい.これにより、Redisは単層ツリーコピーを実行することができる.ディスクは意図的にデータを書くことができます.パブリケーション/サブスクリプションメカニズムが完全に実装されているため、データベースからツリーをどこでも同期させると、チャネルをサブスクリプションし、プライマリ・サーバの完全なメッセージ・パブリケーション・レコードを受信できます.同期は、読み取り操作の拡張性とデータ冗長性に役立ちます.
redisの公式サイトの住所、とても覚えやすくて、redisです.io.(わざわざ調べてみると、ドメイン名接尾辞ioは国家ドメイン名、british Indian Ocean territory、すなわち英領インド洋領地)
現在、Vmwareはredisプロジェクトの開発とメンテナンスを支援しています.
doc http://doc.redisfans.com/index.html
Redisは高性能なkey-valueデータベースです.redisの出現はmemcachedのようなkey/valueストレージの不足を大きく補償し,一部の場合関係データベースに良い補完作用を果たすことができる.Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlangなどのクライアントを提供しており、使いやすいです.
[1]
Redisは主従同期をサポートする.データは、プライマリ・サーバから任意の数のセカンダリ・サーバに同期でき、セカンダリ・サーバは、他のセカンダリ・サーバに関連付けられたプライマリ・サーバであってもよい.これにより、Redisは単層ツリーコピーを実行することができる.ディスクは意図的にデータを書くことができます.パブリケーション/サブスクリプションメカニズムが完全に実装されているため、データベースからツリーをどこでも同期させると、チャネルをサブスクリプションし、プライマリ・サーバの完全なメッセージ・パブリケーション・レコードを受信できます.同期は、読み取り操作の拡張性とデータ冗長性に役立ちます.
redisの公式サイトの住所、とても覚えやすくて、redisです.io.(わざわざ調べてみると、ドメイン名接尾辞ioは国家ドメイン名、british Indian Ocean territory、すなわち英領インド洋領地)
現在、Vmwareはredisプロジェクトの開発とメンテナンスを支援しています.
doc http://doc.redisfans.com/index.html
5 type:String hash list set zset
strings
string ,
set name hello
get key
setnx k 0 nx note exist ,
setnx name hello
setex k string value
setex namex 10 jak 10
setrange key value
get name
[email protected]
setrange name 8 aaaaaa
get name
mset key
mset k1 xiaoming k2 xiaohong
msetnx note exis key
getset key key
getset k1 hello
getrange key value
getrange k1 0 3 0 3
mget
mget k1 k2
incr
set k3 10
incr k3
incrby k4 10 key key value 0
incrby k4 -10
decr key
decrby
append key value
append k1 world
strlen
strlen k1
hashset string field value , 、 0(1)( )
hash , string
hash ,
hset hash field key
hset myhash field hello
hset user:001 name jak
hget user:001 name
hsetnx user:002 name hello
hmset
hmset myhash field hello field2 world
hmget
hmget user:002 name age x
hincrby user:002 age 10
hexists hash
hexists user:002 age
hlen hash key
hlen user:002
hdel hash field
hdel myhash age
hkeys hash
hkeys user:002
hvals hash value
hvals user:002
hgetall hash
hgetall user:002
==================list start===========================
list , push,pop,
, key 。
redis list string 。
push pop
list , 。
push
pop
lpush
lpush mylist world
lpush mylist hello
lrange mylist 0 -1
hello
world
rpush
rpush list2 jak
rpush list2 tom
lrange list2 0 -1
jak
tom
linsert key list
linsert list2 before jak sum
lset list
lset list2 1 updatev
lrem key list N value
(n<0 ,N=0 )
lrem list2 2 jak
ltrim key
ltrim list2 1 -1 0
lpop list
lpop list2
rpop
rpop list2
lpoplpush list list
lpoplpush list2 list3
lindex key list index
linex list2 0
lindex list2 1
llen key list s
llen list2
==================list end===========================
===========sets ================
sadd myset1 one
sadd myset1 two
sadd myset1 two
smembers myset1
srem
srem myset1 one
spop
sdiff key Key
sdiff myset1 myset2
sdiffstore
sdiffstore myset3 myset1 myset2
sinter
sinter myset1 myset2
sinterstore
sunion key
sunion myset1 myset2
sunionstore
smove key set set
smove myset1 myset2 three three 1 2
scard key
sismember key Set
sismember myset1 two 1
sismember myset1 twox 0
srandmember ,
srandmember myset1
====================
=================sorted sets =======================
set
zset , mysql
value , key
zadd key zset member,score
,
zadd myzset 1 one
zadd myzset 2 two
zadd myzset 3 two 3
zrange myzset 0 -1 withscores 0 -1
zrem key zset member
zrem myzset1 one
zincrby
key zset
memebre, score incremernt
, score increment
zincrby myzset 4 two
-
zrank key zset memebr
( score )
zrank myzset1 two
zrevrank key zset memebr
( score )
zrevrank myzset three
zrevrange index
zrevrange myzset 0 -1 withscores
zrangebyscore 2 3
zrangebyscore myzset 2 3 withscores
zcount score
zcount myzset 2 10
zcard
zcard myzset
zremrangebyrank
zremrangebyrank myzset 2 3
zremrangebyscoreコレクション の された の を zremrangebyscore myzset 1 2 された1-2の を
( 2-3 )
==================end==========================================
redis .
linux
1
2
keys pattern key
keys *
keys my*
exists key
exists myset 0 1
del key
expire key
expire name 10
ttl name (3.0)-2
move key
select 0 0
se age 20
get age
move age 1 age 1
get age
select 1 1
get age
persist key
expire age 200
ttl age
persiste age age
randomkey key key
randomkey
rename
rename set2 set200
type key
type myzset
=========== end======
==============
ping
ping PONG
echo
echo helloworld
select redis 0-15
quit
dbsize key
info
config get
config get dir
config get *
flushdb key
fuushall key
==========end================
========= ==================
============
vi /usr/local/redis/etc/redis.conf
#requirepass foobared
requirepass mypass
auth ( )
redis-cli -a
=============
slave server master
Master slave
master master client
redis.config
slaveof 192.168.72.130 6379 # master ip
masterauth password #
info role
============== =====================
client multi ,
,
,
, exec ,redis
getage
multi
setage 10
setage 20
exec
discard
session1
get age
watch age ( key ) ,exec discard,unwatch
multi
session2
set age 1000
get age
session1
set age
exec
get age
====== =====
1:snapshotting( ) dump.rdb
save 900 1 # 900 1 key ,
save 300 10 # 300 10 key ,
2:append-only file(aof)
, redis
down ,
aof , aof ,redis
writer , reids
redis fsync os
appendonly yes // aof
appendfsync always // , ,
appendfsync everysec // ,
appendfsync no // os, ,
======================
(pub/sub) 。
,redis pub/sub serve.
subscribe psubscribe redis server
,redis
channel。 publish redis server v ,
client
1: subscribe tv1 tv2
: psubscribe tv1 helloworld tv1
=========================
vm-enabled yes # vm
vm-swap-file /tmp redis.swap # value
vm-max-memory 1000000 #redis
vm-page-size 32 # 32
vm-pages 134217728 #
vm-max-threads 4 # value
Redisを してアプリケーションを するのは しいプロセスですが、 の のように、Redisベースのアプリケーション にはいくつかの を えておく があります. は、リレーショナル・データベースの が のように されていたかもしれませんが、Redisベースのアプリケーションの にも たような がたくさんありましたが、Redisはメモリ・データベースであり、 スレッドであることを えておく があります.そのため、Redisを する は、 の に する があります.
1.Redisに されているすべてのキーをコントロールする
データベースの な はデータを することですが、 にとって、アプリケーションのニーズやデータの の により、データベースに されているデータの を するのは です.Redisでも です. が したキーを したり、アプリケーションのモジュールが されたためにデータを れたりする があります.
いずれの も、Redisは されなくなったデータを し、 もなくスペースを しています.Redisの い データモードは、キーに に した を しない り、 に されている を らかにすることが しい. なネーミング・メソッドを すると、データベース が され、アプリケーションやサービスを してキーのネーミング・スペースを する ( はコロンを してキー を します)、データの 、 、 に に できます.
Redisのもう つの な は、PostgreSQLやMongoDBなどの のデータベースにほとんどのデータが されるホットデータアイテムとしての 2のデータ です.これらの では、 は、データがプライマリストレージから されると、Redisの するデータを することを れがちである.このようなクロスデータストレージが する 、 はカスケード が である.この 、Redis で のデータ を するすべての を することによって することができ、プライマリ・データベースが された 、システムはクリーンアップ・プログラムを び してすべての コピーと を することを する.
2.すべてのキー の さを する
したように、 なネーミングルールを し、 を してデータの を すると べたので、これは のように えます.ただし、Redisはメモリ・データベースであり、キーが いほど なスペースが なくなることを れないでください. 、データベースに または のキーがある 、キー の さは きく します.
を げると、32ビットのRedisサーバに100 のキーが され、 の さが32-characterであれば、6-character のキー を すると 96 MBのスペースが されるが、12-character のキー を すると111 MB のスペース が する.キーが えるにつれて、15%の オーバーヘッドが きな を ぼします.
3. なデータ の
メモリの やパフォーマンスにかかわらず、データ に きな を ぼす があります. に、 になるベストプラクティスを します.
(または )の した としてデータを する わりに、ハッシュ・データ を して データをパケット することが えられる.ハッシュテーブルは に で、メモリの を らすことができます. に、ハッシュは とコード み りにも ちます.
な はsetの わりにリストを します.setプロパティを する がない は、リストは、setよりも なメモリを することができます.
Sorted setsは、メモリ や な の さにかかわらず、 も なデータ です.クエリー・レコードのルートが で、このような をソートすることを にしない は、ハッシュ・テーブルの を くお めします.
Redisでよく される の つがbitmapsまたはbitsets(V 2.2 )である.Bitsetsでは、Redis で のbit-level を できます.たとえば、 レベルの などです.
4.SCANを する はキーを しない
Redis v 2から.8から すると、SCANコマンドが になり、カーソルを してkeyspaceからキーを できます.KEYSコマンドと すると、SCANはすべてのマッチング を に すことはできませんが、ブロックシステムというリスクを し、プライマリノード で できる もあります.
SCANコマンドは、カーソルベースの であることに してください.SCANコマンドが び されるたびに、ユーザーに しいカーソルが されます.ユーザーは、 の にこの しいカーソルをSCANコマンドのカーソルパラメータとして し、 の プロセスを する があります.また、SCANを すると、keynameモードとcountオプションを してコマンドを することもできます.
SCAN コマンドには、セット、ハッシュキー、 などに されるSSCANコマンド、HSCANコマンド、ZSCANコマンドも まれます.
5.サーバ Luaスクリプトの
Redisの 、Luaスクリプトのサポートは に に な を し、ユーザーの を に するに いない. に すれば、Luaスクリプトはパフォーマンスとリソース を に します.CPUにデータを する わりに、スクリプトを すると、データに も い で を でき、ネットワークの とデータの を できます.
Redisでは、Luaの に な は、データをフィルタリングしたり、アプリケーションに したりすることです. ワークフローをスクリプトにカプセル することで、 び すだけで、より い で ないリソースを してより さな えを ることができます.
のヒント:Luaは かに らしいが、エラー や が しいなどの もある.1つの な は、RedisのPub/sub を し、スクリプトを チャネルを してログ・メッセージをプッシュすることです. に、サブスクライバプロセスを し、 する を います.