TIGERB
V2EX  ›  PHP

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

  •  4
     
  •   TIGERB · Feb 19, 2017 · 8577 views
    This topic created in 3403 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
        1
    ydxred  
       Feb 19, 2017   ❤️ 1
    前排...
    ersic
        2
    ersic  
       Feb 19, 2017 via Android   ❤️ 1
    收藏待看
    zonghua
        3
    zonghua  
       Feb 20, 2017 via iPhone   ❤️ 1
    PHP 都这么多花样了
    Lucups
        4
    Lucups  
       Feb 20, 2017   ❤️ 2
    恕我直言,这真的不是实战。。。
    实战应该有具体的业务场景。
    改为示例更为稳妥。
    quericy
        5
    quericy  
       Feb 20, 2017   ❤️ 1
    https://github.com/TIGERB/easy-tips/blob/master/redis/pessmistic-lock.php#L30

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

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

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