Redis基礎(chǔ)使用

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ù)學習.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铜跑,更是在濱河造成了極大的恐慌添诉,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畔派,死亡現(xiàn)場離奇詭異羹令,居然都是意外死亡解藻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門进倍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來土至,“玉大人,你說我怎么就攤上這事猾昆√找颍” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵垂蜗,是天一觀的道長坑赡。 經(jīng)常有香客問我,道長么抗,這世上最難降的妖魔是什么毅否? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮蝇刀,結(jié)果婚禮上螟加,老公的妹妹穿的比我還像新娘。我一直安慰自己吞琐,他們只是感情好捆探,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著站粟,像睡著了一般黍图。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奴烙,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天助被,我揣著相機與錄音剖张,去河邊找鬼。 笑死揩环,一個胖子當著我的面吹牛搔弄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丰滑,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼顾犹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了褒墨?” 一聲冷哼從身側(cè)響起炫刷,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎郁妈,沒想到半個月后柬唯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡圃庭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年锄奢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剧腻。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡拘央,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出书在,到底是詐尸還是另有隱情灰伟,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布儒旬,位于F島的核電站栏账,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏栈源。R本人自食惡果不足惜挡爵,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望甚垦。 院中可真熱鬧茶鹃,春花似錦、人聲如沸艰亮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迄埃。三九已至疗韵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侄非,已是汗流浹背蕉汪。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工流译, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肤无。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓先蒋,卻偏偏與公主長得像骇钦,于是被迫代替她去往敵國和親宛渐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容