Mac上的Redis安裝和使用


redis簡介

 

REmote DIctionary Server(Redis) 是一個由 Salvatore Sanfilippo 寫的 key-value 存儲系統,是跨平台的非關系型數據庫。

Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協議、支持網絡、可基於內存、分布式、可選持久性的鍵值對(Key-Value)存儲數據庫,並提供多種語言的 API。

Redis 通常被稱為數據結構服務器,因為值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等類型

redis安裝

 brew install redis

 redis啟動

brew services start redis

redis-server

交互模式

redis-cli -h 127.0.0.1 -p 6379

使用redis-cli連接本地服務

zhouxi@zhouxideMacBook-Pro ~ % redis-cli
127.0.0.1:6379> 

執行PING指令

127.0.0.1:6379> PING
PONG
127.0.0.1:6379> 

關閉redis服務

redis-cli shutdown

強制關閉redis服務

sudo pkill redis-server

添加key-value

127.0.0.1:6379> SET runoobkey redis
OK

查詢key-value

127.0.0.1:6379> GET runoobkey
"redis"

刪除key-value

127.0.0.1:6379> DEL runoobkey
(integer) 1

判斷Key是否存在

127.0.0.1:6379> EXISTS runoobkey
(integer) 1

 

redis哈希

存儲哈希值

127.0.0.1:6379> HMSET runoobkey name "redis" description "cac" likes 20 vis 23000
OK

獲取全部屬性

127.0.0.1:6379> HGETALL runoobkey
1) "name"
2) "redis"
3) "description"
4) "cac"
5) "likes"
6) "20"
7) "vis"
8) "23000"

判斷HASH是否存在

HEXISTS runoobkey name

獲取指定屬性

127.0.0.1:6379> HGET runoobkey name
"redis"

獲取所有key

127.0.0.1:6379> HKEYS runoobkey
1) "name"
2) "description"
3) "likes"
4) "vis"

修改指定屬性

127.0.0.1:6379> HSET runoobkey name "hello"
(integer) 0

修改多個屬性

127.0.0.1:6379> HSET runoobkey name "hello" description "new des"
(integer) 0

redis列表

Redis列表是簡單的字符串列表,按照插入順序排序

創建列表並添加兩個元素

127.0.0.1:6379> LPUSH runoobkey redis
(integer) 1
127.0.0.1:6379> LPUSH runoobkey mongodb
(integer) 2

獲取指定index的元素

127.0.0.1:6379> LINDEX runoobkey -1
"redis"

redis集合(set)

向集合中添加值

127.0.0.1:6379> SADD runoobkey redis
(integer) 1
127.0.0.1:6379> SADD runoobkey mongodb
(integer) 1
127.0.0.1:6379> SADD runoobkey redis
(integer) 0

Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味着集合中不能出現重復的數據,這里返回0

redis有序集合(sorted set)

Redis 有序集合和集合一樣也是 string 類型元素的集合,且不允許重復的成員。

不同的是每個元素都會關聯一個 double 類型的分數。redis 正是通過分數來為集合中的成員進行從小到大的排序。

有序集合的成員是唯一的,但分數(score)卻可以重復。

創建和添加屬性

127.0.0.1:6379> ZADD runoobkey 1 redis
(integer) 1
127.0.0.1:6379> ZADD runoobkey 2 redis
(integer) 0
127.0.0.1:6379> ZADD runoobkey 1 rediss
(integer) 1

 

redis發布訂閱

Redis 發布訂閱 (pub/sub) 是一種消息通信模式:發送者 (pub) 發送消息,訂閱者 (sub) 接收消息。

Redis 客戶端可以訂閱任意數量的頻道。

創建一個redis-cli客戶端訂閱消息

zhouxi@zhouxideMacBook-Pro ~ % redis-cli
127.0.0.1:6379> SUBSCRIBE runoobChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "runoobChat"

創建一個redis-cli客戶端發送消息

zhouxi@zhouxideMacBook-Pro ~ % redis-cli
127.0.0.1:6379> PUBLISH runoobChat "Redis PUBLISH test"
(integer) 1
127.0.0.1:6379> 

這是訂閱端會收到消息

3) (integer) 1
1) "message"
2) "runoobChat"
3) "Redis PUBLISH test"

redis事務

Redis 事務可以一次執行多個命令, 並且帶有以下三個重要的保證:

  • 批量操作在發送 EXEC 命令前被放入隊列緩存。
  • 收到 EXEC 命令后進入事務執行,事務中任意命令執行失敗,其余的命令依然被執行。
  • 在事務執行過程,其他客戶端提交的命令請求不會插入到事務執行命令序列中。

一個事務從開始到執行會經歷以下三個階段:

  • 開始事務。
  • 命令入隊。
  • 執行事務。

以下是一個事務的例子, 它先以 MULTI 開始一個事務, 然后將多個命令入隊到事務中, 最后由 EXEC 命令觸發事務, 一並執行事務中的所有命令:

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET book-name "hell"
QUEUED
127.0.0.1:6379> GET book-name
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) "hell"
127.0.0.1:6379> 

單個 Redis 命令的執行是原子性的,但 Redis 沒有在事務上增加任何維持原子性的機制,所以 Redis 事務的執行並不是原子性的。

事務可以理解為一個打包的批量執行腳本,但批量指令並非原子化的操作,中間某條指令的失敗不會導致前面已做指令的回滾,也不會造成后續的指令不做。

redis stream

Redis Stream 是 Redis 5.0 版本新增加的數據結構。

Redis Stream 主要用於消息隊列(MQ,Message Queue),Redis 本身是有一個 Redis 發布訂閱 (pub/sub) 來實現消息隊列的功能,但它有個缺點就是消息無法持久化,如果出現網絡斷開、Redis 宕機等,消息就會被丟棄。

簡單來說發布訂閱 (pub/sub) 可以分發消息,但無法記錄歷史消息。

而 Redis Stream 提供了消息的持久化和主備復制功能,可以讓任何客戶端訪問任何時刻的數據,並且能記住每一個客戶端的訪問位置,還能保證消息不丟失。

每個 Stream 都有唯一的名稱,它就是 Redis 的 key,在我們首次使用 xadd 指令追加消息時自動創建。

 

 

 

 

 

 

每個 Stream 都有唯一的名稱,它就是 Redis 的 key,在我們首次使用 xadd 指令追加消息時自動創建。

上圖解析:

  • Consumer Group :消費組,使用 XGROUP CREATE 命令創建,一個消費組有多個消費者(Consumer)。
  • last_delivered_id :游標,每個消費組會有個游標 last_delivered_id,任意一個消費者讀取了消息都會使游標 last_delivered_id 往前移動。
  • pending_ids :消費者(Consumer)的狀態變量,作用是維護消費者的未確認的 id。 pending_ids 記錄了當前已經被客戶端讀取的消息,但是還沒有 ack (Acknowledge character:確認字符)。

消息隊列相關命令:

  • XADD - 添加消息到末尾
  • XTRIM - 對流進行修剪,限制長度
  • XDEL - 刪除消息
  • XLEN - 獲取流包含的元素數量,即消息長度
  • XRANGE - 獲取消息列表,會自動過濾已經刪除的消息 
  • XREVRANGE - 反向獲取消息列表,ID 從大到小
  • XREAD - 以阻塞或非阻塞方式獲取消息列表

消費者組相關命令:

  • XGROUP CREATE - 創建消費者組
  • XREADGROUP GROUP - 讀取消費者組中的消息
  • XACK - 將消息標記為"已處理"
  • XGROUP SETID - 為消費者組設置新的最后遞送消息ID
  • XGROUP DELCONSUMER - 刪除消費者
  • XGROUP DESTROY - 刪除消費者組
  • XPENDING - 顯示待處理消息的相關信息
  • XCLAIM - 轉移消息的歸屬權
  • XINFO - 查看流和消費者組的相關信息;
  • XINFO GROUPS - 打印消費者組的信息;
  • XINFO STREAM - 打印流信息

 

清除所有數據

127.0.0.1:6379> FLUSHALL 
OK
127.0.0.1:6379> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM