TIGERB
V2EX  ›  PHP

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

  •  4
     
  •   TIGERB · Feb 19, 2017 · 8953 views
    This topic created in 3554 days ago, the information mentioned may be changed or developed.

    前言

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

    实战

    测试用例

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

    • 克隆项目: git clone [email protected]:TIGERB/easy-tips.git
    • 运行脚本: php redis/test.php [实例名称], 例如测试悲观锁: 运行 php redis/test.php p-lock
    运行结果:
    
    执行 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 编写指南

    Supplement 1  ·  Feb 20, 2017
    纠正 标题《 redis 五种常见使用场景下 PHP 实战》

    为

    《 redis 五种常见使用场景下 PHP 实现》
    20 replies  •  2018-12-14 13:04:16 +08:00
    ydxred
    ydxred
    Feb 19, 2017❤️1
    1
    前排...
    ersic
    ersic
    Feb 19, 2017 via Android❤️1
    2
    收藏待看
    zonghua
    zonghua
    Feb 20, 2017 via iPhone❤️1
    3
    PHP 都这么多花样了
    Lucups
    Lucups
    Feb 20, 2017❤️2
    4
    恕我直言,这真的不是实战。。。
    实战应该有具体的业务场景。
    改为示例更为稳妥。
    quericy
    quericy
    Feb 20, 2017❤️1
    5
    https://github.com/TIGERB/easy-tips/blob/master/redis/pessmistic-lock.php#L30

    这里抢锁的时候是不是应该设置为$microtimeout 而不是$microtime ?
    TIGERB
    TIGERB
    OP
    Feb 20, 2017
    6
    @Lucups 没毛病~ thx~
    TIGERB
    TIGERB
    OP
    Feb 20, 2017
    7
    @quericy 我看看, thx~
    torbrowserbridge
    torbrowserbridge
    Feb 20, 2017
    8
    没有异常捕获,没有返回值判断,不及格
    baoguok
    baoguok
    Feb 20, 2017
    9
    感谢分享
    TIGERB
    TIGERB
    OP
    Feb 20, 2017
    10
    @torbrowserbridge 哈哈~ 批评的好,受教了~

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

    使用 PHP 本地时间的话,如果 PHP 有多台机器会乱
    ik0r
    ik0r
    Feb 20, 2017
    15
    iyaozhen
    iyaozhen
    Feb 20, 2017
    16
    1. 不和别的系统共享缓存的话,序列化使用原生的 serialization 是否更好?
    2. list 做队列有个问题,当数据量很大的时候(消费速度赶不上生产速度) redis 会蹦,而且原生不支持分布式,扩展性较差。 PHP 原生支持异步回调不是太好,不然使用 BRPOP 指令消费更加合适,使用 RPOP 的话相当于轮训了
    3. 演示发布订阅的话,是不是多启动几个订阅者更加好,体现广播的效果
    TIGERB
    TIGERB
    OP
    Feb 20, 2017
    17
    @iyaozhen
    @mcfog 好的,认真学习下,非常感谢~
    changwei
    changwei
    Feb 20, 2017
    18
    segmentfault 上经常看见楼主,哈哈
    TIGERB
    TIGERB
    OP
    Feb 20, 2017
    19
    @changwei 哈哈~
    geekbin
    geekbin
    Dec 14, 2018
    20
    @TIGERB 悲观所中的「$microtimeout = $microtime+$timeout+1;」为啥要加 1 秒,不是有之前的 5 秒超时了吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2143 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 116ms · UTC 01:55 · PVG 09:55 · LAX 17:55 · JFK 20:55
    ♥ Do have faith in what you're doing.