Redis 資料庫入門指南

來源:互聯網
上載者:User

標籤:有用   append   benchmark   事件   計數   遠程   系統   構建   ip訪問   

Redis 是一個開來源資料庫,它使用記憶體資料結構儲存,可作為資料庫、緩衝和訊息代理使用。Redis 支援豐富的資料結構,有:字串(Strings)、雜湊(Hashs)、列表(Lists)、集合(Sets)、有序集合(SortedSets)。Redis 內建了複製、Lua指令碼、事務及不同層級的資料硬碟持久化機制,並提供了高可用的Redis Sentinel和自動分區的叢集機制。是構建高效能、可擴充的 Web 應用程式的有效手段。

  1. 安裝配置
    • 1.1 安裝
    • 1.2 配置
    • 1.3 啟動伺服器
    • 1.4 啟動用戶端
  2. 資料類型
    • 2.1 字串(Strings)
    • 2.2 雜湊(Hashs)
    • 2.3 列表(Lists)
    • 2.4 集合(Sets)
    • 2.5 有序集合(SortedSets)
  3. 鍵操作
  4. 發布/訂閱
  5. 事務
  6. 串連驗證
1. 安裝配置1.1 安裝

依次執行以下命令,下載、解壓、編譯、安裝Redis:

$ wget http://download.redis.io/releases/redis-3.2.3.tar.gz$ tar xzf redis-3.2.3.tar.gz$ cd redis-3.2.3$ make & make install

安裝後,會在/usr/local/bin目錄下產生以下幾個檔案,作用如下:

  • redis-server:Redis伺服器端啟動程式
  • redis-cli:Redis用戶端操作工具。也可以用telnet根據其純文字協議來操作
  • redis-benchmark:Redis效能測試工具
  • redis-check-aof:資料修複工具
  • redis-check-dump:檢查匯出工具

 

1.2 配置

Redis 設定檔在目前的目錄下,將其複製到/etc/目錄下:

$ cp redis.conf /etc/

修改設定檔:

$ vi /etc/redis.conf

修改daemonize yes參數,使Redis可以後台運行:

daemonize yes
1.3 啟動伺服器

啟動Redis:

$ /usr/local/bin/redis-server /etc/redis.conf

可以使用ps命令查看啟情況:

$ ps -ef | grep redis

如果看到類型如下輸出,則表示啟動成功:

root     18443     1  0 13:05 ?        00:00:00 ./redis-server *:6379 

為了使Redis能夠開機自動運行,還需要將其加入開機啟動項:

echo "/usr/local/bin/redis-server /etc/redis.conf" >>/etc/rc.local

Redis 安裝配置的詳細介紹請參考:Linux CentOS下安裝Redis

1.4 啟動用戶端

redis-cli是一個Redis 命令列用戶端程式,接下來我們使用這個程式進行一操作。啟動這個程式:

$ redis-cli

啟動後,可通過PING命令檢查伺服器是否連通:

127.0.0.1:6379> PINGPONG

如果需要串連到一台遠程Redids伺服器,可以通過添加redis-cli參數指定。

文法結構如下:

$ redis-cli -h host -p port -a password

如,主機127.0.0.1、連接埠6379上的遠程伺服器,並添加驗證密碼password

$ redis-cli -h 127.0.0.1 -p 6379 -a password127.0.0.1:6379> pingPONG
2. 資料類型

Redis 支援字串(Strings)、雜湊(Hashs)、列表(Lists)、集合(Sets)、有序集合(SortedSets) 5種資料類型,本節介紹這5種資料類型的特點及使用方法。

2.1 字串( Strings)

簡介

字串(Strings)是最基本、使用最多的一種資料類型。Redis的字串是二進位安全的,這意味著你可以使用Redis的字串儲存任何類型的資料,如:JPEG圖片或序列化的Ruby 對象等。

一個字串類型的值最大長度為512 M。

你可以使用Redis 的字串類型做很多有用事情,如:

  • 字串類型可以做為原子計數器使用,可使用的方法有:INCR、DECR、INCRBY
  • 使用APPEND命令向字串追加內容
  • 使用字串的GETRANGE和SETRANGE命令可以做為一個隨機存取向量
  • 對很多在很小的空間資料,或建立一個Redis備份可以使用GETBIT 和 SETBIT命令

使用樣本

設定與取值

使用SET命令可以設定一個字串類型的值,多次調會導致已存在key的值被修改。

使用GET可以擷取已存在字串key的值:

redis> set mySite itbiluOKredis> set mySite itbilu.comOKredis> get mySite"itbilu.com"

自增、自減

“字串”類型中不僅可以存字串值,還可存取整型值/浮點數值。

Redis 提供了INCRDECR等命令,用於整型值的自增、自減等操作。而INCRBYFLOAT可以用於自增一個指定的浮點值:

redis> set myInt 10OKredis> incr myInt(integer) 11redis> incrby myInt 2(integer) 13redis> decr myInt(integer) 12redis> decrby myInt 2(integer) 10redis> incrbyfloat myInt 1.2"11.2"

大量操作

字串類型支援大量操作,使用MSETMSETNX可以大量設定字串類型的key-valueMSETNX僅當不存在時才會設定。

MGET可以用於擷取多個字串類型的值。

redis> mset domain itbilu.com name IT筆錄OKredis> mget domain name1) "itbilu.com"2) "IT\xe7\xac\x94\xe5\xbd\x95"

字串類型詳細介紹請參考:Redis 字串(String)類型

 

2.2 雜湊( Hashs)

簡介

Redis 雜湊(Hashs)是字串欄位和字串值之間的映射,所以它十分適合用來表示一個物件類型。

雜湊在某些應用情境中是一個非常有用儲存方式,你可以將數以百萬計的Object Storage Service在一個很小的 Redis執行個體中。

一個Redis 雜湊值可儲存232-1(40億)個鍵-值對。

使用樣本

設定與取值

設定雜湊類型的值使用HSET,取值使用HGET擷取單個雜湊屬性值,或使用HGETALL擷取雜湊屬性和值:

redis> hset site domain itbilu.com(integer) 1redis> hget site domain"itbilu.com"redis> hgetall site1) "domain"2) "itbilu.com"

大量操作

雜湊同樣支援大量操作。可以使用HMSET設定多個雜湊屬性和值,使用HMGET擷取多個雜湊屬性和值:

redis> hmset site domain itbilu.com name IT筆錄OKredis> hmget site domain name1) "itbilu.com"2) "IT\xe7\xac\x94\xe5\xbd\x95"

雜湊類型詳細介紹請參考:Redis 雜湊(Hash)類型

 

2.3 列表( Lists)

簡介

Redis 列表(Lists)是簡單的字串列表,並根據插入順序進行排序。

你可以使用LPUSH方法向列表的開頭插入新元素,或使用RPUSH方法向列表的結尾插入新元素。當於一個空鍵執行操作時,會建立一個新列表。同樣的如果清空列表時,鍵也將鍵空間中移除。

一個Redis 列表中最多可儲存232-1(40億)個元素。

從時間複雜度來看,Redis 列表的主要特徵是在列表開頭和結尾添加或刪除元素時,訪問時間會非常的快。但如果要訪問列表的中間的元素,則會相對緩慢。

我們常對列表做的操作有:

  • 對於一個在社交網路的時間軸模型,可使用LPUSH向使用者時間軸中依次添加新元素,並可以使用LRANGE取出一些最近插入的新元素。
  • 可以使用LPUSH 和 LTRIM 建立一個不超過指定元素的列表,但只儲存最近的 N 個元素。
  • 列表可以做為原始訊息傳遞,如Ruby 庫Resque就將列表結構做為後台作業。
  • 列表結構還支援多種操作命令,包括阻塞命令BLPOP。

使用樣本

設定與取值

設定一個清單類型值的方式較多。可以通過LPUSHLRUSH向列表的開頭或結尾插入資料,也可以通過LSET對列表中指定索引位的元素進行操作。LSET不允許對不存在的列表進行操作。

列表元素取值要以全用LINDEX擷取指定索引位的元素,也可以使用LPOP返回並移除列表頭部的元素,或使用RPOP返回並移除列表尾部的元素。

redis> lpush mylist one(integer) 1redis> rpush mylist two(integer) 2redis> lset mylist 0 1OKredis> lindex mylist 0"1"redis> lpop mylist"1"redis> lindex mylist 0"two"
2.4 集合( Sets)

簡介

Redis 集合(Sets)是一個字串無序集合,其添加、刪除、測試成員的時間都是O(1)(無論元素多少,都是一個恒定時間)

集合中不允許重複成員的存在。當多次添加一個元素時,其結果會設定單個成員多次。這樣,我們就可不用檢查元素是否存在而直接對元素進行操作。

一個Redis 集合中最多可包含232-1(40億)個元素。

我們可以對Redis 集合進行的操作有:

  • 利用集合的唯一性,可以將所有唯一IP訪問指定向一個部落格貼子。這時只需要每次有頁面訪問時使用SADD 添加記錄,就可確保IP的唯一性。
  • Redis 集合很好的表示了關係。你可以使用Redis 建立一個標籤系統並使用集合來表示每一個標籤。如:可以通過SADD命令,可以把所有對象的標籤ID添加到集合中以表示指定的標籤;如果希望每個對象可以同時有3個不同的人,可以全用SINTER。
  • 通過SPOP 或 SRANDMEMBER 命令,可以隨機的提取集合中的元素。

使用樣本

設定與取值

集合中的元素具有唯一性,所以我們可以向集合中多次添加同一個值,向集合中插入值使用SADD命令。

擷取集合中的元素使用SMEMBERS命令,也可以使用SPOP擷取並刪除一個隨機值。

redis> sadd db MySQL MongoDB Redis(integer) 3redis> smembers db1) "MySQL"2) "MongoDB"3) "Redis"redis> spop db"Redis"redis> smembers db1) "MySQL"2) "MongoDB"

集合間的操作

Redis 還提供了多個集合間操作的方法,如:可以通過SINTER查詢集合間的交集、通過SUNION擷取集間的並集,通過SDIFF擷取集合間的差集。集合中的元素可以通過SMOVE命令從一個集合移到另一個集中。

redis> sadd db MySQL MongoDB Redis(integer) 1redis> sadd sql MySQL MSSQL(integer) 1redis> sinter db sql1) "MySQL"redis> sunion db sql1) "MySQL"2) "MongoDB"3) "Redis"4) "MySql"5) "MSSQL"redis> sdiff db sql1) "MongoDB"2) "Redis"redis> smove sql MSSQL db(integer) 0redis> smembers db1) "MySQL"2) "MongoDB"3) "Redis"
2.5 有序集合( SortedSets)

簡介

Redis 有序集合(SortedSets)類似於集合,同樣是表示字串的集合。不同的是,有序集合中的每個元素都通過 score 進行關聯,並用於集合的排序。對有序集合進行添加、移除、更新都會非常快,因為其中的元素都是有序的。也可以非常快的通過 score 或位置擷取元素的範圍。

使用樣本

設定與取值

有序集合類似於集合,對有序集合插入值時除了指定插入元素外,還要指定一個score參數,該參數可以認為是一個權重,也可以任何是一個排序的序號。

對於有序集合,可以使用ZADD設定集合元素。

有序集合并沒有提供返回全部元素的方法,介可以通過ZRANGE集合指定範圍內的元素,也可以通過ZRANK擷取指定成員的排名,通過ZSCORE返回元素的權重(score)值。

redis> zadd db 1 MySQL(integer) 1redis> zadd db 2 MongoDB 3 Redis(integer) 2redis> ZRANGE db 1 21) "MongoDB"2) "Redis"redis> ZRANK db Redis(integer) 2redis> ZSCORE db Redis"3"
3. 鍵操作

除資料類型操作外,鍵操作也是Redis 中基本和非常重要的操作。Redis 提供很多鍵管理相關方法,如:KEYS鍵尋找、EXPIREAT設定鍵的到期時間、RENAME對鍵重新命名等。

鍵尋找相關操作

在設定或添加某一類型元素前,一般需要先判斷指定的key是否存在。判斷鍵是否存使用EXISTS key命令:

redis> exists dbs(integer) 0redis> exists db(integer) 1

為防止資料類型錯誤,在設定資料值或向某一類型的key插入資料前進行資料類型的判斷,這時可以使用TYPE key命令:

redis> type dbzset

Redis 還提供了一個用於鍵管理的命令KEYS,該命令可以通過匹配模式在資料庫中尋找鍵:

redis> keys d*1) "domain"2) "db"

有效期間

有效期間設定非常有用,我們可以對指定鍵設定一個存留時間,並在到期自動刪除鍵。

設定一個key有效期間,可以使用EXPIREPEXPIRE設定有效期間,EXPIRE通過秒數表示有期,而PEXPIRE使用毫秒設定key的有效期間;還可以使用EXPIREATPEXPIREAT設定key的到期時間,二者通過一個UNIX 時間戳記表示key到期時間,不同的是前者是一個秒級時間戳記,後者是一個毫秒級時間戳記。

對於設定過有效期間的鍵,我們可以通過TTLPTTL查看鍵的到期時間,前者使用秒數表示,後者使用毫秒數表示。

設定鍵的到期時間後,還可以通過PERSIST命令移除到期時間。

redis> set cache itbilu.comOK redis> expire cache 120(integer) 1redis> ttl cache(integer) 114redis> pttl cache(integer) 110248redis> persist cache(integer) 0redis> ttl cache(integer) -1

序列化

為了方便網路傳輸,我們需要將資料庫中儲存物件進行序列化,或者將收到的資料進行還原序列化。在Redis 中可以通過DUMP進行指定key值的序列化,並可以通過RESTORE進行還原序列化。

redis> set cache itbilu.comOK > dump cache "\x00\nitbilu.com\x06\x00\xbf\xad\xf4\x86\xca\"\x90\xeb"redis> restore cache-again 0 "\x00\nitbilu.com\x06\x00\xbf\xad\xf4\x86\xca\"\x90\xeb"OKredis> get cache-again"itbilu.com"

其它操作

當需要對鍵進行重新命名時,可以使用RENAME命令。對於不再需要的鍵,可以通過DEL命令將期刪除。Redis 還支援資料庫間的key轉移,key轉移通過MOVE命名實現。

redis> get cache-again"itbilu.com"redis> set cacha itbilu.comOKredis> rename cacha cahceOKredis> move cache 1(integer) 1redis> del cache(integer) 0
4. 發布/訂閱

Redis 實現了通過發布/訂閱(pub/sub)實現了類似郵件系統的工作機制,寄件者(發行者)可以發送訊息,而接收者(使用者)能過訂閱指定的通道(channel)可以實現訊息的接收。Redis 用戶端可以訂閱任意數量的通道。

發布/訂閱是一種訊息通訊模式,其主要的目的是實現訊息發行者和訂閱者之間的解耦。Redis 做為一個發布/訂閱伺服器,可以實現訊息訂閱者和發行者之間的訊息路由功能。

在Redis 中,訊息類型會做為通道(channel)。訂閱者可以通過SUBSCRIBEPSUBSCRIBE命令訂閱自己所需要的訊息類型。當發行者通過PUBLISH向Redis 伺服器發送特定類型的訊息時,訂閱該訊息的用戶端都會收到該訊息。一個用戶端可以同時是訊息的發行者和訂閱者,也可以是其中之一。一個用戶端可以同時訂單多個通道,也可以向多個通道發布訊息。

使用樣本

啟動一個用戶端(client1),並使用SUBSCRIBE命名訂閱msg事件:

redis> subscribe msgReading messages... (press Ctrl-C to quit)1) "subscribe"2) "msg"3) (integer) 1

在另一個用戶端(client2)中使用PUBLISH命令向msg通道發送訊息:

redis> publish msg "hi, there"(integer) 1

client1會收到如下訊息:

1) "message"2) "msg"3) "hi, there"
5. 事務

Redis 支援事務機制,Redis 中的事務是一組在單一步驟中執行的命令。事務有以下兩個屬性:

  • 在一個事務中,每個命令都是一個獨立的操作,並按順序執行。在事務的執行過程中,Redis 伺服器不會處理其它用戶端的請求。
  • Redis 事務具有原子性,在一個事務當中的命令要麼全部執行成功,要麼全部不執行。

Redis 通過MULTI命令標記一個事務的開始,其後輸入的所有命令會按照先後順序被放進一個隊列當中,然後通過EXEC命令原子性的執行。

# 啟動一個事務redis> MULTIOK# 這裡會輸入一些需要執行的命令redis> EXEC # 依次執行前面輸入的命令

如,我們可以像下面這樣使用Redis 的事務:

redis> multiOKredis> set domain itbilu.comQUEUEDredis> get domainQUEUEDredis> del domainQUEUEDredis> exec1) OK2) "itbilu.com"3) (integer) 1
6. 串連驗證

AUTH - 身分識別驗證

當串連到一個需要驗證的Redis 伺服器進,可以在啟動用戶端時指定串連主機、連接埠、認證密碼等。可以在用戶端啟動後,通過AUTH命令進行驗證。

如,串連到一台本地Redis 伺服器,並在串連進行驗證:

$ redis-cliredis> set name "my name"(error) NOAUTH Authentication required.redis> auth 21jieyan2015OKredis> set name "my name"OK

PING - 伺服器狀態檢測

PING命令用於檢測伺服器狀態,如果伺服器運行正常會響應一個PONG訊息:

redis> pingPONG

SELECT - 資料庫切換

SELECT命令用於切換到指定的資料庫。Redis 中的資料庫使用以0開始的索引號表示,預設為0

如,切換到索引號為1的資料庫:

redis> set db_number 0OKredis> select 1OKredis[1]> get db_number(nil)redis[1]> select 0OKredis> get db_number"0"

QUIT - 關閉串連

操作完畢後,我們可以使用QUIT命令請求伺服器關閉與當前用戶端的串連。一旦所有等待中的回複(如果有)順利寫入到用戶端,串連就會被關閉。

redis> quit$ # 串連已斷開

 轉自:http://itbilu.com/database/redis/4JoBoVuKb.html

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.