redis快速入門-資料類型

來源:互聯網
上載者:User

標籤:

前言

最近因項目需要用到redis,所以藉助《Redis入門指南》(李子驊 編著)這本書快速入門了一下,此處記錄下一些知識點(主要是命令),方便以後查閱。

簡介

Redis是一個開源的key-value儲存,並用於構建高效能,可擴充的Web應用程式的完美解決方案。

Redis的三個主要特點:
  • Redis資料庫完全在記憶體中,使用磁碟僅用於持久性。

  • 相比許多索引值資料存放區,Redis擁有一套較為豐富的資料類型。

  • Redis可以將資料複製到任意數量的從伺服器。

Redis的優勢
  • 異常快速:Redis的速度非常快,每秒能執行約11萬集合,每秒約81000+條記錄。

  • 支援豐富的資料類型:Redis支援最大多數開發人員已經知道的像列表,集合,有序集合,散列等資料類型。這使得它非常容易解決各種各樣的問題,因為我們知道哪些問題是可以通過它的資料類型更好地處理。

  • 操作都是原子性:所有Redis操作是原子的,這保證了如果兩個用戶端同時訪問的Redis伺服器將獲得更新後的值。

  • 多功能工具 + 生產力:Redis是一個多實用的工具,可以在多個用例如緩衝,訊息,隊列使用(Redis原生支援發布/訂閱),任何短暫的資料,應用程式,如Web應用程式工作階段,網頁命中計數等。

啟動與停止啟動

1.直接啟動

$ redis-server

預設使用6379連接埠。

趣聞一則:

6379是手機鍵盤上MERZ對應的數字,MERZ是一名意大利歌女的名字。

2.通過初始化指令碼啟動redis,可以使得redis隨機啟動(適合生產環境)。具體參見《Redis入門指南》。

停止
$ redis-cli SHUTDOWN

redis收到SHUTDOWN命令後會先斷開所有用戶端串連,然後根據配置執行持久化,最後完成退出。

此外也可以使用“kill redis進程的PID”來正常結束redis。

redis命令列用戶端

我們可以通過redis-cli向redis發送命令,同時可以擷取命令執行後的傳回值。

配置

redis可以通過設定檔和命令列參數進行配置,設定檔範本參見redis.conf,它位於原始碼目錄的根目錄中。

多資料庫

redis是一個字典結構的儲存伺服器,一個redis執行個體提供了多個用來儲存資料的字典,用戶端可以指定將資料存放區在哪個字典中。

同一個執行個體中的每個字典相當於一個獨立的資料庫,它對外是以一個從0開始的遞增數字命名,不支援自訂名字。預設使用0號,可以通過SELECT命令來切換。

另外redis也不支援位每個資料庫設定不同的訪問密碼,且多個資料庫之間並不是完全隔離的,比如FLUSHALL命令可以清空一個執行個體中的所以資料庫。

因此不同的字典適合當做命名空間來使用,比如0號用於生產環境,1號用於測試環境等等。

而不同應用的資料最好儲存在不同執行個體當中。

入門-資料類型熱身

1.擷取符合規則的鍵名列表

KEYS pattern

其中pattern支援glob風格萬用字元格式。

? 匹配一個字元

* 匹配任意個字元

[ ] 匹配括弧間的任一字元

\ 用於轉義

例子:

> SET bar 1OK> KEYS *1) "bar"

(redis不區分命令大小寫)

2.判斷一個鍵是否存在

EXISTS key

存在返回1,不存在返回0。

3.刪除鍵

DEL key [key ...]

可以刪除多個鍵,傳回值是刪除的鍵的個數。

DEL的參數不支援萬用字元,但可以結合Linux的管道和xargs命令自己實現刪除所以符合規則的鍵,比如刪除所有以”user:”開頭的鍵:

redis-cli KEYS "user:*" | xargs redis-cli DEL

4.擷取索引值的資料類型

TYPE key

傳回值可能是:

string(字串類型)

hash(散列類型)

list(清單類型)

set(集合類型)

zset(有序集合類型)

字串類型

Redis的字串是位元組序列。在Redis中字串是二進位安全的,這意味著他們有一個已知的長度,是沒有任何特殊字元終止決定的,所以可以儲存任何東西,最大長度可達512兆。

Redis使用一個sdshdr類型的變數來儲存字串,而redisObject的ptr欄位指向的是該變數的地址。

struct sdshdr {    int len; //字串長度    int free; //buf中剩餘的空間    char buf[]; //字串內容};

相關命令:

1.賦值與取值

SET key valueGET key

例子:

redis 127.0.0.1:6379> SET name "jiange"OKredis 127.0.0.1:6379> GET name"jiange"

2.遞增數字
當儲存的內容是整數形式時,可以進行自增,當索引值不存在時會預設為0,因此第一次遞增之後結果為1。

INCR key

產生自增id:

對於文章資料 post:$postID:data ,我們需要每一篇文章有一個唯一的自增id->”\$postID”,可使用名為 物件類型(複數形式):count(命名僅供參考,可以使用其他任意名字)的鍵來儲存當前類型對象的數量,每增加一個新對象就對它使用INCR:

$postID = INCR posts:count$serializedPost = serialize($title,$content,$author,$time)SET post:$postID:data, $serializedPost

3.增加指定整數

INCRBY key increment

4.減少指定整數

DECR keyDECRBY key decrement

5.增加指定浮點數

INCRBYFLOAT key increment

6.向尾部追加值

APPEND key value

7.擷取字串長度

STRLEN key

8.同時獲得/設定多個索引值

MGET key [key ...]MSET key value [key value ...]

9.位操作

GETBIT key offsetSETBIT key offset valueBITCOUNT key [start] [end] //獲得二進位中1的個數BITOP operation destkey key [key ...]//operation包括AND,OR,XOR,NOT
散列類型

散列類型的索引值也是一種字典類型,其儲存了欄位和欄位值的映射,欄位值只能是字串,一個散列類型鍵可以包含至多2^32-1個欄位。

散列類型適合儲存物件:使用物件類別和ID構成key,使用欄位表示對象的屬性,而欄位值則儲存屬性值。

比如:

鍵       欄位  欄位值        color   白色car:2   name    奧迪        price   90萬

該汽車對象的ID為2。

相關命令:

1.賦值和取值

HSET key field valueHGET key fieldHMSET key field value [field value ...]HMGET key field [field ...]HGETALL key

HSET命令不區分插入和更新操作,當執行的是插入時返回1,更新時返回0。當鍵本身不存在時,HSET命令會自動建立它。

2.判斷欄位是否存在

HEXISTS key field

3.當欄位不存在時賦值

HSETNX key field value

如果欄位已存在,將不執行任何操作。

4.增加數字

HINCRBY key field increment

5.刪除欄位

HDEL key field [field ...]

6.只擷取欄位名或欄位值

HKEYS keyHVALS key

7.獲得欄位數量

HLEN key
清單類型

list可以儲存一個有序的字串列表,常用的操作是向列表兩端添加元素,或者獲得列表的某一個片段。其內部使用雙向鏈表實現,因此在頭部和尾部添加和擷取元素的速度很快,缺點是通過索引訪問元素比較慢。

一個清單類型的鍵最多能容納2^32-1個元素。

相關命令:

1.向列表兩端增加元素

LPUSH key value [value ...]RPUSH key value [value ...]

分別向索引值位key的列表左邊和右邊添加元素,傳回值表示增加元素後列表的長度。

2.向列表兩端彈出元素

LPOP keyRPOP key

3.擷取列表中元素的個數

LLEN key

當索引值不存在時會返回0;

4.獲得列表片段

LRANGE key start stop

LRANGE支援負索引,表示從右邊開始計算序數,-1表示最右邊第一個元素,-2表示最右邊第二個元素;

LRANGE numbers 0 -1 可以獲得列表所有元素

當start的索引位置在stop的索引位置後面時,返回空列表;
當stop超過實際的索引範圍時,則返回到列表最右邊的元素;

5.刪除列表中指定的值

LREM key count value

rem位remove的縮寫;
以上命令刪除列表中前count個值為value的元素,返回的是實際刪除的元素個數;
當count > 0時,從列表左邊開始刪除;
當count < 0時,從列表右邊開始刪除;
當count = 0時,從列表中刪除【所有】值為value的元素;

6.獲得/設定指定索引的元素值

LINDEX key indexLSET key index value

LINDEX用來返回指定索引的元素,索引從0開始,index是負數則表示從右邊開始計算;

7.只保留列表指定欄位

LTRIM key start end

該命令可以刪除指定索引範圍之外的所有元素(左右都是閉區間);

8.向列表中插入元素

LINSERT key BEFORE|AFTER pivot value

在值為pivot的元素前面or後面插入值value;

9.將元素從一個列錶轉到另一個列表

RPOPLPUSH source destination
集合類型

集合中每個元素都是不同的,且沒有順序,一個集合類型的鍵可以儲存至多2^32-1個字串。

集合類型在redis內部是使用值為空白的散列表實現的。

多個集合類型鍵之間可以進行並集,交集和差集運算。

相關命令:

1.增加/刪除元素

SADD key member [member ...]SREM key member [member ...]

傳回值是成功加入/刪除的元素數量;

2.獲得集合中的所有元素

SMEMBERS key

3.判斷元素是否在集合中

SISMEMBER key member

時間複雜度為O(1);

4.集合間運算

SDIFF key [key ...]SINTER key [key ...]SUNION key [key ...]

5.獲得集合中元素個數

SCARD key

6.進行集合運算並儲存結果

SDIFFSTORE destination key [key ...]SINTERSTORE destination key [key ...]SUNIONSTORE destination key [key ...]

7.隨機獲得集合中的元素

SRANDMEMBER key [count]

事實上,這裡的隨機是隨機挑選一個桶(上面提到,set是用hash實現的),再從桶裡隨機播放一個元素,因此每個元素被選中的機率並不一樣。

8.從集合中彈出一個元素

SPOP key

隨機彈出一個元素。

有序集合類型

有序集合類似集合。不同的是,一個有序集合的每個元素帶有分數,便於排序。

有序集合類型是使用散列表和跳躍表實現的,所以即使讀取位於中間部分的資料,速度也很快(時間複雜度為O(log(N)))。

相關命令:

1.增加元素

ZADD key score member [score member ...]

如果一個元素已經存在,則用新的分數替換原有的分數。
傳回值為新加入到集合中的元素個數。

2.獲得元素的個數

ZSCORE key member

3.獲得排名在某個範圍的元素列表

ZRANGE key start stop [WITHSCORES]ZREVRANGE key start stop [WITHSCORES]

ZRANGE會按照元素分數從小到大的順序返回索引從start到stop之間的所有元素(包含兩端的元素)。

WITHSCORES可以同時獲得元素的分數。

ZREVRANGE則是按分數從大到小排序。

4.獲得指定分數範圍的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

按照分數從小到大的順序返回分數在min和max之間(包含min和max)的元素。

LIMIT offset count 在獲得的元素列表的基礎上向後位移offset個元素,並且只擷取前count個元素。

5.增加某個元素的分數

ZINCRBY key increment member

6.獲得集合中元素的數量

ZCARD key

7.獲得指定分數範圍內的元素個數

ZCOUNT key min max

8.刪除一個或多個元素

ZREM key member [member ...]

9.按照排名範圍刪除元素

ZREMRANGEBYRANK key start stop

10.按照分數範圍刪除元素

ZREMRANGEBYSCORE key min max

11.獲得元素的排名

ZRANK key memberZREVRANK key member

12.計算有序集合的交集

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

redis快速入門-資料類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.