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
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 を し、スクリプトを チャネルを してログ・メッセージをプッシュすることです. に、サブスクライバプロセスを し、 する を います.