Redisキャッシュ応用基礎

7706 ワード

Redisキャッシュ応用基礎


1、Redisの概要


Redisはkey-valueストレージシステムです.Memcachedと同様に、String(文字列)、List(チェーンテーブル)、Set(コレクション)、ZSet(秩序セット)、Hash(ハッシュタイプ)の格納されたvalueタイプが相対的に多くサポートされます.Memcachedと同様に、効率を確保するために、データはメモリにキャッシュされます.大きな違いは、Redisが定期的に更新されたデータをディスクに書き込むか、修正操作を追加の記録ファイルに書き込むか、それに基づいてmaster-slave同期を実現することです.
Redisは高性能なkey-valueデータベースです.現在、比較的優れたNoSQLデータベースです.単一スレッドは10 w+QPSをサポートする.

2、Redis取付(Mac OSX)

  • 公式サイトhttps://redis.io最新バージョンをダウンロードし、現在はRedis 5.0.3です.

  • 2)ローカルファイルをディレクトリに解凍する:/usr/local/redis-5.0.3
    3)ソースプログラムをコンパイルし、redisディレクトリに入るmake
    4)redisサービスを起動し、Redis/binディレクトリに入る./redis-server ../redis.conf
    ➜  bin ./redis-server ../redis.conf
    30578:C 18 Mar 2019 17:43:18.825 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    30578:C 18 Mar 2019 17:43:18.825 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=30578, just started
    30578:C 18 Mar 2019 17:43:18.825 # Configuration loaded
    30578:M 18 Mar 2019 17:43:18.826 * Increased maximum number of open files to 10032 (it was originally set to 256).
                  _._                                                  
             _.-``__ ''-._                                             
        _.-``    `.  `_.  ''-._           Redis 5.0.3 (00000000/0) 64 bit
    .-`` .-```.  ```\/    _.,_ ''-._                                   
    (    '      ,       .-`  | `,    )     Running in standalone mode
    |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
    |    `-._   `._    /     _.-'    |     PID: 30578
    `-._    `-._  `-./  _.-'    _.-'                                   
    |`-._`-._    `-.__.-'    _.-'_.-'|                                  
    |    `-._`-._        _.-'_.-'    |           http://redis.io        
    `-._    `-._`-.__.-'_.-'    _.-'                                   
    |`-._`-._    `-.__.-'    _.-'_.-'|                                  
    |    `-._`-._        _.-'_.-'    |                                  
    `-._    `-._`-.__.-'_.-'    _.-'                                   
        `-._    `-.__.-'    _.-'                                       
            `-._        _.-'                                           
                `-.__.-'                                               
    
    30578:M 18 Mar 2019 17:43:18.827 # Server initialized
    30578:M 18 Mar 2019 17:43:18.828 * DB loaded from disk: 0.000 seconds
    30578:M 18 Mar 2019 17:43:18.828 * Ready to accept connections
    
    

    5)redis-cli接続による使用./redis-cli
    -rwxrwxrwx   1 root     staff   247K  2 13 16:48 redis-cli
    -rwxrwxrwx   1 root     staff   1.3M  2 13 16:48 redis-server
    ➜  bin ./redis-cli
    127.0.0.1:6379> keys *
    
    

    6)Redisのプロファイル
     ```
     daemonize:        ,       yes
     pdifile: pid    /var/run/redis.pid,         
     bind:  redis      IP   ,     ,         ,            
     port:    ,   6379
     timeout:             ,    
     loglevel:    4 ,debug,revbose,notice warning。         notice
     logfile:  log    ,        ,             
     database:        ,         0
     save:  redis          
     rdbcompression:        ,      
     dbfilename:          
     dir:               
     slaveof:                 
     masterauth:              ,     
     requirepass:                        
     maxclients:            
     maxmemory:  redis         
     appendonly:  appendonly   ,redis                 appendonly.aof   , redis     ,             
     appendfsync:  appendonly.aof         
     vm_enabled:          
     vm_swap_file:              
     vm_max_momery:         ,redis             ,   0
     vm_page_size:          
     vm_pages:         page  
     vm_max_thrrads:  vm IO         
     
     ```
    

    3、基本命令応用


    1)String文字列
    127.0.0.1:6379> SET name Brace
    OK
    127.0.0.1:6379> get name
    "Brace"
    127.0.0.1:6379> setnx name Good
    (integer) 0
    127.0.0.1:6379> 
    
    

    重点的な説明SETNX
    キーキーキーが存在しない場合にのみ、キーキーキーの値をvalueに設定します.キーキーキーが既に存在する場合、SETNXコマンドは何もしません.SETNXは『SET if Not eXists』(存在しなければSET)の略である.戻り値コマンドは、設定に成功した場合に1を返し、設定に失敗した場合に0を返します.
    SETEX:通常のSETEXですが、keyの値を設定すると、有効期限が設定されます.キーキーの値をvalueに設定し、キーキーの生存時間をseconds秒に設定します.キーキーキーが既に存在する場合、SETEXコマンドは既存の値を上書きします.SETEXコマンドの効果は、次の2つのコマンドの効果と似ています.
    SET key value EXPIRE key seconds#生存時間設定SETEXとこの2つのコマンドの違いは、SETEXが原子(atomic)操作であり、設定値と有効期限の設定の2つの操作を同じ時間で完了できるため、SETEXコマンドはキャッシュを格納する際に非常に実用的です.戻り値コマンドは、設定成功時にOKを返します.secondsパラメータが不正な場合、コマンドはエラーを返します.
    2)HASHハッシュ表
    ```
    127.0.0.1:6379> hset hName nickname "zhangsan"
    (integer) 1
    127.0.0.1:6379> hget hName nickname
    "zhangsan"
    127.0.0.1:6379> hexists hName nickname
    (integer) 1
    127.0.0.1:6379> hexists hName uid
    (integer) 0
    127.0.0.1:6379> hlen hName
    (integer) 1
    127.0.0.1:6379> hincrby hName uid 3
    (integer) 3
    127.0.0.1:6379> hget hName uid
    "3"
    127.0.0.1:6379> hset hName age 20
    (integer) 1
    127.0.0.1:6379> hmset hName nickname "lisi" age 12
    OK
    127.0.0.1:6379> hmget hName nickname uid age
    1) "lisi"
    2) "3"
    3) "12"
    127.0.0.1:6379> hkeys hName
    1) "nickname"
    2) "uid"
    3) "age"
    127.0.0.1:6379> hvals hName
    1) "lisi"
    2) "3"
    3) "12"
    127.0.0.1:6379> hgetall hName
    1) "nickname"
    2) "lisi"
    3) "uid"
    4) "3"
    5) "age"
    6) "12"
    127.0.0.1:6379> 
    
    ```
    
  • LISTリスト
  • BRPOPは、リストのブロックポップアップ原語である.RPOP keyコマンドのブロックバージョンで、特定のリストにポップアップ可能な要素がない場合、接続はBRPOPコマンドによってブロックされ、タイムアウトを待つか、ポップアップ可能な要素が発見されるまでブロックされます.
    複数のkeyパラメータが与えられた場合、パラメータkeyの前後順に各リストを順次チェックし、最初の空でないリストの末尾要素をポップアップします.ブロック操作の詳細については、BLPOP key[key...]timeoutコマンドを参照してください.BRPOPは、ポップアップ要素の位置とBLPOP key[key...]timeoutが異なる以外は一致しています.
    戻り値は、指定した時間内に要素がポップアップされていない場合、nilと待機時間を返します.逆に、2つの要素を含むリストを返します.1つ目の要素はポップアップされた要素が属するkeyで、2つ目の要素はポップアップされた要素の値です.
    
    127.0.0.1:6379> LPUSH list 1 2 3 4 5
    (integer) 5
    127.0.0.1:6379> LPUSH list 6
    (integer) 6
    127.0.0.1:6379> lrange list 0 6
    1) "6"
    2) "5"
    3) "4"
    4) "3"
    5) "2"
    6) "1"
    127.0.0.1:6379> lpop list
    "6"
    127.0.0.1:6379> rpop list
    "1"
    127.0.0.1:6379> rpoplpush list list2
    "2"
    127.0.0.1:6379> lrange list2  0 5
    1) "2"
    127.0.0.1:6379> lrange list 0 5
    1) "5"
    2) "4"
    3) "3"
    127.0.0.1:6379> lrem list 2 4
    (integer) 1
    127.0.0.1:6379> lrange list 0 -1
    1) "5"
    2) "3"
    127.0.0.1:6379> lpush list 5
    (integer) 3
    127.0.0.1:6379> lrange list 0 -1
    1) "5"
    2) "5"
    3) "3"
    127.0.0.1:6379> lrem list 2 5
    (integer) 2
    127.0.0.1:6379> lrange list 0 -1
    1) "3"
    127.0.0.1:6379> brpop list 30
    1) "list"
    2) "3"
    127.0.0.1:6379> brpop list 30 list2 20
    1) "list2"
    2) "2"
    127.0.0.1:6379> 
    
    
    
  • SETセット(ZSET)
  • 127.0.0.1:6379> sadd set "goods"
    (integer) 1
    127.0.0.1:6379> sadd set "this" "is"
    (integer) 2
    127.0.0.1:6379> smembers set
    1) "is"
    2) "this"
    3) "goods"
    127.0.0.1:6379> spop set is
    (error) ERR value is not an integer or out of range
    127.0.0.1:6379> spop set 1
    1) "goods"
    127.0.0.1:6379> smembers set
    1) "is"
    2) "this"
    127.0.0.1:6379> SRANDMEMBER set 2
    1) "is"
    2) "this"
    127.0.0.1:6379> SRANDMEMBER set 1
    1) "is"
    127.0.0.1:6379> SRANDMEMBER set 1
    1) "is"
    127.0.0.1:6379> SRANDMEMBER set 1
    1) "this"
    127.0.0.1:6379> srem set this
    (integer) 1
    127.0.0.1:6379> smembers set
    1) "is"