• 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

【原】Redis基本操作的更多相关文章

  1. 三、Redis基本操作——List

    小喵的唠叨话:前面我们介绍了Redis的string的数据结构的原理和操作.当时我们提到Redis的键值对不仅仅是字符串.而这次我们就要介绍Redis的第二个数据结构了,List(链表).由于List ...

  2. 二、Redis基本操作——String(实战篇)

    小喵万万没想到,上一篇博客,居然已经被阅读600次了!!!让小喵感觉压力颇大.万一有写错的地方,岂不是会误导很多筒子们.所以,恳请大家,如果看到小喵的博客有什么不对的地方,请尽快指正!谢谢! 小喵的唠 ...

  3. 一、Redis基本操作——String(原理篇)

    小喵的唠叨话:最近京东图书大减价,小喵手痒了就买了本<Redis设计与实现>[1]来看看.这里权当小喵看书的笔记啦.这一系列的模式,主要是先介绍Redis的实现原理(可能很大一部分会直接照 ...

  4. Redis基本操作-20150608

    Redis基本操作-20150608 [http://my.oschina.net/u/241255/blog/206991]   Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存 ...

  5. Redis基本操作——List

    Redis基本操作——List(原理篇) 学习过数据结构的同学,一定对链表(Linked List)十分的熟悉.相信我们自己也曾经使用过这种数据结构. 链表分为很多种:单向链表,双向链表,循环链表,块 ...

  6. Redis 基本操作

    参考网址:http://doc.redisfans.com/            redis 在操作的时候,不区分大小写(包括php) Key(键) DEL key [key ...] 删除给定的一 ...

  7. Redis基本操作-list

    Redis的5种数据结构:string.list.hash.set和zset; Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数 ...

  8. Redis基本操作-string

    Redis的5种数据结构:string.list.hash.set和zset; Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数 ...

  9. jedis使用线程池封装redis基本操作

    redisclient jedis 经常使用的 操作 key value hash list set zset 的基本操作 package cn.zto.util; import java.util. ...

随机推荐

  1. java se基础

    Super和this的详解 http://wenku.baidu.com/view/365d9100a6c30c2259019e44.html Java 采用三个显式 也就是说 必须明确指定 关键字来 ...

  2. gentoo下grub文件编辑

    在编译完内核,配置好网络,配置好fstab文件等等,最后一个至关重要的文件要属grub文件了,该文件的配置成功才最终决定gentoo 是否成功装上,首先当然是 emerge grub 了,现在就可以配 ...

  3. hdu 2844 poj 1742 Coins

    hdu 2844 poj 1742 Coins 题目相同,但是时限不同,原本上面的多重背包我初始化为0,f[0] = 1;用位或进行优化,f[i]=1表示可以兑成i,0表示不能. 在poj上运行时间正 ...

  4. Unity3d Shader开发(三)Pass(Texturing )

    纹理在基本的顶点光照被计算后被应用.在着色器中通过SetTexture 命令来完成.   SetTexture 命令在片面程序被使用时不会生效:这种模式下像素操作被完全描述在着色器中. 材质贴图可以用 ...

  5. Load a script file in sencha, supports both asynchronous and synchronous approaches

    //http://www.sencha.com/forum/showthread.php?188318-Ext.Loader.loadScriptFile-wrong-URL Ext.Loader.l ...

  6. 利用Multipeer Connectivity框架进行WiFi传输-b

    什么是Multipeer Connectivity? 在iOS7中,引入了一个全新的框架——Multipeer Connectivity(多点连接).利用Multipeer Connectivity框 ...

  7. 正则表达式中的\n

    搜索文件中的字符,希望每次从每行的开始进行匹配. 所以在表达式开头加了\n 结果发现怎么都匹配不了. string regEx = @"\n\d*\s*!\s*TESTNAME” 最后,偶然 ...

  8. 机器学习算法与Python实践之(二)支持向量机(SVM)初级

    机器学习算法与Python实践之(二)支持向量机(SVM)初级 机器学习算法与Python实践之(二)支持向量机(SVM)初级 zouxy09@qq.com http://blog.csdn.net/ ...

  9. 练习C之SELECT形式的非阻塞IO

    呵呵,理解得不深,但毕竟手打全版,且无错.但select.h不知何处找头文件, 粘下来作个记录. POLL,EPOLL感觉代码类似,只是函数和系统实现不一样,,EPOLL目前最合理的.定位精确,算法复 ...

  10. asp.net中GridView的CheckedUnBindCheckBox属性

    1. 获取GridView中CheckBox所选行的字段,即使是在绑定了数据源的时候,也可以获取选中的CheckedUnBindCheckBox对应的各个列的字段 使用时根据实际情况适当的修改即可. ...