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

[经验分享] Redis 发布订阅、事务、脚本、连接、HyperLogLog

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-9-29 09:53:10 | 显示全部楼层 |阅读模式
本次主要介绍Redis的发布订阅、事务、脚本、连接、HyperLogLog

一、发布订阅
1>psubscribe,订阅一个或多个指定的频道
1
2
3
4
5
6
7
8
9
10
11
12
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "tv1"
3) (integer) 1
127.0.0.1:6379> psubscribe tv2 tv3                \\指定订阅2个频道tv2 tv3
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "tv2"
3) (integer) 1
1) "psubscribe"
2) "tv3"
3) (integer) 2



2>pubsub查看发布订阅系统
1
2
127.0.0.1:6379> PUBSUB channels
(empty list or set)



3>publish给指定channel发送message
1
2
3
4
5
6
7
8
9
10
11
12
13
\\先订阅一个channel,然就一直监听着
127.0.0.1:6379> psubscribe tv1
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "tv1"
3) (integer) 1
1) "pmessage"
2) "tv1"
3) "tv1"
4) "test"
\\使用publish指定channel发送message
127.0.0.1:6379> publish www.jinr.com  "test"
(integer) 1



4>punsunbscribe退订所有给定的频道
1
2
3
4
redis 127.0.0.1:6379> PUNSUBSCRIBE mychannel     \\官方的例子
1) "punsubscribe"
2) "a"
3) (integer) 1



5>sunbscribe订阅一个或多个频道信息
1
2
3
4
5
6
7
8
redis 127.0.0.1:6379> SUBSCRIBE mychannel         \\官方给 例子
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mychannel"
3) (integer) 1
1) "message"
2) "mychannel"
3) "a"



6>unsubscribe指定退订的频道

1
2
3
4
redis 127.0.0.1:6379> UNSUBSCRIBE mychannel         \\官方的例子
1) "unsubscribe"
2) "a"
3) (integer) 0



二、事务
1>multi标记事务开始
1
2
3
4
5
6
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name sunshine
QUEUED
127.0.0.1:6379> set name sunshineboy
QUEUED



2>exec执行所有事务块内的命令
1
2
3
4
5
6
7
8
9
10
11
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name sunshine
QUEUED
127.0.0.1:6379> set name sunshineboy
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
127.0.0.1:6379> get name
"sunshineboy"



3>discard取消所有事务块内的命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
127.0.0.1:6379> get name
"sunshineboy"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name tom
QUEUED
127.0.0.1:6379> exec
1) OK
127.0.0.1:6379> get name
"tom"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name jeery
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get name
"tom"



4>watch乐观锁监视一个或多个key,如果在这个事务之前执行则打断该事务

1
2
3
4
5
6
7
8
9
10
11
12
127.0.0.1:6379> watch name
OK
127.0.0.1:6379> set name jeery            \\在执行multi事务前
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name sunshine
QUEUED
127.0.0.1:6379> exec
(nil)
127.0.0.1:6379> get name
"jeery"



5>unwatch取消乐观锁,停止监视一个或多个key

1
2
3
4
127.0.0.1:6379> watch name
OK
127.0.0.1:6379> unwatch
OK




三、脚本
1>eval执行lua脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second1
1) "key1"
2) "key2"
3) "first"
4) "second1"
127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first2 second1
1) "key1"
2) "key2"
3) "first2"
4) "second1"
127.0.0.1:6379> eval "return {KEYS[1],ARGV[1]}" 1  key1 tom
1) "key1"
2) "tom"




2>script load添加脚本到缓存,但不执行

1
2
127.0.0.1:6379> script load "return sunshine"
"2e985836734751e115ec1eb4762d68ff62b9ca26"



3>script 杀死一个lua脚本
1
2
redis 127.0.0.1:6379> SCRIPT KILL
OK



4>script flush从缓存移除所有脚本
1
2
127.0.0.1:6379> script flush
OK



5>script exsits 查看一个缓存是否存在
1
2
3
4
5
6
7
8
127.0.0.1:6379> script load "return 'sunshine'"
"f3d9b175455690a552555fa76ab4211638248c5b"
127.0.0.1:6379> script exists f3d9b175455690a552555fa76ab4211638248c5b
1) (integer) 1
127.0.0.1:6379> script flush
OK
127.0.0.1:6379> script exists f3d9b175455690a552555fa76ab4211638248c5b
1) (integer) 0




6>evalsh执行一个lua脚本
1
2
3
4
127.0.0.1:6379> script load "return 'sunshine'"
"f3d9b175455690a552555fa76ab4211638248c5b"
127.0.0.1:6379> evalsha "f3d9b175455690a552555fa76ab4211638248c5b" 0
"sunshine"




四、连接

1>select 切换指定数据库,默认0-15

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> select 5
OK
127.0.0.1:6379[5]> select 10
OK
127.0.0.1:6379[10]> select 15
OK
127.0.0.1:6379[15]> select 16
(error) ERR invalid DB index



2>quit关闭当前连接当然还有其他方法exit或者Crtl+c
1
2
3
4
5
6
7
8
127.0.0.1:6379> quit
[iyunv@redis_master ~]# redis-server -a xxxx
6467:C 28 Sep 22:24:12.514 # Fatal error, can't open config file '-a'
[iyunv@redis_master ~]# redis-cli -a xxxx
127.0.0.1:6379> exit
[iyunv@redis_master ~]# redis-cli -a xxxx
127.0.0.1:6379>
[iyunv@redis_master ~]#



3>ping,测试是否redis是否存活
1
2
3
4
5
6
7
8
127.0.0.1:6379> ping
PONG
\\打开new session
[iyunv@redis_master ~]# killall redis-server
[iyunv@redis_master ~]#
\\再次执行ping
127.0.0.1:6379> ping
Could not connect to Redis at 127.0.0.1:6379: Connection refused



4>echo更bash一样
1
2
3
4
5
6
127.0.0.1:6379> echo Sunshine
"Sunshine"
127.0.0.1:6379> echo SunshineBoy
"SunshineBoy"
127.0.0.1:6379> echo SunshineBoySFZ
"SunshineBoySFZ"




5>auth认证,在配置文件设定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[iyunv@redis_master ~]# vim  /usr/local/redis3.0.4/etc/redis.conf

################################## SECURITY ###################################
... \\省略介绍信息
#
requirepass PASSWORD        \\设定密码并保存退出重启redis-server

[iyunv@redis_master ~]# redis-cli
127.0.0.1:6379> kys *
(error) ERR unknown command 'kys'
127.0.0.1:6379> AUTH PASSWORD    \\你在配置文件设定的密码
OK
127.0.0.1:6379> keys *
1) "name"



五、HyperLogLog

1>pfadd指定一个元素到HyperLogLog

1
2
3
4
127.0.0.1:6379> pfadd pfkey a b c d e f g
(integer) 1
127.0.0.1:6379> pfcount pfkey
(integer) 7




2>pfcount显示返回给定HyperLogLog基数
1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> pfadd pfkey a b c d e f g
(integer) 1
127.0.0.1:6379> pfcount pfkey
(integer) 7
127.0.0.1:6379> pfadd pfkey a b c d e f g
(integer) 0
127.0.0.1:6379> pfadd pfkey a b c d e f g
(integer) 0
127.0.0.1:6379> pfcount pfkey
(integer) 7



3>pgmerge将多个HyperLogLog合并为一个
1
2
3
4
5
6
7
8
9
10
11
12
127.0.0.1:6379> pfadd pfkey3 aa bb cc dd
(integer) 1
127.0.0.1:6379> pfadd pfkey4 a b c d
(integer) 1
127.0.0.1:6379> pfcount pfkey3
(integer) 4
127.0.0.1:6379> pfcount pfkey4
(integer) 4
127.0.0.1:6379> pfmerge pfkey5 pfkey3 pfkey4
OK
127.0.0.1:6379> pfcount pfkey5
(integer) 8





至此Redis发布订阅、事务、脚本、连接、HyperLogLo就介绍完毕啦~明天或者后天就会谈到Redis服务器命令~ ^-^




运维网声明 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-279016-1-1.html 上篇帖子: 自动下载安装redis 下篇帖子: redis自动主从切换
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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