zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    c++构造函数析构函数调用顺序
    c++隐藏实例
    c++子类和父类成员函数重名
    C++虚函数·
    c/c++字符数组和字符串大揭秘
    python 基础回顾 一
    python java scala 单例模式
    推荐一款好用并且免费的markdown软件 Typora
    java 的垃圾回收机制 【转】
    python的垃圾回收机制【转】
  • 原文地址:https://www.cnblogs.com/williamjie/p/9502546.html
Copyright © 2011-2022 走看看