redisにおけるデータ構造と符号化
4231 ワード
redis :
:
1>redis redisObject 。
2> ,Redis 。
3> Redis , , 。
:
redisObject:
typedef struct redisObject {
unsigned type:4; /* */
unsigned encoding:4; /* */
unsigned lru:LRU_BITS; /* lru time (relative to server.lruclock) */
int refcount; /* , */
void *ptr; /* , */
} robj;
type:
: :type key
#define OBJ_STRING 0 /* */
#define OBJ_LIST 1 /* */
#define OBJ_SET 2 /* */
#define OBJ_ZSET 3 /* */
#define OBJ_HASH 4 /* */
encoding;
: :object encoding key
#define OBJ_ENCODING_RAW 0 /*Raw representation */
#define OBJ_ENCODING_INT 1 /*Encoded as integer long long */
#define OBJ_ENCODING_HT 2 /* Encoded as hash table */
#define OBJ_ENCODING_ZIPMAP 3 /* Encoded as zipmap map*/
#define OBJ_ENCODING_LINKEDLIST 4 /* Encoded as regular linked list */
#define OBJ_ENCODING_ZIPLIST 5 /* Encoded as ziplist */
#define OBJ_ENCODING_INTSET 6 /* Encoded as intset */
#define OBJ_ENCODING_SKIPLIST 7 /* Encoded as skiplist */
#define OBJ_ENCODING_EMBSTR 8 /* Embedded sds string encoding embstr */
#define OBJ_ENCODING_QUICKLIST 9 /* */
lru:
: 。
:
1> ( lru );object idletime key 。 scan + object idletime key , 。
2> maxmemory maxmemory-policy=volatile-lru allkeys-lru , (maxmemory) , , 。
refcount:
: , refcount=0 , 。
: :object refcount key
:
:
int: 。
embstr: ( 44 )。
raw: ( 44 )。
embstr raw :
raw 2 , 。
embstr 1 , , 。
(list):
(ziplist):
: ( ), , 。
1> O(1) 。
2> , O(n2), 。
3> , 。
: , , 。
: , 。
:
( O(n2) ) 。
list-max-ziplist-entries( 512) list-max-ziplist-value( 64 ) , ziplist 。
(linkedlist):
: , 。
: , 、 , , , 。
: ziplist , linkedlist 。
: , 。
: 。( , CPU , )
(quicklist):
: , ziplist, quicklist 。
Redis3.2 , quicklist 。
(hash):
(ziplist):
: hash-max-ziplist-entries( 512) value hash-max-ziplist-value( 64 ) , ziplist 。
(hashtable):
: O(1)
: 。
: ziplist ,hashtable 。
hash : hash , key , , , 。
rehash: :
: key rehash, key rehash ( 、 、 ) 。
: key rehash 。
: rehash , :
: , , key rehash 。
: 。
(set):
(intset):
: 、 。
1> O(logn)
2> O(n)
: hashtable,
: set-max-intset-entries( 512) , intset 。
(hashtable): intset , hashtable 。
(zset):
:redis (score) 。
(ziplist):
: zset-max-ziplist-entries( 128 ) zset-max-ziplist-value( 64 ) , ziplist 。
(skiplist):
: ( ) 。
O(logn)、 O(n)。
: ziplist , skiplist 。
:
: key value , redis 。
: key 。
: key hash , value , hash ziplist 。
eg: 100 , 1000 hash , hash 1000 。