设为首页 收藏本站
查看: 512|回复: 0

[经验分享] Redis相关知识

[复制链接]

尚未签到

发表于 2016-12-18 10:36:45 | 显示全部楼层 |阅读模式
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特性

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-315920-1-1.html 上篇帖子: redis 使用test 下篇帖子: redis安装与参数说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表