redisシリーズ(七)|redisの使用中によく発生するいくつかの問題


1.永続化関連
 1)   :RDB    
        :    redis   redis-check-rdb   RDB         。
    
 2)   :                 ,     RDB    6GB   ,            ,              ,        ,   FULL resync  MASTER SLAVE      ,     RDB                ,        repl_timeout      (  60s),        RDB              ,        
        :      repl_timeout  
    
 3)              ,       RDB     RDB      ,        ,                   ,             
        :client-output-buffer-limit-slave 256MB 64MB 60( 60           64MB,       256MB,     )   ,                   
    
 4)      ,          ,             ,          
        :         moniter  ,      info replication  master_repl_offset slave_repl_offset,    ,   ,    

 5)         
    maxmemory        4G       3G,       ,      ,            ,     ,                
        :          

 6)        
           ,      
        :1)            ,              id  ,         ,        ,          ,         ,                              。  
    2)           ,       offset          ,       ,            

 7)       
         ,             ,              RDB        ,           
      :           ,          。          
                           ,         

2.クライアント操作の問題
  1)      
      redis  maxclients             ,  10000, redis     maxclients          ,info stats reject_connections              
          :         maxclients   

  2)      
       1.                  ,                  ,  ulimit -n  ,    1024,tcp         ,           redis,       ,  too many open files
       2.        TCP    backlog     ,redis      511,  tcp-backlog    ,  redis                 ,           ,                  。   128,    echo 511>/proc/sys/net/core/somaxconn      ,     netstat -s     backlog              

  3)    
           ,                   :    >   >   >   >    >    ,       ,      。
      redis-cli --latency        。  --latency-history  --latency-dist

3.メモリ消費の問題
1.    
           ,            。    info memory          
         used_memory_rss(       redis    )  used_memory(          )        mem_fragmentation_radio, mem_fragmentation_radio>1 ,  used_memory_rss  used_memory               ,        。
       :    (redis      )+    +    +    
     1)    (redis      )   
     2)     (      ), sizeof(keys)+sizeof(values),        ,           
     3)    (      (    redis           ),       (                 ),AOF   (  AOF  ,               ))
     4)    ,redis           jemalloc,                   。    5kb   ,        8kb   ,    3kb                    
        1)       
        2)       ,           ,       
       :1)    ,               ,              
           2)    
     5)       
        fork         AOF   RDB   ,        。 Linux        ,               。                          ,        fork           。

2.    
    1)      ,  maxmemory                 。
                  ,config set maxmemory       。(     redis     maxmemory,  redis     maxmemory  ,             ,        )
    2)      
        1.                 expire    ,redis         ,           
          1)    ,          key ,       ,   ,         CPU  ,       TTL           ,           ,     ,          
          2)    ,redis           ,      10 ,            ,       ,             。
    2)         config set maxmemory-policy {policy}
      1)noeviction    ,       ,         
      2)volatile_lru          key  ,            
      3)allkeys_lru     key ,  lru  
      4)volatile_random         key ,    
      5)allkeys_lru     key      
      6)volatile_ttl,       ttl  ,       key

3.    
   1)redisObject  ,redis            redisObject   。
    type  ,        , String Hash List Set Zset
    encoding  ,        
                     
        String int embstr raw
        Hash ziplist hashtable
        List ziplist linkedlist quicklist
        Set intset hashtable
        Zset ziplist skiplist
    lru  ,              ,       maxmemory-policy=volatile-lru ,    lru       ,    object idletime {key}    lru      ,          。
    refcount  ,                            
    *ptr  ,          ,     ,      ,           
 
 2)      
       ,            ,    。
          user:{uid} friends:{fid}       u:{uid} fs:{fid}
        ,    ,       ,               ,         ,       hash    

 3)     
       redis     [0-9999]      ,         redisObject      ,  redisObject       16  ,             ,  redis            ,                 。     volatile-lru allkeys-lru ,redis         ,                  ,lru     ,               ,                 ,          。

 4)     
           。 int len            int free          char buf[]     
                  ,              ,       ,    ,     O(1)
     
             ,             
      set key value   value  60   ,          len=60  free=0 
         append key value1 value1  60  ,        len=120 free=120 。      ,       append       ,       ,           ,          ,       set key value+value1  len=120 free=0

5)    
  ziplist     

  ziplist   :  ,          
  1)zlbytes:              ,      ziplist  ,   int-32,   4  
  2)zltail:           ,          ,   int-32,   4  
  3)zllen:          
  4)entry,       
     4.1)prev_entry_bytes_length           ,      
     4.2)encoidng             ,           /  ,         
     4.3)contents         
  5)zlend 。       ,      
          :                  ,          ,             ,       ,             ,        O(n2)

  1)  ziplist            ,                  list-max-ziplist-entries,      ,  ziplist         ,    linkedlist          (  ,           ziplist,        1000,          512    )

  intset    
    intset            ,         ,       ,              set-max-inset-entries      。

   1)encoding      ,                ,         ,int-16,int-32 int-64
   2)length        
   3)contents     ,         

保存された整数が現在のタイプを超えると、自動アップグレード操作がトリガーされ、アップグレード後にロールバックされなくなり、アップグレード操作によりメモリ領域が再申請され、元のデータが変換タイプによって新しい配列にコピーされます.できるだけintsetを使用するときは、int-16の範囲内にデータ範囲を維持し、個別の大きな整数が集合アップグレード操作をトリガし、メモリの浪費を防止します.
4.クラスタ関連
1.      
   1)           ,        ,  key         ,               
   2)     ,           
   3)key           ,              hash list         
   4)         ,     0
   5)         ,        ,