在写另一篇文章( 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)
官网的解释可以查看这里: