`
phipray
  • 浏览: 64515 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Redis相关知识

 
阅读更多

Redis常用命令

 

原子性增长:

 

 

> set counter 100  
OK  
> incr counter  
(integer) 101  
> incr counter  
(integer) 102  
> incrby counter 50  
(integer) 152  
  

 

 

在一个命令中一次设置或者检索多个键有利于减少延迟。为此有了MSETMGET命令:

 

 

> mset a 10 b 20 c 30  
OK  
> mget a b c  
1) "10"  
2) "20"  
3) "30"  
 

 

 

DEL命令删除键及其关联的值

 

 

> set mykey hello  
OK  
> exists mykey  
(integer) 1  
> del mykey  
(integer) 1  
> exists mykey  
(integer) 0  
 

 

 

设置key的保存期expire

 

 

> set key some-value  
OK  
> expire key 5  
(integer) 1  
> get key (immediately)  
"some-value"  
> get key (after some time)  
(nil)  
 

 

TTL命令检查键的生存剩余时间

 

 

> set key 100 ex 10  
OK  
> ttl key  
(integer) 9  
 

 

Redis列表

 LPUSH命令从左边(头部)添加一个元素到列表,RPUSH命令从右边(尾部)添加一个元素的列表。LRANGE命令从列表中提取一个范围内的元素。

 

 

> rpush mylist A  
(integer) 1  
> rpush mylist B  
(integer) 2  
> lpush mylist first  
(integer) 3  
> lrange mylist 0 -1  
1) "first"  
2) "A"  
3) "B"  
 

 

注意LRANGE命令使用两个索引下标,分别是返回的范围的开始和结束元素。两个索引坐标可以是负数,表示从后往前数,所以-1表示最后一个元素,-2表示倒数第二个元素,等等。 
   
如你所见,RPUSH添加元素到列表的右边,LPUSH添加元素到列表的左边。 
   
两个命令都是可变参数命令,也就是说,你可以在一个命令调用中自由的添加多个元素到列表中:

 

 

> rpush mylist 1 2 3 4 5 "foo bar"  
(integer) 9  
> lrange mylist 0 -1  
1) "first"  
2) "A"  
3) "B"  
4) "1"  
5) "2"  
6) "3"  
7) "4"  
8) "5"  
9) "foo bar"  
 

 

 定义在Redis列表上的一个重要操作是弹出元素。弹出元素指的是从列表中检索元素,并同时将其从列表中清楚的操作。你可以从左边或者右边弹出元素,类似于你可以从列表的两端添加元素。 

 

 

> rpush mylist a b c  
(integer) 3  
> rpop mylist  
"c"  
> rpop mylist  
"b"  
> rpop mylist  
"a"  
 

 

Lpushrpushlpoprpop灵活运用就能使redis-list变成队列或者盏

 

  列表的阻塞操作(blocking) 
   
列表有一个特别的特性使得其适合实现队列,通常作为进程间通信系统的积木:阻塞操作。 
   
假设你想往一个进程的列表中添加项,用另一个进程来处理这些项。这就是通常的生产者消费者模式,可以使用以下简单方式实现: 
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

<!--[if !supportLists]-->·                       <!--[endif]-->生产者调用LPUSH添加项到列表中。

<!--[if !supportLists]-->·                       <!--[endif]-->消费者调用RPOP从列表提取/处理项。

 

 然而有时候列表是空的,没有需要处理的,RPOP就返回NULL。所以消费者被强制等待一段时间并重试RPOP命令。这称为轮询 (polling),由于其具有一些缺点,所以不合适在这种情况下: 
    1.
强制Redis和客户端处理无用的命令(当列表为空时的所有请求都没有执行实际的工作,只会返回NULL) 
    2.
由于工作者受到一个NULL后会等待一段时间,这会延迟对项的处理。 
   
于是Redis实现了BRPOPBLPOP两个命令,它们是当列表为空时RPOPLPOP的会阻塞版本:仅当一个新元素被添加到列表时,或者到达了用户的指定超时时间,才返回给调用者。 
这个是我们在工作者中调用BRPOP的例子: 

 

 

> brpop tasks 5  
1) "tasks"  
2) "do_something" 
 

 

 

上面的意思是等待tasks列表中的元素,如果5秒后还没有可用元素就返回 
   
注意,你可以使用0作为超时让其一直等待元素,你也可以指定多个列表而不仅仅只是一个,同时等待多个列表,当第一个列表收到元素后就能得到通知。 
   
关于BRPOP的一些注意事项。 
    1.
客户端按顺序服务:第一个被阻塞等待列表的客户端,将第一个收到其他客户端添加的元素,等等。 
    2.
RPOP的返回值不同:返回的是一个数组,其中包括键的名字,因为BRPOPBLPOP可以阻塞等待多个列表的元素。 
    3.
如果超时时间到达,返回NULL 
   
还有更多你需要知道的关于列表和阻塞选项,建议你阅读下面的页面: 
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

<!--[if !supportLists]-->·                       <!--[endif]-->使用RPOLPUSH构建更安全的队列和旋转队列。

<!--[if !supportLists]-->·                       <!--[endif]-->BRPOPLPUSH命令是其阻塞变种命令。

当所有元素弹出后,键就不存在了。 

相当适合用来做资源池来管理资源

 

Redis集合(Sets) 
    Redis
集合是无序的字符串集合(collections)SADD命令添加元素到集合。还可以对集合执行很多其他的操作,例如,测试元素是否存在,对多个集合执行交集、并集和差集,等等。

 

 

> sadd myset 1 2 3  
(integer) 3  
> smembers myset  
1. 3  
2. 1  
3. 2  

> sismember myset 3  
(integer) 1  
> sismember myset 30  
(integer) 0 
 

 

字典分数(Lexicographical scores) 
   
最近的Redis2.8版本引入了一个新的特性,假定集合中的元素都具有相同的分数,允许按字典顺序获取范围(元素按照C语言中的memcmp函数进行比较,因此可以保证没有整理,每个Redis实例会有相同的输出) 
   
操作字典顺序范围的主要命令是ZRANGEBYLEXZREVRANGEBYLEXZREMRANGEBYLEXZLEXCOUNT。例如,我们再次添加我们的著名黑客清单。但是这次为每个元素使用0分数:

 

 

> zadd hackers 0 "Alan Kay" 0 "Sophie Wilson" 0 "Richard Stallman" 0  
"Anita Borg" 0 "Yukihiro Matsumoto" 0 "Hedy Lamarr" 0 "Claude Shannon"  
 0 "Linus Torvalds" 0 "Alan Turing" 
 

 

 根据有序集合的排序规则,他们已经按照字典顺序排好了:

 

 

> zrange hackers 0 -1  
1) "Alan Kay"  
2) "Alan Turing"  
3) "Anita Borg"  
4) "Claude Shannon"  
5) "Hedy Lamarr"  
6) "Linus Torvalds"  
7) "Richard Stallman"  
8) "Sophie Wilson"  
9) "Yukihiro Matsumoto"  

 

 

 使用ZRANGEBYLEX我们可以查询字典顺序范围:

 

> zrangebylex hackers [B [P  
1) "Claude Shannon"  
2) "Hedy Lamarr"  
3) "Linus Torvalds"

 

NoSql特性

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics