Renhao Li's Blog


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

centos下配置Supervisor

发表于 2018-03-26 | 分类于 Linux

背景

最近项目中需要用到Supervisor来保证进程能持续运行,Supervisor官网中是这样介绍的

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。


阅读全文 »

PHP中精度丢失的问题

发表于 2018-03-20 | 分类于 PHP

问题描述

在做微信支付时,需要将浮点数(以元为单位)转换为整数(以分为单位),结果出现了匪夷所思的问题,代码如下

1
2
3
$num = 9.7*100;
echo $num; //结果为970
echo (int)$num; //结果为969

问题原因

突然想到之前在学习JavaScript的时候看到IEEE754格式,浮点数操作时会出现精度丢失的问题。去看了一下官网手册,果然是这个原因。

浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传递。
此外,以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118…。
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。

阅读全文 »

延迟消息队列-时间轮

发表于 2018-03-09 | 分类于 系统架构

关于订单状态自动更新的思考和实现

发表于 2018-03-09 | 分类于 系统架构

问题描述(背景)

在所有电商交易平台中都会遇到订单状态需要自动流转的问题,比如用户下单未付款30分钟后自动关闭订单、在商家发货15天之后如用户未确认收货自动将订单变为收货状态等等。我查找了一些相关的资料,发现有很多解决方案,下面将列出几个我认为比较经典的方案。

解决方案

1.被动更新

这是最笨也是最麻烦的办法,就是在用户每一次操作时,都需要进行一个订单状态及时间的判断,假设用户一直没有对用户进行操作,那么订单的状态永远不会被更新。

  • 缺点:每次订单操作前都会对订单状态进行判断,假设订单数量很大时,会浪费大量资源;而且随着订单操作方法越来越多,会变得非常不好管理。
阅读全文 »

Redis中的pipline

发表于 2018-03-07 | 分类于 redis学习

什么是流水线

  • 流水线就是将批量命令打包,通过一次网络传输进行操作执行的过程。
  • 批量网络命令通信:n次时间 = n次网络时间 + n次执行时间
  • 流水线命令通信:n次时间 = 1次网络时间 + n次执行时间
  • 主要是为了解决命令在网络传输中耗时长的问题

与原生操作的对比

原生批量操作命令如mset,mset等是原子的,而pipline不是原子操作。

12345
LRHest

LRHest

死都不怕,就怕不安逸,命都不要,就要安逸。

22 日志
10 分类
18 标签
GitHub E-Mail
Links
  • 一只小白
© 2018 LRHest
由 Hexo 强力驱动
|
主题 — NexT.Pisces v6.0.1