redisシリーズ(七)|redisの使用中によく発生するいくつかの問題
1.永続化関連
2.クライアント操作の問題
3.メモリ消費の問題
保存された整数が現在のタイプを超えると、自動アップグレード操作がトリガーされ、アップグレード後にロールバックされなくなり、アップグレード操作によりメモリ領域が再申請され、元のデータが変換タイプによって新しい配列にコピーされます.できるだけintsetを使用するときは、int-16の範囲内にデータ範囲を維持し、個別の大きな整数が集合アップグレード操作をトリガし、メモリの浪費を防止します.
4.クラスタ関連
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) , ,