【原】Redis基本操作


  • Redis基本操作

    • 遍歷操作

    • Pub-Sub server

    • Lua腳本


Redis中的這些操作都是不分大小寫的。
除了針對於具體類型的具體操作。還有一些其他操作。

遍歷操作 SCAN cursor [MATCH pattern] [COUNT count]

  • SCAN、SSCAN、HSCAN、ZSCAN是遍歷集合元素的命令。
  • SCAN:遍歷選中的Redis數據庫的集合,相當於全庫掃描。
  • SSCAN:遍歷Sets類型的元素。
  • HSCAN:遍歷Hash類型及對應的value。
  • ZSCAN:遍歷Sorted Set類型和對應的scores。

SCAN基本用法:SCAN cursor

SCAN是通過游標cursor來遍歷集合的,遍歷開始時設置為0,如果終止server 返回0,否則,返回cusor遍歷的值,該值呈上升趨勢且大於0。

redis 127.0.0.1:6379> scan 0
1) "17"
2)  1) "key:12"
    2) "key:8"
    3) "key:4"
    4) "key:14"
    5) "key:16"
    6) "key:17"
    7) "key:15"
    8) "key:10"
    9) "key:3"
   10) "key:7"
   11) "key:1"
redis 127.0.0.1:6379> scan 17
1) "0"
2) 1) "key:5"
   2) "key:18"
   3) "key:0"
   4) "key:2"
   5) "key:19"
   6) "key:13"
   7) "key:6"
   8) "key:9"
   9) "key:11"

SSCAN、HSCAN、ZSCAN和SCAN的不同的是需要指定遍歷的集合,基本用法為SSCAN/HSCAN/ZSCAN 集合名字 cusor
例如:

redis 127.0.0.1:6379> hmset hash name Jack age 33
OK
redis 127.0.0.1:6379> hscan hash 0
1) "0"
2) 1) "name"
   2) "Jack"
   3) "age"
   4) "33"

COUNT選項

該選項指定了每一次調用COUNT命令返回的元素的個數,默認值是10.
scan 0 count 12

MATCH選項

用正則表達式匹配符合條件的元素,可以過濾數據,尤其適合於數據量大的情況下。

redis 127.0.0.1:6379> sadd myset 1 2 3 foo foobar feelsgood
(integer) 6
redis 127.0.0.1:6379> sscan myset 0 match f*
1) "0"
2) 1) "foo"
   2) "feelsgood"
   3) "foobar"
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> scan 0 MATCH *11*
1) "288"
2) 1) "key:911"
redis 127.0.0.1:6379> scan 288 MATCH *11*
1) "224"
2) (empty list or set)
redis 127.0.0.1:6379> scan 224 MATCH *11*
1) "80"
2) (empty list or set)
redis 127.0.0.1:6379> scan 80 MATCH *11*
1) "176"
2) (empty list or set)
redis 127.0.0.1:6379> scan 176 MATCH *11* COUNT 1000
1) "0"
2)  1) "key:611"
    2) "key:711"
    3) "key:118"
    4) "key:117"
    5) "key:311"
    6) "key:112"
    7) "key:111"
    8) "key:110"
    9) "key:113"
   10) "key:211"
   11) "key:411"
   12) "key:115"
   13) "key:116"
   14) "key:114"
   15) "key:119"
   16) "key:811"
   17) "key:511"
   18) "key:11"
redis 127.0.0.1:6379>

SCAN家族返回值

SCAN、SSCAN、HSCAN、ZSCAN的返回值格式一樣,第一個值是64bit的無符號數,即cursor,第二個值是元素的數組,具體如下:

  • SCAN:返回keys的數組。
  • SSCAN:返回Set元素的數組。
  • HSCAN:返回K-V鍵值對數組。
  • ZSCAN:返回元素及對應的score組成的數組。

Pub-Sub server

Pub/Sub

SUBSCRIBE, UNSUBSCRIBE and PUBLISH等命令用於實現消息發布/訂閱(Publish/Subsribe)。發送者將消息發送到指定的Channels,不需要關心是否有訂閱者存在。訂閱者可以訂閱一個或多個channel。可以理解成發布者和訂閱者是通過channel來實現解耦的。

例如:一個Client訂閱“first”“second”兩個channel

127.0.0.1:6379> subscribe first second
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "first"
3) (integer) 1
1) "subscribe"
2) "second"
3) (integer) 2

另啟動一個Client 發布message:

127.0.0.1:6379> publish second Hello
(integer) 1

Client接受到message:

1) "message"
2) "second"
3) "Hello"

由上面例子可知,消息的返回值是一個三元組。

  • subscribe:訂閱channel,返回值元組第二個元素是channel名稱,第三個元素是channel數目。
  • unsubscribe:取消訂閱channel,返回值元組最后一個元素表示當前訂閱的channel數目。
  • message:消息內容,返回值元組第二個元素是channel名稱,第三個元素是消息內容。

Lua腳本

EVAL
EVAL和EVALSHA用Redis內置的Lua編譯器執行腳本。
EVAL腳本第一個參數是eval代表Lua程序的運行環境上下文;第二個參數是具體命令;第三個開始代表Redis的key names。參數能通過Lua的關鍵字全局變量KEYS、ARGV得到。例如:

> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"

Lua函數redis.call()和redis.pcall()
兩個函數基本一樣,唯一不同的是如果Redis命令調用出錯的話,redis.call()將返回具體的錯誤信息,redis.pcall()將返回Lua table的包裝錯誤。

例如:給foo賦值為“bar”。

> eval "return redis.call('set','foo','bar')" 0
OK

> eval "return redis.call('set',KEYS[1],'bar')" 1 foo
OK

更多命令操作詳見網址:http://redis.io/commands


免責聲明!

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



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