Redis是用來做緩存的工具,簡單,高效且對服務器要求較小,用于大數(shù)據(jù)量下的緩存
每個鍵值對(key-value pair)都是由對象(object)組成的.
- 數(shù)據(jù)庫鍵總是一個字符串對象(string object)
- 數(shù)據(jù)庫鍵的值可以使字符串對象/列表對象(list object)/哈希對象(hash object)/集合對象(set object)/有序集合對象(sorted set object)這五種對象中的其中一種.
簡單動態(tài)字符串SDS(simple dynamic string)
鏈表(LinkList)
- 廣泛用于實現(xiàn)Redis的各種功能,比如列表鍵,發(fā)布和訂閱,慢查詢,監(jiān)視器等
- 每個鏈表節(jié)點由一個listNode結(jié)構(gòu)來表示,每個節(jié)點都有一個指向前置節(jié)點和后置節(jié)點的指針,所以Redis是一個雙端鏈表.
- 每個鏈表使用一個list結(jié)構(gòu)來表示,這個結(jié)構(gòu)帶有表頭節(jié)點指針,表尾節(jié)點指針以及鏈表長度等信息.
- 因為鏈表表頭節(jié)點的前置節(jié)點和表尾節(jié)點的后置節(jié)點都指向Null,所以redis的鏈表實現(xiàn)是無環(huán)鏈表.
- 通過為鏈表設(shè)置不同的類型設(shè)定函數(shù),Redis的鏈表可以用于保存各種不同的類型的值.
字典,又稱為符號表(symbol table),關(guān)聯(lián)數(shù)組(associative array)或映射(map),是一種用于保存鍵值對(key-value pair)的抽象數(shù)據(jù)結(jié)構(gòu).
解決鍵沖突的方法:Redis的哈希表使用鏈地址法(separate chaining)來解決鍵沖突,每個哈希表節(jié)點都有一個next指針,多個哈希表節(jié)點可以用next指針構(gòu)成一個單向鏈表,被分配到同一個索引上的多個節(jié)點可以用這個單向里哦按表連接起來.
擴展和收縮哈希表的工作可以通過執(zhí)行rehash(重新散列)操作來完成
字典重點
- 包括數(shù)據(jù)庫和哈希鍵
- Redis中的字典使用哈希表座位底層實現(xiàn),每個字典帶有兩個哈希表,一個平時使用,另一個僅在進行rehash時使用.
- 當字典被用作數(shù)據(jù)庫的底層實現(xiàn),或者哈希鍵的底層是實現(xiàn)時,Redis使用MurmurHash2算法來計算鍵的哈希值.
- 哈希表使用鏈地址法來解決鍵沖突,被分配到同一個索引上的多個鍵值對會連接成一個單向鏈表.
- 在對哈希表進行擴展貨站收縮操作時,程序需要將現(xiàn)有哈希表包含的所有鍵值對rehash到新哈希表里面,并且這個rehash過程并不是一次性得完成的,而是漸進式地完成的.
跳躍表的重點#####
- 是有序集合的底層實現(xiàn)之一.
- Redis的跳躍表實現(xiàn)由zskiplist和zskiplistNode兩個結(jié)構(gòu)組成,其中zskiplist用于保存跳躍表信息(比如表頭節(jié)點,表尾節(jié)點,長度),而zskiplistNode則用于表示跳躍表節(jié)點.
- 每個跳躍表節(jié)點的層高都是1至32之間的隨機數(shù).
- 在同一個跳躍表中,多個節(jié)點可以包含相同的分值,但每個節(jié)點的成員對象必須是唯一的.
- 跳躍表中的節(jié)點按照分值大小進行排序,當分值相同時,節(jié)點按照成員對象的大小進行排序.
整數(shù)集合
- 整數(shù)集合是集合鍵的底層實現(xiàn)之一.
- 整數(shù)結(jié)合的底層實現(xiàn)為數(shù)組,這個數(shù)組以有序,無重復的方式保存結(jié)合元素,在有需要時,程序會根據(jù)新添加元素的類型,改變這個數(shù)組的類型.
- 升級操作為整數(shù)結(jié)合帶來了操作上的靈活性,并且盡可能地節(jié)約了內(nèi)存.
- 整數(shù)集合只支持升級操作,不支持降級操作.
Redis中用于操作鍵的命令基本上可以分為兩種類型.
其中一種命令可以對任何類型的鍵執(zhí)行,比如說DEL命令,EXPIRE命令,RENAME命令,TYPE命令,OBJECT命令.
默認情況下,Redis客戶端的目標數(shù)據(jù)庫為0號數(shù)據(jù)庫,但客戶端可以通過執(zhí)行SELECT命令來切換目標客戶端.
RDB持久化功能所生成的RDB文件是一個經(jīng)過壓縮的二進制文件,通過該文件可以還原生成RDB文件時的數(shù)據(jù)庫狀態(tài).
有兩個命令Redis命令可以用于生成RDB文件,一個是SAVE,另一個是BGSAVE.
AOF(Append Only File)持久化功能.AOG持久化是通過保存Redis服務器所執(zhí)行的寫命令來記錄數(shù)據(jù)庫狀態(tài)的.
Redis hash命令
- HDEL key field1 [field2] 刪除一個或多個哈希表字段
- HEXISTS key field 查看哈希表key中,指定的字段是否存在
- HGET key field 獲取存儲在哈希表中指定字段的值
- HGETALL key 獲取在哈希表中key的所有字段和值
- HMSET key field1 value1 [field2 value2] 同時將多個key-value設(shè)置在哈希表key中國
- HMGET key field1 [field21] 獲取所有給定字段的值
- HSET key field value 將哈希表keykey中的字段field的值設(shè)為value
- HSETINX key field value 只有在字段field不存在時,設(shè)置哈希表字段的值
- HVALS key 獲取哈希表中所有值
Redis List 命令
- BLPOP key1 [key2] timeout 列出并獲取列表的第一個元素,如果列表沒有元素會阻塞 列表直到等待超時或發(fā)現(xiàn)可彈出元素為止
- BRPPOP key1 [key2] timeout 列出并獲取列表的最后一個元素,如果列表沒有元素會阻塞 列表直到等待超時或發(fā)現(xiàn)可彈出元素為止
- BRPOPLPUSH source destination timeout
- LINDEX key index 通過索引獲取列表中的元素
- LPOP key 移出并獲取列表的第一個元素
- LPUSH key value1 [value2] 將一個或多個值插入到已存在的列表頭部
- LRANGE key start stop 獲取列表指定范圍內(nèi)的元素
- LREM key count value 移出列表元素
- LSET key index value 通過索引設(shè)置列表元素的值
- LTRIM key start stop 對一個列表進行修剪()(trim)解釋說,讓列表值保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除
- RPOP key 移出并獲取列表最后一個元素
- RPUSH key value1 [value2] 在列表中添加一個或多個值
- RPUSHX key value 在已存在的列表添加值
Redis Set命令
- SADD key member1 [member2] 向集合添加一個或多個成員
- SCARD key 獲取集合的成員數(shù)
- SDIFF key1 [key2] 返回給定所有結(jié)合的差集
- SMEMBERS key 返回結(jié)合中所有成員
- SPOP key 移出并返回集合中的一個隨機元素
- SMOVE source destination member 將member元素從source集合移動到destination結(jié)合
- SRANDMEMBER key [count] 返回集合中一個或多個隨機數(shù)
- SREM key member1 [member2] 移除集合中一個或多個成員
- SUNION key1 [key2] 返回所有給定集合的并集
- SUNIONSTORE destination key1 [key2] 所有給定集合的并集存儲在 destination集合中
- SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素
Redis Sorted Set命令
- ZADD key score1 member1[score2 member2] 向有序集合添加一個或多個成員,或者更新已存在的成員的分數(shù)
- ZCARD key 獲取有序集合的成員數(shù)
- ZCOUNT key min max 計算在有序集合中指定區(qū)間分數(shù)的成員數(shù)
- ZINCRBY key increment member 有序集合上對指定成員的分數(shù)上增加increment
- ZINTERSTORE desitation numbers key [key ...] 計算給定的一個或多個有序集的交集并將結(jié)果存儲在新的有序集合的key中
- ZLEXCOUNT key min max 在有序集合中計算指定字典區(qū)間的成員數(shù)量
- ZRANGE key start stop [WITHSCORES] 通過索引區(qū)間返回有序集合成指定區(qū)間內(nèi)的成員
- ZRANGEBYLEX key min max [LIMIT offset number] 通過字典區(qū)間返回有序集合成指定區(qū)間內(nèi)的成員
- ZRANK key member 返回有序集合中指定成員的索引
- ZREM key member [member...] 移除有序集合中一個或多個成員
- ZREMRANGEBYLEX key min max 移除有序集合中給定字典區(qū)間的所有成員
- ZREMRANGEBYLEX key start stop 移除有序集合中給定的排名區(qū)間的所有成員
- ZREMRANGEBYSCORE key min max 移除有序集合中給定的分數(shù)區(qū)間的所有成員
- ZREVRANGE key start stop [withscores] 返回有序集合中指定區(qū)間的成員,通過索引,分數(shù)從高到低
暫時寫這些基礎(chǔ)用法,還有更加深入的知識點需要繼續(xù)學習.