在寫另一篇文章( link )的時候,涉及到過濾器(filter)功能。以前沒有接觸過,整理如下。
主要參考這兩篇:
http://blog.csdn.net/u011510825/article/details/51859656
實驗如下:
$ 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)
官網的解釋可以查看這里: