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   。