標籤:使用 語句 roo 用戶端 size 基本文法 exe 儲存 val
1. Redis 發布訂閱
1.1 概述
Redis 發布訂閱(pub/sub)是一種訊息通訊模式:寄件者(pub)發送訊息,訂閱者(sub)接收訊息。
Redis 用戶端可以訂閱任意數量的頻道。
展示了頻道 channel1 , 以及訂閱這個頻道的三個用戶端 —— client2 、 client5 和 client1 之間的關係:
當有新訊息通過 PUBLISH 命令發送給頻道 channel1 時, 這個訊息就會被發送給訂閱它的三個用戶端:
1.2 步驟:
1.2.1. 建立了訂閱頻道名為 redisChat:
127.0.0.1:6379> SUBSCRIBE redisChatReading messages... (press Ctrl-C to quit)1) "subscribe"2) "redisChat"3) (integer) 1
1.2.2. 重新開啟個 redis 用戶端,然後在同一個頻道 redisChat 發布兩次訊息,訂閱者就能接收到訊息。
[[email protected] 案頭]# redis-cli127.0.0.1:6379> PUBLISH redisChat "Redis is very useful"(integer) 1127.0.0.1:6379> PUBLISH redisChat "learn Redis is neccessary"(integer) 1
1.2.3. 訂閱者的用戶端自動出現內容
127.0.0.1:6379> SUBSCRIBE redisChatReading messages... (press Ctrl-C to quit)1) "subscribe"2) "redisChat"3) (integer) 1#訂閱者的用戶端出現如下內容1) "message"2) "redisChat"3) "Redis is very useful"1) "message"2) "redisChat"3) "learn Redis is neccessary"
2. Redis 事務
Redis 事務可以一次執行多個命令, 並且帶有以下兩個重要的保證:
- 事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他用戶端發送來的命令請求所打斷。
- 事務是一個原子操作:事務中的命令要麼全部被執行,要麼全部都不執行。
一個事務從開始到執行會經曆以下三個階段:
以下是一個事務的例子, 它先以 MULTI 開始一個事務, 然後將多個命令入隊到事務中, 最後由 EXEC 命令觸發事務, 一併執行事務中的所有命令:
127.0.0.1:6379> MULTIOK127.0.0.1:6379> set name "xiaofeng"QUEUED127.0.0.1:6379> get nameQUEUED127.0.0.1:6379> sadd girlfriends "Jenny" "Amy" "lily"QUEUED127.0.0.1:6379> SMEMBERS girlfriendsQUEUED127.0.0.1:6379> EXEC1) OK2) "xiaofeng"3) (integer) 34) 1) "Jenny" 2) "Amy" 3) "lily"
3. Redis指令碼
Redis 指令碼使用 Lua 解譯器來執行指令碼。執行指令碼的常用命令為 EVAL。基本文法
EVAL script numkeys key [key ...] arg [arg ...]
127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second1) "key1"2) "key2"3) "first"4) "second"
4. 資料備份與恢複
資料備份
127.0.0.1:6379> save
OK
改命令會在redis的安裝目錄中建立檔案dump.rdb,並把資料儲存在該檔案中。
查看redis的安裝目錄
127.0.0.1:6379> config get dir1) "dir"2) "/root/\xe6\xa1\x8c\xe9\x9d\xa2"
資料恢複
只需將備份檔案dump.rdb拷貝到redis的安裝目錄即可。
5. 資料庫操作
Redis中,一共有16個資料庫,分別是0~15,一般情況下,進入資料庫預設編號是0,如果我們要進入指定資料庫,可以用select語句
切換到編號為5的資料庫
127.0.0.1:6379> select 5OK127.0.0.1:6379[5]>
查看資料庫中所有的索引值
127.0.0.1:6379[5]> set key1 oneOK127.0.0.1:6379[5]> set key6 sixOK127.0.0.1:6379[5]> keys *1) "key6"2) "key1"
返回當前資料庫中所有key的數目: dbsize
刪除當前資料庫中的所有key: flushdb
清空所有資料庫中的所有key: flushall
把當前資料庫中的key轉移到指定資料庫:move a aim_db
127.0.0.1:6379> select 2OK127.0.0.1:6379[2]> set name DavidOK127.0.0.1:6379[2]> move name 5(integer) 1127.0.0.1:6379[2]> select 5OK127.0.0.1:6379[5]> keys *1) "name"127.0.0.1:6379[5]> get name"David"127.0.0.1:6379[5]> dbsize(integer) 1127.0.0.1:6379[5]> flushdbOK127.0.0.1:6379[5]> keys *(empty list or set)127.0.0.1:6379[5]> flushallOK
flushall會清空所有資料庫的資料,在工作中要慎用
127.0.0.1:6379[5]> select 2OK127.0.0.1:6379[2]> keys *(empty list or set)
(二)Redis 筆記——發布&訂閱、事務、資料庫操作