弄技术要弄通-公司reis的pub/sub怎么使用的呢?
Pub/Sub in Redis using PHP
I would like to put an example together about the pub/sub using php in Redis; there is only API documentation available in phpredis, the PHP client I am using (http://redis.io/clients).
0. Setup
First setup a Redis Server. I set up a Redis server in my local box using port 6378 (myredisserver.test.com:6378).
1. Publish: push a message to a channel.
This part is relatively easy. The following is a php script “publish.php“.
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php //publish.php $redis = new Redis(); $redis->pconnect('myredisserver.test.com',6378); $redis->publish('chan-1', 'hello, world!'); // send message to channel 1. $redis->publish('chan-2', 'hello, world2!'); // send message to channel 2. print "\n"; $redis->close();?> |
1.5 Checkpoint: Monitor in Redis server.
Let’s take a break now and see what will happen if we run the script “publish.php” from a client side.
Because I use a non default port, “-p” option is used with “redis-cli” command.
Open a new terminal at Redis Server, and issue “MONITOR” command in redis “console”:
|
1
2
3
4
5
6
7
|
%redis-cli -p 6378redis 127.0.0.1:6378> MONITOROK1321312790.866271 "MONITOR"1321312792.221599 "PING"1321312796.330376 "PUBLISH" "chan-1" "hello, world!" # after run "publish.php"1321312796.330482 "PUBLISH" "chan-2" "hello, world2!" # after run "publish.php" |
2. Subscribe: Listen to a channel (or some channels).
Here is the complete php script “subscribe.php” after I did some debugging. Thanks to the info here: https://github.com/nicolasff/phpredis/issues/36.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<?php//subscribe.phpfunction f($redis, $chan, $msg) { switch($chan) { case 'chan-1': print "get $msg from $chan\n"; break; case 'chan-2': print "get $msg FROM $chan\n"; break; case 'chan-3': break; }}ini_set('default_socket_timeout', -1);$redis = new Redis();$redis->pconnect('myredisserver.test.com',6378);$redis->subscribe(array('chan-1', 'chan-2', 'chan-3'), 'f');print "\n";?> |
2.5
1) run script “subscribe.php“:
|
1
|
%php subscribe.php |
of course, nothing happens.
2) In another terminal window, run script “publish.php” twice, and come back to have a look!
|
1
2
3
4
5
|
%php subscribe.phpget hello, world! from chan-1 #newly displayedget hello, world2! FROM chan-2 #newly displayedget hello, world! from chan-1 #newly displayedget hello, world2! FROM chan-2 #newly displayed |
3. Breakpoint: Revisit the MINTOR window in Redis Server:
|
1
2
3
4
5
6
7
8
9
10
11
|
%redis-cli -p 6378redis 127.0.0.1:6378> MONITOROK1321313546.882528 "MONITOR"1321313552.848569 "PING"1321313553.458541 "SUBSCRIBE" "chan-1" "chan-2" "chan-3"1321313556.223800 "PUBLISH" "chan-1" "hello, world!"1321313556.223862 "PUBLISH" "chan-2" "hello, world2!"1321313557.597914 "PUBLISH" "chan-1" "hello, world!"1321313557.598061 "PUBLISH" "chan-2" "hello, world2!"1321313562.851878 "PING" |
4. Test with multiple publishers and multiple subscribers!
Reference: http://robots.thoughtbot.com/post/6325247416/redis-pub-sub-how-does-it-work
弄技术要弄通-公司reis的pub/sub怎么使用的呢?的更多相关文章
- 打工心态废掉了很多人,包括你吗?(你把现在这家公司的业务都弄清楚、弄懂了吗?君子报仇十年不晚!不离不弃!)good
我只拿这点钱,凭什么去做那么多工作,我傻呀. 我为公司干活,公司付我一份报酬,等价交换而已,我不欠谁的. 我只要对得起这份薪水就行了,多一点我都不干,做了也白做. 工作嘛,又不是为自己干,说得过去就行 ...
- 互联网技术笔试总通不过?leetcode刷对了么
https://36kr.com/p/5084645 Leetcode,绕都绕不过去的程序员刷题神器 编者按:本文来自逆行求职(ID:nixingjihua). 对所有求职技术岗位的童鞋来说,有这么一 ...
- 泛泰A820L (高通公司MSM8660 cpu) 3.4内核CM10.1(Android 4.2.2) 测试版第二版
欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo cr ...
- Nubia Z5S(高通公司MSM8974) QHSUSB_BULK砖的方法节省模式(随着win7在恢复recovery分区案例)
Nubia Z5S在某些异常情况或按组合键进入QHSUSB_BULK状态, 这种模式的现象, 猜想windows(实例win7)即使在数据线, 它会出现在计算机n载,甚至会提示要格式化某些分区(这里要 ...
- 泛泰A860(高通公司8064 cpu 1080p) 拂4.4中国民营recovery TWRP2.7.1.2文本(通过刷第三版)
专业第三方开发团队 VegaDevTeam (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo crazyi(天下无雪 ...
- 高通公司 MSM8K GPT异常原因分析无法开机的问题
问题分析过程如下面: 一. MSM8916台gpt概率问题:采用QPST emmc software download下载软件工具后,无法开机.例如下面的附图: log分析是userdata分区未成功 ...
- pytorch加载数据的方法-没弄,打算弄
参考:https://www.jianshu.com/p/aee6a3d72014 # 网络,netg为生成器,netd为判别器 netg, netd = NetG(opt), NetD(opt) # ...
- 入坑IT十年(二)技术以外
上一篇博客里提到:技术越来越简单,发布后不久,就看到<技术并不是越来越简单>,这显然是打擂台来了. 技术究竟是不是越来越简单?其实这个问题,要看你究竟是以什么角度来思考这个问题.我们可以举 ...
- 手机CPU
说起手机CPU的历史,笔者给大家提一个问题:"世界上第一款智能手机是什么呢?"相信很多人的答案是爱立信的R380或诺基亚的7650,但都不对,真正的首款智能手机是由摩托罗拉在200 ...
随机推荐
- 递归的可视化(Fibonacci)
递归的可视化 修改递归函数,使其能够显示打印出每次函数递归调用的形参的值. 每一级调用的输出都带有一级缩进,就是使得程序的输出清晰.有趣并且有含义. 思路 以斐波那契数列为例,假设n=5,递归的形参如 ...
- .net MVC下跨域Ajax请求(JSONP)
一.JSONP(JSON with Padding) 客户端: <script type="text/javascript"> function TestJsonp() ...
- zeromq编译与应用
libzmq是c++语言开发的,正式版本在这里: https://github.com/zeromq/libzmq/releases 到这篇文件发布为止,正式稳定版是4.2.2 1,按照给出的链接下载 ...
- git-忽略文件改动不进行提交
命令:git update-index --assume-unchanged 文件名 作用:忽略文件的改动,但是不加入.gitignore 文件中,这样可以达到仅在本地目录中忽略,不影响其他团队成员的 ...
- tabs标签页的数据缓存
一进入tabs标签页默认就将所有标签页的数据请求到,并渲染到页面上, 这样如果数据量太大的话会渲染很久, 我的需求就是点击不同的标签时再请求数据,同时对点击过的标签页数据进行缓存,下次点击时不再重新请 ...
- 交叉编译OpenCV的教程——基于aarch64-linux-gnu的交叉编译器
1.获取OpenCV3.3.1的源码 地址:https://pan.baidu.com/s/1lnKDThiWg-2QDXNEzVAqrA 提取码:vmn4 2.解压源码包 命令:unzip open ...
- KNN算法原理及实现
1.KNN算法概述 kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.该方法在确定分类决策上只依据最邻近的一 ...
- vue 运行时 + 编译器 vs. 只包含运行时
https://cn.vuejs.org/v2/guide/installation.html#运行时-编译器-vs-只包含运行时 文档中的这个地方,说的不清楚 If you need to comp ...
- VMware搭建内网并通过iptables端口转发联网
整体流程图 配置Server1 新建两块网卡 一块网卡设置为桥接模式,另外一块设置为仅主机模式 查看两块网卡配置 root@ubuntu:~# ifconfig ens33 Link encap:Et ...
- 【BZOJ 1084】 [SCOI2005]最大子矩阵(DP)
题链 http://www.lydsy.com/JudgeOnline/problem.php?id=1084 Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩 ...