【原】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
【原】Redis基本操作的更多相关文章
- 三、Redis基本操作——List
小喵的唠叨话:前面我们介绍了Redis的string的数据结构的原理和操作.当时我们提到Redis的键值对不仅仅是字符串.而这次我们就要介绍Redis的第二个数据结构了,List(链表).由于List ...
- 二、Redis基本操作——String(实战篇)
小喵万万没想到,上一篇博客,居然已经被阅读600次了!!!让小喵感觉压力颇大.万一有写错的地方,岂不是会误导很多筒子们.所以,恳请大家,如果看到小喵的博客有什么不对的地方,请尽快指正!谢谢! 小喵的唠 ...
- 一、Redis基本操作——String(原理篇)
小喵的唠叨话:最近京东图书大减价,小喵手痒了就买了本<Redis设计与实现>[1]来看看.这里权当小喵看书的笔记啦.这一系列的模式,主要是先介绍Redis的实现原理(可能很大一部分会直接照 ...
- Redis基本操作-20150608
Redis基本操作-20150608 [http://my.oschina.net/u/241255/blog/206991] Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存 ...
- Redis基本操作——List
Redis基本操作——List(原理篇) 学习过数据结构的同学,一定对链表(Linked List)十分的熟悉.相信我们自己也曾经使用过这种数据结构. 链表分为很多种:单向链表,双向链表,循环链表,块 ...
- Redis 基本操作
参考网址:http://doc.redisfans.com/ redis 在操作的时候,不区分大小写(包括php) Key(键) DEL key [key ...] 删除给定的一 ...
- Redis基本操作-list
Redis的5种数据结构:string.list.hash.set和zset; Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数 ...
- Redis基本操作-string
Redis的5种数据结构:string.list.hash.set和zset; Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数 ...
- jedis使用线程池封装redis基本操作
redisclient jedis 经常使用的 操作 key value hash list set zset 的基本操作 package cn.zto.util; import java.util. ...
随机推荐
- linear-gradient 的“高能”用法
首先,让我们来了解一下“linear-gradient”的基本用法: 说明:用线性渐变创建图像 语法: <linear-gradient> = linear-gradient([ [ &l ...
- python编程语言 函数的形参
python编程语言 函数的形参的讲解: 我在交互模式中写了个函数: def adder(**args): sum=0 for x in args.keys(): sum+=args[x] retur ...
- protel DXP的类矢量图功能
一.概述 在写论文的过程中,我们经常需要将protel DXP上的原理图贴入到WORD中.我们可以选择使用截图工具,然后再导入到WORD中.但是由于普通截图图形文件都是位图文件,当我们将图形文件导入W ...
- SDC(1)–Hold Time
从以下两个论点触发可能会使Hold Time的计算理解起来更加容易: (1) H = SU – 1 ; (2) Hold Check的目的是确保Source Clock在某个边沿打出数据时,该数据不会 ...
- joda jar日期处理类的学习
转载:http://www.open-open.com/lib/view/open1348032952724.html 任何企业应用程序都需要处理时间问题.应用程序需要知道当前的时间点和下一个时间点, ...
- Memcache仅仅支持简单数据类型
Memcache仅仅支持简单数据类型 ,复杂数据类型需要应用自己处理 从数据库当中取出数据[User [id=1, username=guowuxin, password=guowuxin], Use ...
- String类中常用的操作
一.获取: 1.获取字符串的长度(注意是方法,不是跟数组的属性一样的) int length(); 1 public static void getLength(){ 2 String s = &qu ...
- Mac下无法推出硬盘
Q:刚刚mac使用移动硬盘,使用后推出时弹出无法推出,提示:Finder正在使用中. 解决:打开#活动监视器#(找不到可以在spotlight中搜索),找到Finder应用,双击,强制退出后再启动Fi ...
- BZOJ 3955 Surely You Congest 解题报告
首先,我们可以求出源为 $1$ 号点的最短路图以及各个点到 $1$ 号点的最短路. 然后我们考虑那些距离不同的点,是一定不会发生拥堵现象的. 然后我们就只需要考虑那些距离相同的点,就相当于做一个最大流 ...
- 【win8技巧】win8快速切换后台应用
今天闲着没事来介绍下win8的使用技巧,不得不说win8把PC带入了Pad时代. 第一招:Win + Tab 在屏幕的最左边就会出现我们想要的后台应用,类似安卓的长按Home的最近任务. 第二招:Al ...