最近发表的评论
  • PHP 7.4 新语法:箭头函数 at 1周前

    看着像语法糖,啥时候出来了翻下代码看看确认下。

  • PLAN A:30 分钟未付款取消订单 at 2个月前

    @james_xue 确认下版本,是否重启过服务。然后 redis 命令形式订阅下过期消息看能不能收到。

  • PLAN A:30 分钟未付款取消订单 at 2个月前

    @BradStevens

    • 上文中提到的是队列 加 过期,key 是 ORDER_CONFIRM.$order->id 并不大, value 是 order_id 本身,不是序列化的订单内容。这个 value 甚至可以设为 1 ,并不影响。对于存储空间来说,差异不大。
    • 参考的文章我看了一下,同样引入了 redis ,不过不采用 crontab 来做定时任务,而是使用 swoole ,这样一来,引入了新的复杂性。
    • swoole 没有细用,但看其文档,swoole_timer_tick 限制比较多。
  • PLAN A:30 分钟未付款取消订单 at 2个月前

    @BradStevens 有点不解

    • 放在 zset 中的时候是不是仍然需要定时 (如1s或1分钟) 去查询 redis 。这是不是又回到了第一个问题?查询 redis 应该会比查询数据库(Mysql)效率高些。
    • 至于少查一遍数据库的话,任务都是不查数据库的。只是任务的执行体里要查库以确定订单实体,看订单的状态是否变更了是否需要继续执行,这是执行逻辑的事了。即便把订单序死化放到 redis 里,仍然可能在真正执行定时操作时订单状态发生了改变。
  • Laravel 5.8 前瞻 at 3个月前

    @wujunze 被坑过。只怪自己看文档没看仔细。

  • Allowed memory size of 134217728 bytes 错误解决心得 at 3个月前

    @那个松鼠很眼熟 如果是 web 程序,肯定超过90%会挂,首要条件是找为什么内存使用这么高。普通的调优程序员自己都做好了,不会到这来找答案,到这来找答案一般都属于几乎没办法了的这种。上面提供的就是最后的吊命参,当然不能当菜天天吃。

  • [Laravel 5.8] Laravel 5.8 中缓存的 TTL 单位变更 at 3个月前

    我在这个设置上还真踩过坑,一直以为 TTL 是秒 ---- 其他的各种 TTL 都是秒级。然后看文档才知道是分钟。大意了。
    这回改过来了,再好。

  • Laravel-admin 如何安装? at 4个月前

    @water_of_droplets 这是 nodejs,webpack 的锅

  • PLAN A:30 分钟未付款取消订单 at 4个月前

    @GDDD Laravel 里有 delay ,可以直接用,因为有很多讲 delay 的文章,想必大家都熟悉了,所以这次就略过了。

  • PLAN A:30 分钟未付款取消订单 at 4个月前

    @snower 没事的,别放 redis 里,放其他专业的消息队列里,一天百万不是什么事儿。象 rabbitmq , zeromq ,kafka ,至少是 c10k 的,每秒万条并发,一天下来10亿不是事。至于处理那些过期事件,要看消费者的能力了,多台群集可以尝试。如果担心一台 mq 的处理能力,可以配置多台,根据类型发到不同的消息队列分担任务就行。

  • 【北京 】【百度】【20K-30K】PHP 研发攻城狮请到碗里来(B2B 业务) at 4个月前

    可惜我 toC 了好多年。

  • E-commerce 中订单系统的设计 at 4个月前

    @Wi1dcard 抱歉。我们讨论的始终是电商,不是微观世界,没那么多小数位的,你可以继续选择用 decimal ,并不影响。就止停止,不再回复。

  • E-commerce 中订单系统的设计 at 4个月前

    @Max 我们的算法是直接按分四舍五入的,最后一个补全,比如3个人付11分(仅为演示),则第一第二个是 round(11/3,0) 也就是4分,最后一个是 11-4-4 =3 分,保障整体不会错。 如果是7个人付50分,则前6个付7分,最后人个付8分。偏差在一分钱。要是有客诉,赔1分钱给他就是。

  • E-commerce 中订单系统的设计 at 4个月前

    @Wi1dcard 哥们, 皮分了解一下? unsign bigint 了解一下?

  • PLAN A:30 分钟未付款取消订单 at 4个月前

    考虑下要不要把方案三也简单地实现下。

  • PLAN A:30 分钟未付款取消订单 at 4个月前

    @hello-bug 是的。Laravel 里直接有了 delay .

  • PLAN A:30 分钟未付款取消订单 at 4个月前

    @ruke 是的,第三种方案就是这种。

  • PLAN A:30 分钟未付款取消订单 at 4个月前

    @赵亚博 部分延迟队列也是使用的过期,只不过内部封装好了。

  • PLAN A:30 分钟未付款取消订单 at 4个月前

    @Blings 第三个也简单。按文中描述的,把 app\Console\Commands\OrderExpireListen.php 里的 $order->cancel(); // 执行取消操作 换成 Redis::rpush('ORDER_CANCEL',$order->id); 这样放到队列里。另写一个命令,象 OrderExpire 一样监听队列,从 Redis::blpop 里取出,就有订单ID,然后按往常一样 cancel 处理。上述是伪码。

    因为大部分人的问题可以通过第二种方案解决,若业务量真的大到需要多台单独的机器来处理,估计项目已经用其他语言重构了,所以只留了思路,没有代码。

  • E-commerce 中订单系统的设计 at 4个月前

    @Max 电商系统使用分作为金额单位,在库中存整型,不仅考虑到数据库中读写的精度,更重要的是外部处理程序的精度。 PHP 中,可以使用 bc_math 进行高精度计算,有效解决精度问题,如果是其他的客户端来操作数据库呢?比如 C 、 Erlang 、Rust 、其他各新兴语言 ?能保证其他的语言也能自如地进行高精度运算么?但整型,几乎所有语言都可以。所以为了避免引入浮点数在各个平台/语言上处理不一致的问题,统一使用整型,这是一种避坑的动作,前人流血流泪总结出来的。我们用就是了。

    金融系统还使用皮分作为单位呢。