標籤:
對象
1. Redis資料庫中的每個索引值對的鍵和值都是一個對象。
2. Redis共有字串、列表、雜湊、集合、有序集合五種類型的對象,每種類型的對象至少都有兩種或者以上的編碼方式,不同的編碼可以在不同的使用情境上最佳化對象的使用效率。
3. 伺服器在執行某些命令之前,會先檢查給定鍵的類型能否執行指定的命令,而檢查一個鍵的類型就是檢查鍵的值對象的類型。
4. Redis的對象系統帶有引用計數實現的記憶體回收機制,當一個對象不再被使用時,該對象所佔用的記憶體就會被自動釋放。
5. Redis會共用值為0到9999的字串對象。Redis只對包含整數值的字串對象進行共用。
6. 對象會記錄自己的最後一個被訪問的時間,這個時間可以用於計算對象的空轉時間,用以判斷回收記憶體。
1. 每次當我們在Redis的資料庫中新建立一個索引值對時,我們至少會建立兩個對象,一個對象用作索引值對的鍵(鍵)對象,另一個對象用作索引值對的值(值對象)
2. Redis中的每個對象都由一個redisObject結構表示,該結構中和儲存資料相關的三個屬性分別是type屬性,encoding屬性和ptr屬性。
3. 對於Redis資料庫儲存的索引值對來說,鍵總是一個字串對象,而值則可以是字串對象、列表對象、雜湊對象、集合對象或者有序集合對象的其中一種。
4. type key 命令返回該鍵對應的值對象的類型,而不是鍵對象的類型。type的傳回值:string,list,hash,set,zset
5. 對象的ptr指標指向對象的底層實現資料結構,而這些資料結構由對象的encoding屬性決定。encoding屬性記錄了對象所使用的編碼,也即是說這個對象使用什麼資料結構
(字典,鏈表等)作為對象的底層實現。
6. 每種類型的對象都至少使用了兩種不同的編碼。Redis可以根據不同的使用情境來為一個對象設定不同的編碼,從而最佳化對象在某一情境下的效率。
7. 使用OBJECT ENCODING命令可以查看一個資料庫的值對象的編碼。
8. 字串的編碼可以是int,raw 或者 embstr。在條件滿足的情況下,int和embstr會被轉換成raw編碼的字串對象。
9. 字串常用命令:
SET , GET , APPEDN , INCRBYFLOAT(浮點數加法),INCRBY(整數加法),DECRBY(整數減法),STRLEN(返回字串的長度),SETRANGE(設定特定索引的值),GETRANGE(擷取特定索引的值)
10. 列表對象的編碼可以是ziplist或者linkedlist。
11. 列表常用命令:
LPUSH(新元素添加到表頭),RPUSH(新元素添加到表尾),LPOP(擷取並刪除表前端節點),RPOP(擷取並刪除表尾節點),LINDEX(擷取指定索引的元素),LLEN(擷取列表長度),
LINSERT(在列表指定位置插入元素),LREM(刪除不在指定索引範圍內的節點),LSET(更新指定位置上的節點)
12. 雜湊對象的編碼可以是ziplist或者hashtable .
13. 雜湊對象常用命令:
HSET(添加新節點),HGET(擷取對應的值),HEXISTS(判斷指定的鍵是否存在),HDEL(刪除指定的節點),HLEN(返回索引值對數量),HGETALL(返回所有索引值對)
14. 集合對象的編碼可以是intset或者hashtable
15. 集合對象常用命令:
SADD,SCARD(擷取元素數量),SISMEMBER(判斷元素是否存在),SMEMBERS(返回所有索引值),SRANDMEMBER(隨即返回一個元素),SPOP(隨即擷取並刪除元素),SREM(刪除所有給定元素)
16. 有序集合對象,編碼可以是ziplist或者skiplist
17. 有序集合對象常用命令:
ZADD,ZCAR(擷取集合元素數量),ZCOUNT(擷取給定範圍內節點數量),ZRANG(從表頭到表尾,返回給定索引範圍內的所有元素),ZREVRANGE(從表尾到表頭,返回給定索引範圍內的所有元素),
ZRANK(從表頭向表尾,返回節點排名),ZREVRANK(從表尾到表頭,返回節點排名),ZREM(刪除),ZSCORE(擷取分值)
18. Redis中用於操作鍵的命令基本上可以分為兩種類型:
1). 可以對任何類型的鍵執行,比如:DEL命令,EXPIRE命令、RENAME命令、TYPE命令 、OBJECT命令等。
2). 只能對特定類型的鍵執行:
SET,GET,APPEND,STRLEN等命令只能對字串鍵執行;
HDEL,HSET,HGET,HLEN等命令只能對雜湊鍵執行;
RPUSH,LPOP,LINSERT,LLEN等命令只能對列表鍵執行;
SADD,SPOP,SINTER,SCARD等命令只能對集合鍵執行;
ZADD,ZCARD,ZRANK,ZSCORE等命令只能對有序集合鍵執行。
19. Redis除了會根據值對象的類型來判斷鍵是否能夠執行指定的命令之外,還會根據值對象的編碼方式,選擇正確的命令實現代碼來執行命令,決定調用哪種結構的函數來執行。
20. 記憶體回收:當對象的引用計數值變為0時,對象所佔用的記憶體會被釋放。
redis 筆記02