• 【原】Redis基本操作


    • Redis基本操作

      • 遍历操作

      • Pub-Sub server

      • Lua脚本


    Redis中的这些操作都是不分大小写的。
    除了针对于具体类型的具体操作。还有一些其他操作。

    遍历操作 SCAN cursor [MATCH pattern] [COUNT count]

    • SCAN、SSCAN、HSCAN、ZSCAN是遍历集合元素的命令。
    • SCAN:遍历选中的Redis数据库的集合,相当于全库扫描。
    • SSCAN:遍历Sets类型的元素。
    • HSCAN:遍历Hash类型及对应的value。
    • ZSCAN:遍历Sorted Set类型和对应的scores。

    SCAN基本用法:SCAN cursor

    SCAN是通过游标cursor来遍历集合的,遍历开始时设置为0,如果终止server 返回0,否则,返回cusor遍历的值,该值呈上升趋势且大于0。

    redis 127.0.0.1:6379> scan 0
    1) "17"
    2)  1) "key:12"
        2) "key:8"
        3) "key:4"
        4) "key:14"
        5) "key:16"
        6) "key:17"
        7) "key:15"
        8) "key:10"
        9) "key:3"
       10) "key:7"
       11) "key:1"
    redis 127.0.0.1:6379> scan 17
    1) "0"
    2) 1) "key:5"
       2) "key:18"
       3) "key:0"
       4) "key:2"
       5) "key:19"
       6) "key:13"
       7) "key:6"
       8) "key:9"
       9) "key:11"
    

    SSCAN、HSCAN、ZSCAN和SCAN的不同的是需要指定遍历的集合,基本用法为SSCAN/HSCAN/ZSCAN 集合名字 cusor
    例如:

    redis 127.0.0.1:6379> hmset hash name Jack age 33
    OK
    redis 127.0.0.1:6379> hscan hash 0
    1) "0"
    2) 1) "name"
       2) "Jack"
       3) "age"
       4) "33"
    

    COUNT选项

    该选项指定了每一次调用COUNT命令返回的元素的个数,默认值是10.
    scan 0 count 12

    MATCH选项

    用正则表达式匹配符合条件的元素,可以过滤数据,尤其适合于数据量大的情况下。

    redis 127.0.0.1:6379> sadd myset 1 2 3 foo foobar feelsgood
    (integer) 6
    redis 127.0.0.1:6379> sscan myset 0 match f*
    1) "0"
    2) 1) "foo"
       2) "feelsgood"
       3) "foobar"
    redis 127.0.0.1:6379>
    redis 127.0.0.1:6379> scan 0 MATCH *11*
    1) "288"
    2) 1) "key:911"
    redis 127.0.0.1:6379> scan 288 MATCH *11*
    1) "224"
    2) (empty list or set)
    redis 127.0.0.1:6379> scan 224 MATCH *11*
    1) "80"
    2) (empty list or set)
    redis 127.0.0.1:6379> scan 80 MATCH *11*
    1) "176"
    2) (empty list or set)
    redis 127.0.0.1:6379> scan 176 MATCH *11* COUNT 1000
    1) "0"
    2)  1) "key:611"
        2) "key:711"
        3) "key:118"
        4) "key:117"
        5) "key:311"
        6) "key:112"
        7) "key:111"
        8) "key:110"
        9) "key:113"
       10) "key:211"
       11) "key:411"
       12) "key:115"
       13) "key:116"
       14) "key:114"
       15) "key:119"
       16) "key:811"
       17) "key:511"
       18) "key:11"
    redis 127.0.0.1:6379>
    

    SCAN家族返回值

    SCAN、SSCAN、HSCAN、ZSCAN的返回值格式一样,第一个值是64bit的无符号数,即cursor,第二个值是元素的数组,具体如下:

    • SCAN:返回keys的数组。
    • SSCAN:返回Set元素的数组。
    • HSCAN:返回K-V键值对数组。
    • ZSCAN:返回元素及对应的score组成的数组。

    Pub-Sub server

    Pub/Sub

    SUBSCRIBE, UNSUBSCRIBE and PUBLISH等命令用于实现消息发布/订阅(Publish/Subsribe)。发送者将消息发送到指定的Channels,不需要关心是否有订阅者存在。订阅者可以订阅一个或多个channel。可以理解成发布者和订阅者是通过channel来实现解耦的。

    例如:一个Client订阅“first”“second”两个channel

    127.0.0.1:6379> subscribe first second
    Reading messages... (press Ctrl-C to quit)
    1) "subscribe"
    2) "first"
    3) (integer) 1
    1) "subscribe"
    2) "second"
    3) (integer) 2
    

    另启动一个Client 发布message:

    127.0.0.1:6379> publish second Hello
    (integer) 1
    

    Client接受到message:

    1) "message"
    2) "second"
    3) "Hello"
    

    由上面例子可知,消息的返回值是一个三元组。

    • subscribe:订阅channel,返回值元组第二个元素是channel名称,第三个元素是channel数目。
    • unsubscribe:取消订阅channel,返回值元组最后一个元素表示当前订阅的channel数目。
    • message:消息内容,返回值元组第二个元素是channel名称,第三个元素是消息内容。

    Lua脚本

    EVAL
    EVAL和EVALSHA用Redis内置的Lua编译器执行脚本。
    EVAL脚本第一个参数是eval代表Lua程序的运行环境上下文;第二个参数是具体命令;第三个开始代表Redis的key names。参数能通过Lua的关键字全局变量KEYS、ARGV得到。例如:

    > eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
    1) "key1"
    2) "key2"
    3) "first"
    4) "second"
    

    Lua函数redis.call()和redis.pcall()
    两个函数基本一样,唯一不同的是如果Redis命令调用出错的话,redis.call()将返回具体的错误信息,redis.pcall()将返回Lua table的包装错误。

    例如:给foo赋值为“bar”。

    > eval "return redis.call('set','foo','bar')" 0
    OK
    

    > eval "return redis.call('set',KEYS[1],'bar')" 1 foo
    OK
    

    更多命令操作详见网址:http://redis.io/commands

  • 相关阅读:
    项目管理理论与实践(6)——利用Excel制作项目文档的设计技巧
    项目管理理论与实践(5)——UML应用(下)
    【工具推荐】ELMAH——可插拔错误日志工具
    ExtJs实践(1)——Ext.extend的用法
    设计一套基于NHibernate二级缓存的MongoDB组件(上)
    ExtJs实践(3)——xtype名称与控件对应
    项目管理理论与实践(2)——软件需求分析
    【培训稿件】构建WCF面向服务的应用程序(包含ppt,源代码)
    ExtJs实践(5)——解决在GridPanel中使用bbar或者tbar的分页条的宽度自适应问题
    项目管理理论与实践(3)——如何进行有效的项目管理
  • 原文地址:https://www.cnblogs.com/yourarebest/p/5987438.html
Copyright © 2020-2023  润新知