Redis中用於操作鍵的命令基本可以分爲2類。
其中一種是可以對任何類型的鍵執行,比如DEL,EXPIRE,RENAME,TYPE,OBJECT,TTL等命令。
另一種只能對特定的鍵執行,比如:
SET,GET,APPEND,STRLEN 等僅限用於字符串的鍵類型;
HDEL,HSET,HGET,HLEN 等僅限用於哈希鍵類型;
RPUSH,LPOP,LINSERT,LLEN 等僅限用於列表鍵類型;
SADD,SPOP,SINTER,SCARD 等僅限用於集合鍵類型;
ZADD,ZCARD,ZRANK,ZSCORE 等僅限用於有序集合鍵類型;
在執行一個類型特定命令之前,Redis會先檢查輸入鍵類型是否正確,然後再決定是否執行命令。
如果鍵名稱正確,再檢查鍵對象是否是執行命令所需的類型,不是的話就返回一個類型錯誤。
多態命令的實現除了檢查鍵類型和命令是否匹配外,還會檢查鍵的至對象所使用的編碼。例如,LLEN命令。
如果列表對象編碼爲ziplist,,說明對象爲壓縮列表,程序使用ziplistlen作爲底層實現返回列表長度。
如果列表對象編碼爲linkedlist,說明對象爲雙端鏈表,程序使用listLength作爲底層實現返回鏈表長度。