Redis的過濾器(SCAN)功能


在寫另一篇文章( 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)

官網的解釋可以查看這里:

http://redis.io/commands/scan

 


免責聲明!

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



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