Redis 正则批量删除 key

EVAL "return redis.call('del', 'defaultKey', unpack(redis.call('keys', ARGV[1])))" 0 prefix:* 循环删除: EVAL "local keys = redis.call('keys', ARGV[1]) \n for i=1,#keys,5000 do \n redis.call('del', unpack(keys, i, math.min(i+4999, #keys))) \n end \n return keys" 0 prefix:* References How to atomically delete keys matching a pattern using Redis | stackoverflow – EOF –

August 17, 2020 · 1 min · 48 words · Me

MySQL JSON 数据类型

The JSON Data Type | mysql As of MySQL 5.7.8, MySQL supports a native JSON data type JSON Function Reference | mysql A JSON column cannot have a non-NULL default value. 索引 设置虚拟列 -> 虚拟列建立索引 在 MySQL 5.7 中,支持两种 Generated Column,即 Virtual Generated Column 和 Stored Generated Column,前者只将 Generated Column 保存在数据字典中(表的元数据),并不会将这一列数据持久化到磁盘上;后者会将 Generated Column 持久化到磁盘上,而不是每次读取的时候计算所得。很明显,后者存放了可以通过已有数据计算而得的数据,需要更多的磁盘空间,与 Virtual Column 相比并没有优势,因此,MySQL 5.7 中,不指定 Generated Column 的类型,默认是 Virtual Column。 如果需要 Stored Generated Golumn 的话,可能在 Virtual Generated Column 上建立索引更加合适,一般情况下,都使用 Virtual Generated Column,这也是 MySQL 默认的方式。 ...

August 14, 2020 · 1 min · 160 words · Me

Composer vendor 提交至 Git

应该将 vendor 提交到 Git 吗 一般建议是 不。vendor 目录应添加到 .gitignore。 最佳实践是让所有开发人员使用 Composer 来安装依赖项。类似地,构建服务器、CI、部署工具等都应该作为项目启动的一部分来运行 Composer。 虽然在某些环境下这样做很诱人,但也会导致一些问题: 大型 VCS 存储库的大小和更新代码时的差异。 在你自己的 VCS 复制你所有依赖的历史。 将通过 git 安装的依赖项添加到 git repo 中将显示为 submodules。这是有问题的,因为它们不是真正的 submodules,您将会遇到问题。 如果你真的觉得你必须这样做,你有几个选择: 限制自己安装带标记的版本(没有 dev 版本),这样就只能安装压缩版,并避免与 git submodules 有关的问题。 Use --prefer-dist or set preferred-install to dist in your config. Remove the .git directory of every dependency after the installation, then you can add them to your git repo. You can do that with rm -rf vendor/\*\*/.git in ZSH or find vendor/ -type d -name ".git" -exec rm -rf {} \; in Bash. 但这意味着您必须在运行 composer 更新之前从磁盘中删除这些依赖项。 Add a .gitignore rule /vendor/**/.git to ignore all the vendor .git folders. 这种方法不需要在运行编写器更新之前从磁盘删除依赖项。 我的做法 问题解决了,但是不确信做法是否正确。 ...

August 10, 2020 · 1 min · 142 words · Me

tcpdump 入门使用

tcpdump 是 Unix/Linux 下的抓包工具,可以针对指定网卡、端口、协议进行抓包。 字太多不看 sudo tcpdump host api.test and tcp port 80 -A -nn sudo tcpdump dst api.test and tcp port 80 -A 一举成名天下知 man tcpdump 获取适配器列表 tcpdump -D tcpdump --list-interfaces 1.en0 [Up, Running] 2.p2p0 [Up, Running] 3.awdl0 [Up, Running] 4.llw0 [Up, Running] 5.utun0 [Up, Running] 6.utun1 [Up, Running] 7.utun2 [Up, Running] 8.en5 [Up, Running] 9.lo0 [Up, Running, Loopback] 10.bridge0 [Up, Running] 11.en1 [Up, Running] 12.en2 [Up, Running] 13.en3 [Up, Running] 14.en4 [Up, Running] 15.gif0 [none] 16.stf0 [none] 17.XHC0 [none] 18.XHC1 [none] 19.ap1 [none] 20.XHC20 [none] 21.VHC128 [none] 监听适配器 Listen on interface. ...

June 29, 2020 · 3 min · 639 words · Me

配置 Laradock PhpStorm Xdubug

最近在学习 Yii2 的源码,为了方便调试所以研究下 Laradock + PhpStorm + Xdubug 的配置。 环境 macOS Laradock v10.0 请保证 Laradock 是最新的版本,可以减少不必要的麻烦。也推荐使用我精简过的项目 imzyf/my-dock | github。 配置 Laradock vim .env WORKSPACE_INSTALL_XDEBUG=true PHP_FPM_INSTALL_XDEBUG=true 重新编译 php-fpm 和 workspace 容器: docker-compose build php-fpm workspace 配置 PhpStorm 配置 Docker Preferences > Build, Execution, Deploymnent > Docker 配置 PHP Preferences > Languages & Frameworks > PHP,PHP CLI Interpreter 点 ... 点击 +,选择 From Docker, Vagrant… ...

May 26, 2020 · 1 min · 137 words · Me

PHP float 精度

实例 1 $a = 1.1; var_dump(gettype($a)); // string(6) "double" var_dump($a); // float(1.1) 实例 2 $a = "123456789.1100110011"; $a = (float) $a; var_dump($a); // float(123456789.11001) var_dump(sprintf('%.11f', $a)); // string(21) "123456789.11001099646" $b = 123456789.11001; var_dump($b); // float(123456789.11001) var_dump(sprintf('%.11f', $b)); // string(21) "123456789.11000999808" $c = '123456789.1100110011'; $c = (float) $c; var_dump($c); // float(123456789.11001) $c = (string) $c; var_dump($c); // string(15) "123456789.11001" $c = (float) $c; var_dump($c); // float(123456789.11001) var_dump(sprintf('%.11f', $c)); // string(21) "123456789.11000999808" var_dump($a === $b); // bool(false) - 说明 $a 还是携带着 float 的精度 var_dump($b === $c); // bool(true) 实例 3 // # 1 var_dump(120085 === 1200.85 * 100); // bool(false) // # 2 var_dump(120085 == 1200.85 * 100); // bool(false) // # 3 var_dump(120081 == 1200.81 * 100); // bool(true) // # 4 var_dump(120085 - 1200.85 * 100); // float(1.4551915228367E-11) 实例 4 $a = 0.1; $b = 0.9; $c = 1; var_dump(($a + $b) == $c); // bool(true) var_dump(($c - $b) == $a); // bool(false) var_dump(sprintf('%.20f', $a + $b)); // string(22) "1.00000000000000000000" var_dump(sprintf('%.20f', $c - $b)); // string(22) "0.09999999999999997780" var_dump((0.5 - 0.25) === 0.25); // bool(true) 0.5 二进制 0.1,0.25 二进制 0.01 var_dump((0.25 + 0.25) === 0.5); // bool(true) 实例 5 $n = 19.99; dump($n * 100); // 1999.0 dump((int) ($n * 100)); // 1998 !!! dump((string) ($n * 100)); // "1999" dump((int) (string) ($n * 100)); // 1999 dump(round($n * 100)); // 1999.0 !!! dump((int) round($n * 100)); // 1999 分析 看文档: ...

May 9, 2020 · 3 min · 428 words · Me

vim Code Snippet

常用 全选(高亮显示):按 esc 后,然后 ggvG 或者 ggVG 全部复制:按 esc 后,然后 ggyG 全部删除:按 esc 后,然后 dG 粘贴到终端 vim 缩进错乱 https://stackoverflow.com/questions/2514445/turning-off-auto-indent-when-pasting-text-into-vim/38258720#38258720 在 vim 中粘贴前先输入: :set paste 原因:在终端的 vim 中没有相应的程序来处理这个从其他应用复制粘贴的过程,所以 vim 通过插入键盘输入的 buffer 来模拟这个粘贴的过程,这个时候 vim 会以为这是用户输入的。 问题就是出在这:当上一行结束,光标进入下一行时 vim 会自动以上一行的的缩进为初始位置。这样就会破坏原始文件的缩进。 基础命令 gg 是让光标移到首行,在 vim 才有效,vi 中无效 G 光标移到最后一行 d 删除选中内容 y 复制选中内容到 0 号寄存器 References vim 全选,全部复制,全部删除 | cnblogs 用 vim 打开后中文乱码怎么办? | zhihu – EOF –

April 28, 2020 · 1 min · 63 words · Me

PHP GD 入门使用

GD 安装、配置 考虑到功能需要使用字体库、图像格式 jpeg\png 所以先安装相关库。 字体库 FreeType 2 https://www.freetype.org/ # 在临时目录进行操作 cd /tmp # https://download.savannah.gnu.org/releases/freetype/ wget http://download.savannah.gnu.org/releases/freetype/freetype-2.10.1.tar.gz tar zxvf freetype-2.10.1.tar.gz cd freetype-2.10.1 ./configure --prefix=/usr/local/freetype && make && make install 图像格式 jpeg cd /tmp # http://www.ijg.org/ wget http://www.ijg.org/files/jpegsrc.v9d.tar.gz tar zxvf jpegsrc.v9.tar.gz cd jpeg-9/ ./configure --prefix=/usr/local/jpeg && make && make install 图像格式 png cd /tmp # http://www.libpng.org/pub/png/libpng.html wget https://download.sourceforge.net/libpng/libpng-1.6.37.tar.gz --no-check-certificate tar zxvf libpng-1.6.37.tar.gz cd libpng-1.6.37 ./configure --prefix=/usr/local/libpng && make && make install 安装 GD ...

April 16, 2020 · 1 min · 212 words · Me

PHP Code Snippet

PHP Sandbox Online PHP editor | 3v4l.org PHP Sandbox | onlinephp.io PHP.net Supported Versions | PHP.net Unsupported Branches | PHP.net References PHP News, Articles, Upcoming Changes, and more | PHP.Watch Laravel illuminate # https://github.com/illuminate/database/blob/master/README.md $capsule = new Capsule(); $capsule->addConnection($this->dbConfig); $capsule->setAsGlobal(); // Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher()) $capsule->bootEloquent(); $capsule->getDatabaseManager()->extend('mongodb', function ($config, $name) { $config['name'] = $name; return new \Jenssegers\Mongodb\Connection($config); }); 参数查看 # 查看 PHP 编译时的参数 php -r "phpinfo();" | grep configure # 查看 .ini 配置文件路径 php --ini php -r "phpinfo();" | grep "Configuration File" # 查看 Modules php -m # 显示扩展配置 php --ri gd # 检查扩展是否存在 php --re decimal # 交互式运行模式。具有函数、常量、类名、变量、静态方法调用和类常量的 `tab` 补全功能 # http://php.net/manual/en/features.commandline.interactive.php php -a 查看、修改内存限制 php -r "echo ini_get('memory_limit');" php -r "phpinfo();" | grep memory memory_limit = 1024M; // 临时设置最大内存占用 ini_set('memory_limit', '1024M'); // 设置脚本最大执行时间为 0 永不过期 set_time_limit(0); Too Many Open Files PHP-FPM Too Many Open Files 24 Error (set open file descriptor limit) ...

April 15, 2020 · 3 min · 499 words · Me

MySQL Illegal mix of collations

Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation utf8mb4_unicode_ci 和 utf8_general_ci 列不能混合查询 解决方法 1 统一字段 varchar 的编码集,我推荐使用 utf8mb4_unicode_ci。 解决方法 2 在查询 SQL 中需要转化的字段后面加 COLLATE utf8mb4_unicode_ci. 对比 准确性: utf8mb4_unicode_ci 是基于标准的 Unicode 来排序和比较,能够在各种语言之间精确排序。 utf8mb4_general_ci 没有实现 Unicode 排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。 性能: utf8mb4_unicode_ci 在特殊情况下,Unicode 排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。但是在绝大多数情况下发,不会发生此类复杂比较。相比选择哪一 collation,使用者更应该关心字符集与排序规则在 db 里需要统一。 utf8mb4_general_ci 在比较和排序的时候更快。 utf8mb4 mb4 是 most bytes 4 的意思,专门用来兼容四字节的 unicode。 References Illegal mix of collations | 少年阿斌 – EOF –

April 14, 2020 · 1 min · 63 words · Me