ElasticSearch 进行对多条数据(不同参数)进行批量更新
ElasticSearch 批量处理介绍_bulk API_update by query产生的问题通过 Script + UPDATE BY QUERY 进行批量更新
PHP7.4 编译安装笔记
准备工作下载 PHP 7.4 源码PHP版本发布:(https://www.php.net/downloads)[https://www.php.net/downloads]
这里选择的是最新的 PHP 7.4.9 (其实8.0 的 Beta 测试版已经出来了)
1wget https://www.php.net/distributions/php-7.4.9.tar.gz -O /opt/php74.tar.gz
解压1cd /opt && tar -zxf /opt/php74.tar.gz
查看解压内容1cd php74 && ls -lh
安装工作configure执行 ./configure
1./configure -prefix=/usr/local/php --with-curl --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-mysqli --with-openssl --with-pdo-mysql --w ...
SPL笔记 —— Countable 接口
SPL 的 Countable 接口允许实现了接口的类的对象作为 count() 函数的参数,以此来达到语义上的“计数”能力。
没啥好说的…直接上代码吧…很简单…主要就是要实现 Countable 接口的 public function count() 方法。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253<?phpclass SystemError implements Countable{ /** * 错误列表 * @var array */ protected static $error = []; /** * @var static */ protected static $instance; /** * 实现 Countable 的 count 方法 * @retur ...
PHP (new self) 和 (new static) 的区别
今天在做组件化的 Model 设计,打算采用单例模式
打算使用父类 Model 统一定义单例模式的 instance() 方法,结果发现产生了这样的现象:
echo get_class(UserModel()->instance());
输出结果是:
Model
这就导致很神奇的事情发生了,当我拿 UserModel()->instance()->data 的时候会拿到 Model 预定义的 Model,在子类覆盖父类的 data 丝毫不起作用。
查了一下原因,结果就出现在 new self 上。
self 指的是被执行的代码段所在的类,这个情况里,就是 instance() 方法定义在 Model 这个父类,所以 self 就是指的 Model 这个父类。 static 指的是真正执行代码段的类,在 UserModel::instance() 则个情况中, static 就是指 UserModel 这个类。
所以现在只需要将 new self 改为 new static 就可以小小的解决这个问题。 但是还有一些问题没有处理好!
我们用的是 se ...
MySQL导入大文件需要注意的一点
今天想导入一个数据库,讲道理其实也不算很大,所以一开始我选择的PHPmyAdmin来导入,结果出了问题,我还以为是 MariaDB导出的SQL语法不兼容的问题,后来发现报错为 MySQL server has gone away,早早就断了MySQL服务器的连接,所以后续的操作没有办法继续依照之前的导入顺序进行。
更换了 Navicat 之后,还是出现这样的问题。于是我分析了一下SQL文件,发现文件行不多,只有一千多行,但是 insert 语句的 values 特别特别长,估计是由于一个大量数据的Insert操作导致SQL的执行时间过长,所以与客户端断开连接。执行SQL查询
show global variables like ‘max_allowed_packet’;
看到 max_allowed_packet 的最大值是4M,而那条 insert 语句将要插入大概12M的记录,大大超过了限值。
将其非常夸张的改成50M
set global max_allowed_packet = 1024*1024*50;
此时再通过 Navicat 执行 SQL FILE 就 ...
基于 PHP + Redis 的 ip 行为分析及封禁
基于PHP+Redis 的ip行为分析及封禁这个任务的需求来源是因为现在网站的一些接口,比如登录、注册、粉丝、关注等相关功能接口以及部分其他接口存在被一些黑客大量访问、攻击、刷接口以达到某些非法目的情况。对于这一状况,我们需要按照一定的接口频率上限规则,对非法访问接口的 ip 进行行为分析,初步阶段只进行 ip 访问接口频率的判断,并且数据库中存有相关接口要求的 单ip/min 的访问量上限。
那么这件事情就挺好解决了,在数据库中存取某些行为对应的单ip每分钟的访问量上限,接口调度的时候通过请求,将客户端ip和端口限制的行为ID传过来,接着继续执行自身的业务, ip 记录接口保存 ip 和行为 ID 组合在一起的键值对在缓存中值 inc 一次, ip 行为分析工具没分钟自动检索缓存中超过上限 ip ,对其进行封禁即可。
但是海哥告诉我, Redis 中的数据类型有很多种,它不同的数据类型存储、查询等操作,都会有不同的时间复杂度,我们做这个ip行为分析工具,面对的是高并发的状况,不仅要将这个功能做出来,还要考虑到代码的性能以及可用性。于是我就去查阅了一些与Redis命令相关的资料,再进行 ...