Redis簡介

Redis是一個速度非常快的非關系型數據庫,可以存儲鍵與5種不同類型的值之間的映射,可以將存儲在內存的鍵值對數據持久化到硬盤,可以通過復制擴展讀性能,可以使用客戶端分片來擴展寫性能。

與其他數據庫的對比

名稱 類型 數據存儲選項 查詢類型 附加功能
Redis 內存存儲的非關系數據庫 字符串、列表、集合、散列表、有序集合 每種數據類型有自己的專屬命令,另外還有批量操作 發布與訂閱,主從復制,腳本,不完全的事務支持
memcached 內存存儲的鍵值緩存 鍵值之間的映射 CRUD命令及其他命令 多線程服務器
MySQL 關系數據庫 每個庫可包括多個表,每個表包括多行;可以處理多個表的視圖 SQL、函數、存儲過程 支持ACID(InnoDB),主從復制和主主復制
MongoDB 硬盤存儲的非關系文檔存儲 每個數據庫可以包括多個表,每個表包括多個無schema的BSON文檔 CRUD命令及條件查詢命令 map-reduce,主從復制,分片,空間索引

附加特性

  1. Redis作為內存數據庫支持兩種數據持久化方法:
    • 時間點存儲(point-in-time dump)
      • 指定時間段內有指定數量的寫操作執行
      • 調用兩條轉儲到硬盤(dump-to-disk)命令
    • 將所有修改了數據庫的命令寫入一個只追加(append-only)文件里,根據數據的重要程度將只追加寫入設置為從不同步、每秒同步一次貨每寫入一個命令就同步一次。
  2. 受限于內存存儲設計,一臺Redis服務器無法處理所有請求,為了擴展讀性能,并提供故障轉移(failover),Redis支持主從復制:
    (1)從服務器連接到主服務器,接受主服務器發送的整個數據庫的初始副本。
    (2)之后主服務器執行的寫命令,都會發送給從服務器

優勢

  1. 5種數據結構
  2. 對存儲的數據進行隨機寫的速度非常快,不需要傳統數據庫的查詢分析器或者優化器。
  3. 不需要寫入臨時數據

數據結構簡介

結構類型 結構存儲的值 結構的讀寫能力
STRING 字符串、整數、浮點數 對字符串或其中一部分執行操作;對整數浮點數執行自增自減
LIST 鏈表,每個節點包括一個字符串 鏈表兩端的push、pop;根據偏移量對鏈表修剪(trim);讀取單個或多個元素;根據值查找或移除元素
SET 包含字符串的無序收集器,每個字符串唯一 添加、獲取、刪除單個元素;檢查元素存在;計算交并差集;隨機獲取元素
HASH 包含鍵值對的無序散列表 添加、獲取、刪除單個鍵值對;獲取所有鍵值對
ZSET 字符串成員(member)與浮點數分值(score)的有序映射,元素的排列順序由分值決定 添加、獲取、刪除單個元素;根據分值范圍或者成員來獲取元素

STRING

命令 用法 結果
SET set key value OK
GET get key value\NULL
DEL del key 1\0

LIST(鏈表)

命令 用法 結果
LPUSH lpush key value size
RPOP rpop key 彈出的value
LRANGE lrange key start end [start, end]范圍內的元素
LINDEX lindex key index index位置的元素

其他命令包括在列表中間添加、移除元素,將列表修剪到指定長度。

SET

命令 用法 結果
SADD sadd key value 1-成功;0-已存在
SMEMBERS smembers key 全部元素的序列
SISMEMBER sismember key value 1-存在;0-不存在
SREM srem key value 返回被移除的元素數量

集合通過散列表保證元素的唯一性,這些散列表只有鍵沒有值。SMEMBERS可能會很慢。

命令 用法 結果
SADD sadd key value 1-成功;0-已存在
SMEMBERS smembers key 全部元素的序列
SISMEMBER sismember key value 1-存在;0-不存在
SREM srem key value 返回被移除的元素數量

SINTER、SUNION、SDIFF交并差命令。

HASH

命令 用法 結果
HSET hset hash-key field value 1\0是否不存在
HGET hget hash-key field value\NULL
HGETALL hgetall hash-key 所有鍵值對
HDEL hdel hash-key field 1\0是否存在

存儲多個鍵值對的映射,值可以是字符串或者數字值,同樣可以對數字值自增或自減。HASH類似于Redis的微縮版,所以很多字符串命令都有對應的散列版本。

命令 用法 結果
HSET hset hash-key field value 1\0是否不存在
HGET hget hash-key field value\NULL
HGETALL hgetall hash-key 所有鍵值對
HDEL hdel hash-key field 1\0是否存在

ZSET

命令 用法 結果
ZADD zadd key score member 1\0是否不存在
ZRANGE zrange key start end [withscores] 根據score排序的排名在[start,end]范圍的member,withscores會多返回分值
ZRANGEBYSCORE zrangebyscore key scoreS scoreE [withscores] score在[scoreS, scoreE]范圍內的member,withscores會多返回score
ZREM zrem key member 1\0是否存在
ZINTERSTORE zinterstore destination keyNum key... [weights weight...] [aggregate sum|min|max] 新ZSET元素數量

同樣是鍵值對,鍵是成員(member)各不相同,值是分值(score)為浮點數。有序集合是Redis里唯一一個既可以根據成員訪問元素(類似于散列),又可以根據分值以及分值的排列順序來訪問元素的結構。

命令 用法 結果
ZADD zadd key score member 1\0是否不存在
ZRANGE zrange key start end [withscores] 根據score排序的排名在[start,end]范圍的member,withscores會多返回分值
ZRANGEBYSCORE zrangebyscore key scoreS scoreE [withscores] score在[scoreS, scoreE]范圍內的member,withscores會多返回score
ZREM zrem key member 1\0是否存在
ZINTERSTORE zinterstore destination keyNum key... [weights weight...] [aggregate sum|min|max] 新ZSET元素數量

解決問題

ZSET

有序集合來實現文章的排序(發布時間、投票);
最近登錄用戶,Token對應登錄時間戳;
最近瀏覽商品,每個Item對應時間戳;
緩存更新調度,key是更新的數據Id,score是執行更新的時間戳;
記錄所有商品的瀏覽次數

HASH

HASH來存儲文章信息,每個HASH對應一個文章;
Token Cookie,每個Token為HASH中的一個Field,Value是用戶信息;
用戶購物車,每個Field對應商品Id,Value為商品數量

SET

SET用來保存已投票的用戶集合;
用來保存某個群組有哪些文章;

STRING

STRING關聯一個數值,用來做計數器

ZINTERSTORE

接受多個集合(分值視為1)或有序集合作為輸入,找出同時存在于集合和有序集合的成員,并以某種方式聚合分值(max),將結果存為一個新的ZSET;
ZINTERSTORE與ZUNIONSTORE用在一個ZSET上的時候,可以通過weights對ZSET所有元素的分值進行修改

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

推薦閱讀更多精彩內容