redis 五种常见使用场景下 PHP 实战

2017-02-19 21:30:41 +08:00
 TIGERB

前言

redis 等 nosql 简单高效的解决了高并发场景下的一系列问题,并很大程度的解放了持久化 DB 的业务压力。

实战

测试用例

5 种使用场景都提供测试用例,使用方法:

运行结果:

执行 count 加 1 操作~ 

count 值为: 1
运行 php redis/test.php 获取参数列表

参数列表:

参数有误,正确示例: php redis/test.php p-lock 
====================================== 
参数列表: 
Array
(
    [缓存] => cache
    [队列] => queue
    [悲观锁] => p-lock
    [乐观锁] => o-lock
    [消息订阅 /推送] => Array
        (
            [订阅] => sub
            [推送] => pub
        )

)

源码

源码地址 https://github.com/TIGERB/easy-tips

这是我的一个关于《一个 php 技术栈后端猿的知识储备大纲》的知识总结,目前只完成了“设计模式”。

纠错

如果大家发现有什么不对的地方,可以发起一个issue或者pull request,我会及时纠正, THX ~

补充:发起 pull request 的 commit message 请参考文章Commit message 编写指南

7903 次点击
所在节点    PHP
20 条回复
ydxred
2017-02-19 21:37:05 +08:00
前排...
ersic
2017-02-19 21:57:37 +08:00
收藏待看
zonghua
2017-02-20 00:25:28 +08:00
PHP 都这么多花样了
Lucups
2017-02-20 00:27:49 +08:00
恕我直言,这真的不是实战。。。
实战应该有具体的业务场景。
改为示例更为稳妥。
quericy
2017-02-20 00:35:30 +08:00
https://github.com/TIGERB/easy-tips/blob/master/redis/pessmistic-lock.php#L30

这里抢锁的时候是不是应该设置为$microtimeout 而不是$microtime ?
TIGERB
2017-02-20 08:39:58 +08:00
@Lucups 没毛病~ thx~
TIGERB
2017-02-20 08:41:20 +08:00
@quericy 我看看, thx~
torbrowserbridge
2017-02-20 09:09:15 +08:00
没有异常捕获,没有返回值判断,不及格
baoguok
2017-02-20 09:56:23 +08:00
感谢分享
TIGERB
2017-02-20 10:03:34 +08:00
@torbrowserbridge 哈哈~ 批评的好,受教了~

thx~
TIGERB
2017-02-20 10:03:51 +08:00
@baoguok 互相学习~ thx~
TIGERB
2017-02-20 10:13:59 +08:00
@quericy 已纠正, thx~
Patrick95
2017-02-20 10:19:10 +08:00
虽然不是真正意义的实战,但足够用来学习了!
mcfog
2017-02-20 12:19:18 +08:00
关于 redis 锁,分布式建议看 redlock https://redis.io/topics/distlock ,而单机锁参考 https://redis.io/commands/set 的后半部分

使用 PHP 本地时间的话,如果 PHP 有多台机器会乱
Jeremial
2017-02-20 12:53:48 +08:00
iyaozhen
2017-02-20 13:16:14 +08:00
1. 不和别的系统共享缓存的话,序列化使用原生的 serialization 是否更好?
2. list 做队列有个问题,当数据量很大的时候(消费速度赶不上生产速度) redis 会蹦,而且原生不支持分布式,扩展性较差。 PHP 原生支持异步回调不是太好,不然使用 BRPOP 指令消费更加合适,使用 RPOP 的话相当于轮训了
3. 演示发布订阅的话,是不是多启动几个订阅者更加好,体现广播的效果
TIGERB
2017-02-20 13:34:19 +08:00
@iyaozhen
@mcfog 好的,认真学习下,非常感谢~
changwei
2017-02-20 22:11:09 +08:00
segmentfault 上经常看见楼主,哈哈
TIGERB
2017-02-20 22:13:37 +08:00
@changwei 哈哈~
geekbin
2018-12-14 13:04:16 +08:00
@TIGERB 悲观所中的「$microtimeout = $microtime+$timeout+1;」为啥要加 1 秒,不是有之前的 5 秒超时了吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/341617

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX