令人困惑的 Go time.AddDate

2022-09-16
阅读 3 分钟
2.5k
我们经常会使用 Go time 包 AddDate(),对日期进行计算。而它得到的结果,可能会往往超出我们的“预期”。(为什么预期要打引号,因为我们的预期可能是模糊、偏差的)。

gorm是如何保证协程安全的

2022-04-01
阅读 3 分钟
3.6k
Gorm 官方文档提供了如何正确使用链式调用的例子以及会引起协程不安全的反例,知道了如何正确使用,也要知道原理才能用的更安心。下面以文档示例和源码切入,浅析 Gorm 在链式调用时时如何保证协程安全的?

RabbitMQ中三个TTL的探讨

2022-02-09
阅读 1 分钟
2k
TTL各自含义在实现延迟队列的生产者代码中,一共出现了三个TTL,这三个TTL值得探讨一下,这或许对你实现一个高可用的消息队列有帮助。x-message-ttl 在创建队列时设置的消息TTL,表示消息在队列中最多能存活多久(ms);Expiration 发布消息时设置的消息TTL,消息自产生后的存活时间(ms);x-delay 由rabbitmq_delayed_...

Golang 实现 RabbitMQ 的延迟队列

2022-02-08
阅读 4 分钟
3.3k
读本文之前,你应该已经了解 RabbitMQ 的一些概念,如队列、交换机之类。延迟队列简介一个队列中的消息在延迟一段时间后才被消费者消费,这样的队列可以称之为延迟队列。延迟队列的应用场景十分广泛,如:下单后30分钟内未付款则取消订单;在某个时间下发一条通知等。通过死信实现延迟队列通过Golang 实现 RabbitMQ 的死...

Golang 实现 RabbitMQ 的死信队列

2022-01-30
阅读 6 分钟
5.4k
消息被拒绝,不重新放回队列(使用 basic.reject / basic.nack 方法拒绝消息,并且这两个方法的参数 requeue = false)

利用 go-kit 实现支持 http 和 grpc 的微服务

2022-01-24
阅读 15 分钟
6.3k
go-kit 是一套开源的 golang 微服务工具集合。go-kit 自上而下提供了三层模型,分别是 Transport 层、Endpoint 层、Service 层。

整明白 Golang slice 声明方式、浅复制现象、深复制、append操作

2021-11-30
阅读 10 分钟
3.5k
什么是切片切片(slice)是对数组一个连续片段的引用。切片是一个引用类型,它实际并不存储元素,它只是标识了数组上的某一个连续片段。数组在内存中是一连串的内存空间,每个元素占据一块内存。切片的数据结构是一个结构体,结构体内由三个参数。Pointer 指向数组中它要表示的片段的起始元素;len 长度cap 最大容量 {代...

整明白 Golang struct 实例化和赋值

2021-11-19
阅读 5 分钟
7.9k
Golang 中 struct 各种实例化和赋值方式,一会儿是值传递,一会儿又是指针,让人一头雾水,于是我决定梳理一下,整个明白。先定义一个结构体,下面结合代码进行讲解。 {代码...} 实例一p 以最常规的方式实例化一个 struct,变量 p 得到一个 Person 结构体。 {代码...} 实例二变量 p1 由 p 赋值而来,由于 Golang 语言是...
封面图

ORM:被忽略的 group by 后的 count 统计

2021-09-23
阅读 2 分钟
3.2k
对于,下面这个 sql 查询器,page() 方法会执行两条 sql ,一条是查数据集,一条是查符合条件的数据集总数,对应的返回 [list, total]。

Redis 实现限流

2021-08-29
阅读 2 分钟
6.3k
思路:假设 $period 秒内,一个用户只能访问 $maxCount 次。用户ID作为 key,毫秒时间戳作为 score 和 value。一个请求进入,

装饰器模式在Laravel中的应用

2021-08-28
阅读 4 分钟
3.1k
一个请求可以视为现有对象,在请求到达控制器之前,需要经过 Laravel 框架的各种中间件,每个中间件都对请求进行不同的“装饰”,当请求到达控制器执行完毕进行响应客户端,一个响应返回途中要经过刚刚来时的经过的中间件,每个中间件都可以对响应进行不同的“装饰”,最后响应到达客户端。这个流程是一个典型的“洋葱模型”。

利用GoAccess图形化分析Nginx访问日志

2021-08-27
阅读 2 分钟
1.9k
Q1: configure: error: * Missing development files for the GeoIP library

MySQL如何给大表加索引

2021-08-26
阅读 3 分钟
16.6k
给大表加索引、加字段属于DDL(数据定义语言)操作,任何对MySQL大表的DDL操作都值得警惕,不然很可能会引起锁表,报错Waiting for meta data lock,造成业务崩溃。那么如何对大表进行加索引操作?

《MySQL高级》锁和事务笔记

2021-08-25
阅读 3 分钟
2k
详解:会话s1给表A加读锁,s1、s2……都不可写表A,可读表A;会话s1给表A加写锁,s1可对表A增删改查,s2、s3等未拿到锁的会话,既不能查也不能写;会话s1不管是表A加读锁还是写锁,需要等表A的锁释放后才能操作其他没有加锁的表(可以给多个表加锁,同时操作多个表)。

《MySQL高级》索引分析和优化笔记(下)

2021-08-25
阅读 9 分钟
1.1k
由于本表中只有两个字段 age, birth,复合索引都覆盖了,所以 select * 就相当于 select age, birth, 查询直接走索引,不需要回表。此处仅关注排序(order by)是否会出现文件排序(filesort)。

《MySQL高级》索引分析和优化笔记(上)

2021-08-25
阅读 14 分钟
2.1k
全值匹配,查询用到了全部4个字段的索引(通过 key 字段判断使用了复合索引,type 类型为 ref,通过 ref 字段判断使用4个索引)

max_allowed_packet引起MySQL迁移丢失数据的问题

2021-06-18
阅读 2 分钟
2.4k
最近迁移了服务器,运维同学给导了数据库,数据库也跟着一起迁移到了新机房。今天,有用户发现自己创建的一条记录不见了,我去新库查询确实没有,去旧库查询到了这条记录,确定了是数据丢失。

Laravel Seeder 生成百万模拟数据

2021-03-24
阅读 2 分钟
2.5k
Laravel 集成了 Faker 库,并提供了 Seeder 可以帮助我们轻松地生成模拟数据。先书写数据仓库和数据填充代码数据仓库代码 {代码...} 数据填充代码 {代码...} 我们通过是 times() 设置了填充的次数,执行数据填充命令,可以将 1000 条数据填充至 topics 表中,这很方便。 {代码...} 如果我们想要插入 100w 条数据,是不是...

磁盘写满快速排查与解决

2021-03-18
阅读 2 分钟
2.6k
磁盘写满快速排查与解决问题引子PHP 报错如下,此问题基本可以确定是由于磁盘写满导致 session 不能写入造成。 {代码...} 解决写满问题下面记录一下,快速排查用到的几个命令。1.查看磁盘占用 {代码...} {代码...} 可以看到根分区已经被写满,接下来要定位大文件的位置进行清理。2.定位大文件位置 {代码...} -s 表示汇总...

在非Laravel项目中使用Validator验证器

2021-02-03
阅读 6 分钟
3k
安装 {代码...} 引入提示消息项目根目录创建 lang/zh_cn/validation.php 文件 {代码...} 来自:[链接]封装 handler封装 handler$translation_path 定位到刚刚创建的 lang 目录$translation_locale 为多语言目录名,即 zh_cn {代码...} 参考:[链接]使用直接使用 {代码...} 自定义消息提示和定义属性名称 {代码...} 打印...
封面图

PHP数组函数的时间复杂度清单

2021-01-27
阅读 1 分钟
2k
PHP 给开发者提供了强大的数组函数,帮助开发者提高了开发效率。正是 PHP 数组函数太易用、太方便,让开发者常常忽略数组函数的时间复杂度。这里有一份很实用的问答,高赞回答列举了关于数组函数的时间复杂度。List of Big-O for PHP functions希望看完上面的问答能帮助到大家!

利用VLC将m3u8地址转存为mp4视频

2020-10-18
阅读 1 分钟
5.1k
VLC media player 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。提取 m3u8 地址从浏览器控制台或者其他方式拿到 m3u8 地址。利用 VLC 播放/转存打开 VLC 软件,找到打开网络串流地址->网络,输入 m3u8 地址。点击“播放”按钮,可播放预览流地址内...

Nginx代理同域名前后端分离项目

2020-10-14
阅读 2 分钟
5.6k
前后端分离项目,前后端共用一个域名。通过域名后的 url 前缀来区别前后端项目。以 vue + php 项目为例。直接上 server 模块的 nginx 配置。 {代码...} 简单解释当域名后存在 /api/ 前缀时,将转给后端处理;当域名后存在 /uploads/ 前缀时,访问后端的静态资源。由于 location 精准匹配的原则,除以上之外的访问都会被...

UI Avatars 拿来即用的头像生成Api

2020-10-07
阅读 1 分钟
4k
UI Avatars 是一个根据名字首字母生成头像的网站,对外提供Api。没有限制或登录,没有使用情况跟踪,也不存储任何信息,访问速度也很快。拿来即用的特点,让我非常喜欢。

Eloquent ORM 自定义 builder——实现 find_in_set 查询

2020-08-20
阅读 2 分钟
2k
上篇文章其实已经介绍了自定义 builder,可是举得了 page 例子不够恰当,这次用自定义 builder 实现一下 MySQL 的 find_in_set() 查询。

Eloquent ORM 自定义 builder

2020-08-18
阅读 1 分钟
1.5k
Eloquent ORM 无疑是非常强大的,为开发者提供了许多好用的查询构造器。有时候,现有的查询构造器不能满足我们的要求时,我们也可以自定义。

gitignore 忽略目录下文件仅保留目录形态

2020-08-10
阅读 1 分钟
6.3k
但是,这样不能满足我们的要求,虽然忽略了 x1-xn 的目录及其下文件,保留了 thumb 目录,但 thumb 目录下的文件也被保留下来,我们要的是只保留 thumb 目录结构。

Git Webhook自动部署项目

2020-07-28
阅读 2 分钟
3k
搜了网上的 Webhook 代码,有的既用到了php,又用到了shell,感觉太复杂,自己才疏学浅看不懂,于是就想自己写一个简单的,能用就行。

Laravel框架中 getClientIps() 原理和用法

2020-07-20
阅读 2 分钟
3.1k
起因是用 $request->ip() 来获取 ip 限流,突然遭到大面积误杀。排查 access.log 日志,几乎所有请求的 $remote_addr ,都为某几个固定 ip。咨询运维后发现是他悄悄给前端加了 cdn。那为何会产生这种问题呢?

Laravel 打造适合Api的异常处理响应格式

2020-06-12
阅读 6 分钟
3.2k
ModelNotFoundException 一般在模型查找不到抛出,prepareException() 中它被转为 Symfony 包中NotFoundHttpException,默认状态码404;AuthorizationException 在 Policy 权限未通过时抛出,prepareException() 中它被转为 Symfony 包中 AccessDeniedHttpException,默认状态码403;TokenMismatchException 在 CSRF 验...