Redis基礎使用

Redis是用來做緩存的工具,簡單,高效且對服務器要求較小,用于大數據量下的緩存

每個鍵值對(key-value pair)都是由對象(object)組成的.

  • 數據庫鍵總是一個字符串對象(string object)
  • 數據庫鍵的值可以使字符串對象/列表對象(list object)/哈希對象(hash object)/集合對象(set object)/有序集合對象(sorted set object)這五種對象中的其中一種.

簡單動態字符串SDS(simple dynamic string)

鏈表(LinkList)
  • 廣泛用于實現Redis的各種功能,比如列表鍵,發布和訂閱,慢查詢,監視器等
  • 每個鏈表節點由一個listNode結構來表示,每個節點都有一個指向前置節點和后置節點的指針,所以Redis是一個雙端鏈表.
  • 每個鏈表使用一個list結構來表示,這個結構帶有表頭節點指針,表尾節點指針以及鏈表長度等信息.
  • 因為鏈表表頭節點的前置節點和表尾節點的后置節點都指向Null,所以redis的鏈表實現是無環鏈表.
  • 通過為鏈表設置不同的類型設定函數,Redis的鏈表可以用于保存各種不同的類型的值.

字典,又稱為符號表(symbol table),關聯數組(associative array)或映射(map),是一種用于保存鍵值對(key-value pair)的抽象數據結構.

解決鍵沖突的方法:Redis的哈希表使用鏈地址法(separate chaining)來解決鍵沖突,每個哈希表節點都有一個next指針,多個哈希表節點可以用next指針構成一個單向鏈表,被分配到同一個索引上的多個節點可以用這個單向里哦按表連接起來.

擴展和收縮哈希表的工作可以通過執行rehash(重新散列)操作來完成

字典重點
  • 包括數據庫和哈希鍵
  • Redis中的字典使用哈希表座位底層實現,每個字典帶有兩個哈希表,一個平時使用,另一個僅在進行rehash時使用.
  • 當字典被用作數據庫的底層實現,或者哈希鍵的底層是實現時,Redis使用MurmurHash2算法來計算鍵的哈希值.
  • 哈希表使用鏈地址法來解決鍵沖突,被分配到同一個索引上的多個鍵值對會連接成一個單向鏈表.
  • 在對哈希表進行擴展貨站收縮操作時,程序需要將現有哈希表包含的所有鍵值對rehash到新哈希表里面,并且這個rehash過程并不是一次性得完成的,而是漸進式地完成的.
跳躍表的重點#####
  • 是有序集合的底層實現之一.
  • Redis的跳躍表實現由zskiplist和zskiplistNode兩個結構組成,其中zskiplist用于保存跳躍表信息(比如表頭節點,表尾節點,長度),而zskiplistNode則用于表示跳躍表節點.
  • 每個跳躍表節點的層高都是1至32之間的隨機數.
  • 在同一個跳躍表中,多個節點可以包含相同的分值,但每個節點的成員對象必須是唯一的.
  • 跳躍表中的節點按照分值大小進行排序,當分值相同時,節點按照成員對象的大小進行排序.
整數集合
  • 整數集合是集合鍵的底層實現之一.
  • 整數結合的底層實現為數組,這個數組以有序,無重復的方式保存結合元素,在有需要時,程序會根據新添加元素的類型,改變這個數組的類型.
  • 升級操作為整數結合帶來了操作上的靈活性,并且盡可能地節約了內存.
  • 整數集合只支持升級操作,不支持降級操作.

Redis中用于操作鍵的命令基本上可以分為兩種類型.
其中一種命令可以對任何類型的鍵執行,比如說DEL命令,EXPIRE命令,RENAME命令,TYPE命令,OBJECT命令.

默認情況下,Redis客戶端的目標數據庫為0號數據庫,但客戶端可以通過執行SELECT命令來切換目標客戶端.

RDB持久化功能所生成的RDB文件是一個經過壓縮的二進制文件,通過該文件可以還原生成RDB文件時的數據庫狀態.
有兩個命令Redis命令可以用于生成RDB文件,一個是SAVE,另一個是BGSAVE.
AOF(Append Only File)持久化功能.AOG持久化是通過保存Redis服務器所執行的寫命令來記錄數據庫狀態的.

Redis hash命令
  • HDEL key field1 [field2] 刪除一個或多個哈希表字段
  • HEXISTS key field 查看哈希表key中,指定的字段是否存在
  • HGET key field 獲取存儲在哈希表中指定字段的值
  • HGETALL key 獲取在哈希表中key的所有字段和值
  • HMSET key field1 value1 [field2 value2] 同時將多個key-value設置在哈希表key中國
  • HMGET key field1 [field21] 獲取所有給定字段的值
  • HSET key field value 將哈希表keykey中的字段field的值設為value
  • HSETINX key field value 只有在字段field不存在時,設置哈希表字段的值
  • HVALS key 獲取哈希表中所有值
Redis List 命令
  • BLPOP key1 [key2] timeout 列出并獲取列表的第一個元素,如果列表沒有元素會阻塞 列表直到等待超時或發現可彈出元素為止
  • BRPPOP key1 [key2] timeout 列出并獲取列表的最后一個元素,如果列表沒有元素會阻塞 列表直到等待超時或發現可彈出元素為止
  • BRPOPLPUSH source destination timeout
  • LINDEX key index 通過索引獲取列表中的元素
  • LPOP key 移出并獲取列表的第一個元素
  • LPUSH key value1 [value2] 將一個或多個值插入到已存在的列表頭部
  • LRANGE key start stop 獲取列表指定范圍內的元素
  • LREM key count value 移出列表元素
  • LSET key index value 通過索引設置列表元素的值
  • LTRIM key start stop 對一個列表進行修剪()(trim)解釋說,讓列表值保留指定區間內的元素,不在指定區間之內的元素都將被刪除
  • RPOP key 移出并獲取列表最后一個元素
  • RPUSH key value1 [value2] 在列表中添加一個或多個值
  • RPUSHX key value 在已存在的列表添加值
Redis Set命令
  • SADD key member1 [member2] 向集合添加一個或多個成員
  • SCARD key 獲取集合的成員數
  • SDIFF key1 [key2] 返回給定所有結合的差集
  • SMEMBERS key 返回結合中所有成員
  • SPOP key 移出并返回集合中的一個隨機元素
  • SMOVE source destination member 將member元素從source集合移動到destination結合
  • SRANDMEMBER key [count] 返回集合中一個或多個隨機數
  • 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] 向有序集合添加一個或多個成員,或者更新已存在的成員的分數
  • ZCARD key 獲取有序集合的成員數
  • ZCOUNT key min max 計算在有序集合中指定區間分數的成員數
  • ZINCRBY key increment member 有序集合上對指定成員的分數上增加increment
  • ZINTERSTORE desitation numbers key [key ...] 計算給定的一個或多個有序集的交集并將結果存儲在新的有序集合的key中
  • ZLEXCOUNT key min max 在有序集合中計算指定字典區間的成員數量
  • ZRANGE key start stop [WITHSCORES] 通過索引區間返回有序集合成指定區間內的成員
  • ZRANGEBYLEX key min max [LIMIT offset number] 通過字典區間返回有序集合成指定區間內的成員
  • ZRANK key member 返回有序集合中指定成員的索引
  • ZREM key member [member...] 移除有序集合中一個或多個成員
  • ZREMRANGEBYLEX key min max 移除有序集合中給定字典區間的所有成員
  • ZREMRANGEBYLEX key start stop 移除有序集合中給定的排名區間的所有成員
  • ZREMRANGEBYSCORE key min max 移除有序集合中給定的分數區間的所有成員
  • ZREVRANGE key start stop [withscores] 返回有序集合中指定區間的成員,通過索引,分數從高到低

暫時寫這些基礎用法,還有更加深入的知識點需要繼續學習.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,565評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,115評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,577評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,514評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,234評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,621評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,822評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,380評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,128評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,319評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,548評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,970評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,229評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,048評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,285評論 2 376

推薦閱讀更多精彩內容