在寫另一篇文章( link )的時候,涉及到過濾器(filter)功能。以前沒有接觸過,整理如下。
主要參考這兩篇:
http://blog.csdn.net/u011510825/article/details/51859656
http://redis.io/commands/scan
實驗如下:

$ redis-cli -h [host] -p 8379
> smembers myset
1) "one"
2) "two"
> sscan myset o*
(error) ERR invalid cursor
> sscan myset 0 match o*
1) "0"
2) 1) "one"
> sscan myset 0 match *
1) "0"
2) 1) "one"
2) "two"
> sscan myset 0 match * count 1
1) "2"
2) 1) "one"
> sscan myset1 0 match "{'i': '[1-9][0-9][0-9]*'}"
1) "0"
2) 1) "{'i': '990', 'i2': '991'}"

上面有幾點需要解釋一下。
1. 擷取set的指令需要使用 smember。更多的指令清單參考:
http://www.runoob.com/redis/redis-sets.html

Redis 集合指令
下表列出了 Redis 集合基本指令:
序号 指令及描述
1 SADD key member1 [member2]
向集合添加一個或多個成員
2 SCARD key
擷取集合的成員數
3 SDIFF key1 [key2]
傳回給定所有集合的差集
4 SDIFFSTORE destination key1 [key2]
傳回給定所有集合的差集并存儲在 destination 中
5 SINTER key1 [key2]
傳回給定所有集合的交集
6 SINTERSTORE destination key1 [key2]
傳回給定所有集合的交集并存儲在 destination 中
7 SISMEMBER key member
判斷 member 元素是否是集合 key 的成員
8 SMEMBERS key
傳回集合中的所有成員
9 SMOVE source destination member
将 member 元素從 source 集合移動到 destination 集合
10 SPOP key
移除并傳回集合中的一個随機元素
11 SRANDMEMBER key [count]
傳回集合中一個或多個随機數
12 SREM key member1 [member2]
移除集合中一個或多個成員
13 SUNION key1 [key2]
傳回所有給定集合的并集
14 SUNIONSTORE destination key1 [key2]
所有給定集合的并集存儲在 destination 集合中
15 SSCAN key cursor [MATCH pattern] [COUNT count]
疊代集合中的元素

2. 可以看到sscan的傳回結果,有兩部分,第一部分是一個數字,基本是0,有時候是正數。第二部分是結果。
其實第一部分代表一個遊标。scan就是以遊标為基礎,每次使用scan(包括sscan),以遊标0開始,然後指令會傳回一個新的遊标;如果新的遊标不是0,表示周遊還沒有結束,要使用新的遊标作為參數,繼續輸入獲得後面的結果。
比如下面這個 count 1的時候,周遊沒有結束,就會傳回非0的遊标。後續要使用新的遊标來運作指令。

> smembers myset
1) "one"
2) "two"
> sscan myset 0 match * count 1
1) "2"
2) 1) "one"
> sscan myset 2 match * count 1
1) "3"
2) 1) "two"
> sscan myset 3 match * count 1
1) "0"
2) (empty list or set)

官網的解釋可以檢視這裡:

$ redis-cli -h [host] -p 8379
> smembers myset
1) "one"
2) "two"
> sscan myset o*
(error) ERR invalid cursor
> sscan myset 0 match o*
1) "0"
2) 1) "one"
> sscan myset 0 match *
1) "0"
2) 1) "one"
2) "two"
> sscan myset 0 match * count 1
1) "2"
2) 1) "one"
> sscan myset1 0 match "{'i': '[1-9][0-9][0-9]*'}"
1) "0"
2) 1) "{'i': '990', 'i2': '991'}"


Redis 集合指令
下表列出了 Redis 集合基本指令:
序号 指令及描述
1 SADD key member1 [member2]
向集合添加一個或多個成員
2 SCARD key
擷取集合的成員數
3 SDIFF key1 [key2]
傳回給定所有集合的差集
4 SDIFFSTORE destination key1 [key2]
傳回給定所有集合的差集并存儲在 destination 中
5 SINTER key1 [key2]
傳回給定所有集合的交集
6 SINTERSTORE destination key1 [key2]
傳回給定所有集合的交集并存儲在 destination 中
7 SISMEMBER key member
判斷 member 元素是否是集合 key 的成員
8 SMEMBERS key
傳回集合中的所有成員
9 SMOVE source destination member
将 member 元素從 source 集合移動到 destination 集合
10 SPOP key
移除并傳回集合中的一個随機元素
11 SRANDMEMBER key [count]
傳回集合中一個或多個随機數
12 SREM key member1 [member2]
移除集合中一個或多個成員
13 SUNION key1 [key2]
傳回所有給定集合的并集
14 SUNIONSTORE destination key1 [key2]
所有給定集合的并集存儲在 destination 集合中
15 SSCAN key cursor [MATCH pattern] [COUNT count]
疊代集合中的元素


> smembers myset
1) "one"
2) "two"
> sscan myset 0 match * count 1
1) "2"
2) 1) "one"
> sscan myset 2 match * count 1
1) "3"
2) 1) "two"
> sscan myset 3 match * count 1
1) "0"
2) (empty list or set)
