Redis中的數據結構與常用命令,學習Redis從這開始

NoSQL Redis 數據結構 技術 IT優就業 2017-06-07

對於Redis的介紹這裡只寫一句:Redis是一種基於內存的高性能非關係型數據庫,它以kye-value的形式來存儲數據。

5種數據結構

Redis中包含5種數據類型:STRING、LIST、SET、HASH、ZSET。

Redis中的5中數據結構(截圖出自《Redis in Action》):

Redis以key-value形式存儲數據,其中key與value的關係可分為兩種

  • 1對1

    在Redis的STRING數據結構中,一個key對應一個value。

  • 1對*

    Redis中的其餘四種數據結構,一個key可以對應多個value。

為了更直觀的說明key和value間的關係,下面用幾張圖(截圖來自《Redis in Action》)來描述Redis中的五種數據結構:

STRING結構

Redis中的數據結構與常用命令,學習Redis從這開始

LIST結構

Redis中的數據結構與常用命令,學習Redis從這開始

SET結構

Redis中的數據結構與常用命令,學習Redis從這開始

HASH結構

Redis中的數據結構與常用命令,學習Redis從這開始

ZSET結構

Redis中的數據結構與常用命令,學習Redis從這開始

其中:

SET和ZSET中沒有重複元素;

相比SET,ZSET具有排序功能;

ZSET和HASH的value也是鍵值對形式:ZSET(score,member)、HASH(field,value);

STRING類型中不僅僅是存儲字符,也可以存儲數值(整數、浮點數);

5種數據結構最終存儲的數據類型實際只有兩種:字符和數值,Redis能夠區分存儲的值是字符還是數字;

Redis中常用命令

在redis-cli中對於輸入的命令會有智能提示

Redis中的數據結構與常用命令,學習Redis從這開始

命令作用
HELP獲取命令的幫助信息,學會help命令很重要
DEL刪除key及對應的值
EXPIRE設置鍵的過期時間,過期的鍵連同與該鍵相關的數據都將被刪除

help命令:

  • STRING

    Redis對字符串提供了豐富的操作,在Redis中STRING結構用於存儲兩種類型的數據:

  • 數值(整數、浮點數)

  • 字符串(byte string)

命令作用
SET向指定的key中寫入值
GET從指定的key中獲取值
INCR將指定key的值加1
DECR將指定key的值減1
INCRBY將指定key的值加上指定的數值
DECRBY將指定key的值減去指定的數值
APPEND向value中追加內容
GETRANGEGETRANGE key-name start end獲取指定索引範圍(字符串可看作是字符組成的數組)的字符,當start=0且end=-1時獲取整個字符串
SETRANGE`設置指定偏移量的字符的值
GETBITGETBIT key-name offset 將字符串看做是二進制形式(bit string),並返回指定偏移量位置處的二進制位的值
SETBIT設置指定偏移量位置處的二進制位的值
BITCOUNT返回字符串中二進制位值為1的二進制位數
BITOP對字符串執行位運算,並將計算結果存儲到指定的key中

對於BITCOUNT命令,專門寫了一段程序進行驗證,效果圖如下:

c#代碼:

Redis中的數據結構與常用命令,學習Redis從這開始

redis-cli中執行bitcount命令的結果:

Redis中的數據結構與常用命令,學習Redis從這開始

LIST

命令作用
LPUSH將一個或多個值推入列表左端
RPUSH將一個或多個值推入列表右端
LPOP移除並返回列表最左端的值
RPOP移除並返回列表最右端的值
LINDEX根據索引獲取LIST中的值
LRANGE獲取LIST中索引在指定範圍內的值
LTRIM從LIST中刪除索引不在指定範圍內的值,這裡的索引範圍是閉區間
  • HASH

Redis中的數據結構與常用命令,學習Redis從這開始

命令作用
HSET向HASH表中添加元素,由上圖可以看出HASH結構中存儲的值也是一個鍵值對(field value)
HMSET一次向HASH表中寫入多個鍵值對
HGET獲取HASH中存儲的值
HMGET一次從HASH中獲取多個值
HLEN獲取HASH表中存儲的元素個數
HDEL刪除HASH表中的鍵值對
HEXISTS判斷HASH中是否包含指定field的鍵值對
HKEYS獲取HASH中的所有鍵(field)
HVALS獲取HASH中的所有值
HGETALL獲取HASH中的所有鍵值對
HINCRBY將HASH中的指定value增加指定的數值
  • SET

    SET中沒有重複元素,向SET中添加重複的數據只會存儲一份。

命令作用
SADD向SET中添加元素
SREM移除SET中的元素
SISMEMBER判斷某元素是否存在於SET中
SCARD返回SET中的元素個數
SMEMBERS返回SET中的所有元素
SSCAN通過迭代的方式返回SET中的所有元素
SMOVE將元素從某一集(如果該元素存在當前集合中)合移動到另一集合並返回當前元素

集合間運算

命令作用
SDIFF對SET集合進行補集運算(存在於第一個集合且不存在於第二個集合中的元素)並返回運算結果
SDIFFSTORE對SET集合進行補集運算並將運算結果存儲到一個新的SET集合中
SINTER對SET集合進行交集運算並返回運算結果
SINTERSTORE對SET集合進行交集運算並將運算結果存儲到一個新的SET集合中
SUNION對SET集合進行並集運算並返回運算結果
SUNIONSTORE對SET集合進行並集運算並將運算結果存儲到一個新的SET集合中
  • ZSET

    ZSET和SET一樣,沒有重複元素,但和SET相比它有排序功能。

命令作用
ZADD向ZSET中添加元素
ZREM移除ZSET中的元素
ZCARD獲取ZSET中元素的個數
ZSCORE獲取ZSET中元素的score值
ZRANK獲取ZSET中元素的索引
ZREMRANGEBYRANK從ZSET中移除指定索引範圍內的元素
ZREMRANGEBYSCORE從ZSET中移除指定score範圍內的元素
ZCOUNT獲取ZSET中score值在指定範圍內元素的個數
ZRANGE獲取ZSET中索引在指定範圍內的元素,ZRANGE key start stop,參數start=0且stop=-1時返回所有元素

集合間運算

命令作用
ZINTERSTORE對ZSET集合進行交集運算並將運算結果存儲到一個新的ZSET集合中
ZUNIONSTORE對ZSET集合進行並集運算並將運算結果存儲到一個新的ZSET集合中

集合運算對於value值相同的集合元素score值的處理分為三種方式:

  1. 求和

  2. 取最大值

  3. 取最小值

執行ZINTERSTORE命令(ZUNIONSTORE與之類似):

  • 參數destination表示用於存儲計算結果的集合的key

  • 參數numkeys表示參與運算的集合數,必選

  • AGGREGATE表示對score的操作方式,默認為SUM

  • 參數WEIGHTS表示權重,該參數比較複雜:

  • 參數WEIGHTS的個數和numkyes值相等

  • AGGREGATE值為SUM時,對於結果集中的某個value為a的元素B,參與運算的各個集合中value為a的元素的score值會分別和對應的WEIGHTS值相乘然後再將各自相乘結果相加作為結果集中元素B的score值

  • AGGREGATE值為MIN或MAX時,對於結果集中的某個value為a的元素B,參與運算的各個集合中value為a的元素中score值最小或最大的那個(若有多個,則按照命令行中指定集合的順序自左向右取第一個符合條件的集合中的元素)和對應的WEIGHTS值相乘得到的值作為結果集中元素B的score值

規則略複雜,自己動手寫幾遍就會明白了。ZINTERSTORE命令執行效果圖:

以下為進行集合運算的示意圖:

以對score求和的方式進行交集運算

Redis中的數據結構與常用命令,學習Redis從這開始

以取score中最小值的方式進行並集運算

Redis中的數據結構與常用命令,學習Redis從這開始

以對score求和的方式進行並集運算

Redis中的數據結構與常用命令,學習Redis從這開始

Sort

對LIST、SET、ZSET三種數據結構中的值進行排序操作,默認是正序排列。

Redis中的數據結構與常用命令,學習Redis從這開始

Publish & Subscribe

發佈/訂閱模式

命令作用
PUBLISH向指定的頻道發送二進制字符串消息(binary string messages)
SUBSCRIBE訂閱指定的頻道已接受該頻道發送的消息
UNSUBSCRIBE取消訂閱某頻道

下圖中展示的是使用redis-cli和stackexchange.redis進行的pub/sub測試效果:

Redis中的數據結構與常用命令,學習Redis從這開始

Transcation

命令作用
MULTI表示事務的開始
EXEC執行事務中包含的命令

Redis中事務(調用MULTI表示事務的開始)所包含的命令會被放到一個隊列中,當遇到EXEC命令後會不間斷的依次執行隊列中的命令。

Redis中的數據結構與常用命令,學習Redis從這開始

Redis中的事務和數據庫中的事務不同,它沒有回滾操作。

Redis中的事務,若某行命令執行失敗不會影響其它命令的執行(下圖中第二行命令執行失敗,第一、三行成功執行):

Redis中的數據結構與常用命令,學習Redis從這開始

StackExchange.Redis

StackExchange.Redis驅動是用C#語言寫的Redis驅動,它的API在語義上和Redis命令是類似的,在這裡列舉下驅動中常用的幾個類:

  • ConnectionMultiplexer

    表示一組相關的Redis服務器鏈接,StackExchage.Redis官方建議儘可能複用該對象。

  • IDatabase

    該接口中定義了對5種數據結構進行操作的方法

  • RedisDatabase

    IDatabase的實現類

  • RedisKey

    存儲到Redis中的key

  • RedisValue

    存儲到Redis中的value,可用於表示STRING、LIST、SET結構中存儲的數據

  • HashEntry

    表示一個HASH鍵值對

  • SortedSetEntry

    表示一個ZSET元素

  • ISubscript

    訂閱接口

  • RedisChannel

    表示發佈/訂閱中的頻道名

  • Subscription

    ConnectionMultiplexer中的私有密封類,封裝和訂閱相關的信息

結語

Redis是一種NoSql數據庫,Redis服務器上默認有16個數據庫,Redis常被拿來和Memcache做比較,網上有很多這方面的文章,各位看官請自行搜索。本文著重介紹了Redis中的5中數據結構和一些常用的命令,對於第三方驅動則一筆帶過,因為在瞭解了Redis本身之後,可以很快的掌握第三方驅動的使用。

優就業500萬陽光就業基金等你拿:

http://www.ujiuye.com/zt/jyfc/?wt.bd=fq37300

優就業官網:http://www.ujiuye.com/?wt.bd=fq37300

相關推薦

推薦中...