本篇文章將會繼續介紹Redis緩存數據庫,將從redis命令、事務和發佈訂閱等方面來介紹。
Redis命令
Redis 命令用於在 redis 服務上執行操作。
要在 redis 服務上執行命令需要一個 redis 客戶端。Redis 客戶端在我們之前下載的的 redis 的安裝包中。
命令爲:
$ redis-cli
如果需要在遠程 redis 服務上執行命令,同樣我們使用的也是 redis-cli 命令。
$redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG
這僅僅介紹了redis連接的命令,redis對於5種數據類型,每種類型都有相對應的命令操作,官方文檔上寫的清清楚楚,可查看官方文檔https://redis.io/commands
Redis HyperLogLog
Redis 在 2.8.9 版本添加了 HyperLogLog 結構。
Redis HyperLogLog 是用來做基數統計的算法,它的優點是:在輸入元素的數量或者體積非常大的時候,計算基數所需要的空間固定並且十分小;缺點是:只會根據輸入元素來計算基數,不會存儲輸入元素的本身,所以不能通過命令的方式查看輸入元素的值。
演示工作過程:
redis 127.0.0.1:6379> PFADD runoobkey "redis"
1) (integer) 1
redis 127.0.0.1:6379> PFADD runoobkey "mongodb"
1) (integer) 1
redis 127.0.0.1:6379> PFADD runoobkey "mysql"
1) (integer) 1
redis 127.0.0.1:6379> PFCOUNT runoobkey
(integer) 3
更多命令參考官方文檔
Redis 發佈訂閱
Redis 發佈訂閱(pub/sub)是一種消息通信模式:發送者(pub)發送消息,訂閱者(sub)接收消息。
Redis 客戶端可以訂閱任意數量的頻道。
下圖展示了頻道 channel1 , 以及訂閱這個頻道的三個客戶端 —— client2 、 client5 和 client1 之間的關係:
當有新消息通過 PUBLISH 命令發送給頻道 channel1 時, 這個消息就會被髮送給訂閱它的三個客戶端:
實例演示:創建redisChat的消息頻道
redis 127.0.0.1:6379> SUBSCRIBE redisChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1
現在,我們先重新開啓個 redis 客戶端,然後在同一個頻道 redisChat 發佈兩次消息,訂閱者就能接收到消息。
redis 127.0.0.1:6379> PUBLISH redisChat "Redis is a great caching technique"
(integer) 1
redis 127.0.0.1:6379> PUBLISH redisChat "Learn redis by runoob.com"
(integer) 1
# 訂閱者的客戶端會顯示如下消息
1) "message"
2) "redisChat"
3) "Redis is a great caching technique"
1) "message"
2) "redisChat"
3) "Learn redis by runoob.com"
Redis 事務
Redis 事務可以一次執行多個命令, 並且帶有以下兩個重要的保證:
- 單獨隔離操作,不被其他客戶端發送的命令請求打斷,序列化地順序執行。
- 事務是一個原子操作,要麼事務的所有命令全部執行,要麼所有命令都不執行。
注:什麼是序列化?
就是一種用來處理對象流的機制,將對象的內容進行流化,方便傳輸。
一個事務從開始到執行會經歷以下三個階段:
- 開始事務
- 命令入隊
- 執行事務
實例: 它先以 MULTI 開始一個事務, 然後將多個命令入隊到事務中, 最後由 EXEC 命令觸發事務, 一併執行事務中的所有命令:
redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED
redis 127.0.0.1:6379> GET book-name
QUEUED
redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED
redis 127.0.0.1:6379> SMEMBERS tag
QUEUED
redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
2) "C++"
3) "Programming"
Redis 腳本
Redis 腳本使用 Lua 解釋器來執行腳本。 Reids 2.6 版本通過內嵌支持 Lua 環境。執行腳本的常用命令爲 EVAL。
Eval 命令的基本語法如下:
redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]
實例演示:
redis 127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"