程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
软件定制开发/软件按需定制 技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
TCC 库存 Cancel:空回滚、悬挂、幂等怎么用一张 tcc_fence_log 收口
编程
TCC 库存 Cancel:空回滚、悬挂、幂等怎么用一张 tcc_fence_log 收口
2026-10-22 00:05:24
TCC 里库存服务的 Cancel 写成无条件 UPDATE 会把库存凭空加出来:Try 可能没到或回滚了,TC 照样发 Cancel。这篇讲清空回滚、悬挂、幂等三个问题如何用一张 tcc_fence_log 收口:主键 (xid,branch_id) 做幂等、Try 插入 tried 撞主键就拒绝、Cancel 先 SELECT FOR UPDATE 再按状态分支、条件 UPDATE 影响行数为 0 怎么处理,以及 fence 写入必须与库存变更同本地事务、useTCCFence 默认 false 这类实际踩点。
库存回滚
TCC
分布式事务
Seata
幂等
空回滚
悬挂
PgBouncer 事务池下的 prepared statement:42P05、26000、08P01 与 1.21–1.24 的版本分界
编程
PgBouncer 事务池下的 prepared statement:42P05、26000、08P01 与 1.21–1.24 的版本分界
2026-10-22 00:05:01
事务池模式下 prepared statement 为什么会在三条 backend 之间串味:42P05 名字撞车、26000 语句不在这个后端、08P01 参数个数对不上,三种报错根因不同。补 PgBouncer 1.21/1.22/1.24 的版本分界、max_prepared_statements 默认 200 的 LRU 与内存代价、DEALLOCATE ALL 在 1.21 上的历史坑,以及 pgx、asyncpg、pgJDBC、postgres.js 各自关掉命名的方法。
事务池
PgBouncer
prepared-statement
PostgreSQL
连接池
max_prepared_statements
BOM 是 Windows 写进去、在 Linux 炸开的:PowerShell 5.1 默认编码、compose 的 \uFEFFTEST 与 MySQL 1064
案例
BOM 是 Windows 写进去、在 Linux 炸开的:PowerShell 5.1 默认编码、compose 的 \uFEFFTEST 与 MySQL 1064
2026-10-22 00:04:33
带 BOM 的 UTF-8 在 Windows 上一切正常,落到 Linux 的配置解析器、compose 或 MySQL 客户端时 BOM 就变成内容:PowerShell 5.1 的 Out-File/Set-Content 默认编码对照、实测五种写法的开头字节、compose env_file 里键名变成 \uFEFFTEST、compose.yml 报 service 'version'、MySQL 1064 与 Workbench 的原始报错,附字节确认与清洗命令。
BOM
PowerShell
docker-compose
MySQL
字符编码
运维
秒杀库存回滚别用 INCR:扣减流水、同槽 key 与乱序补偿
编程
秒杀库存回滚别用 INCR:扣减流水、同槽 key 与乱序补偿
2026-10-22 00:04:20
秒杀场景里取消订单后把库存还回 Redis,直接 INCRBY 会因重试重复加量且无法追溯。这篇只谈缓存层的回滚:用扣减流水 hash 做幂等、stock 与 history 必须同 hash tag 否则 EVAL 报 CROSSSLOT、回滚先落扣减后落的乱序怎么用顺序消息或对账兜底、「查不到流水就当成功」在 key 过期和淘汰时为何是错的,以及分段库存下回滚必须回到原 bucket 否则碎片化。
库存回滚
Redis
秒杀
Lua
Cluster
幂等
库存超卖
BOM 的消费端:shell 报 Exec format error、Go 报 illegal byte order mark、JSON 解析停在第 0 位
案例
BOM 的消费端:shell 报 Exec format error、Go 报 illegal byte order mark、JSON 解析停在第 0 位
2026-10-22 00:03:42
同一个 EF BB BF,在导出侧是 Excel 认 UTF-8 CSV 的必需品,在消费侧却让内核 execve 返回 ENOEXEC、Go 编译器报 illegal byte order mark、JSON.parse 在第 0 位失败。整理字节层确认方法、shell/Go/Python/Node/Jackson/PHP 的行为对照表,以及 sed 去 BOM、CI 检查与 .gitattributes 不管 BOM 的边界。
BOM
UTF-8
字节序标记
Shell
Go
JSON
字符编码
MaxScale 25.01 readwritesplit:causal_reads 七个模式,与 transaction_replay 重复写两次的边界
编程
MaxScale 25.01 readwritesplit:causal_reads 七个模式,与 transaction_replay 重复写两次的边界
2026-10-22 00:03:41
读写分离代理踩的两个隐性坑:causal_reads 用 MASTER_GTID_WAIT 保证读到自己的写(含 MXS-5527 里 INSERT...RETURNING 失效),transaction_replay 在 COMMIT 在途时可能重复提交,以及 MaxScale 25.01 把 reuse_prepared_statements 与 optimistic_trx 移出路由器带来��升级失效。
数据库代理
MaxScale
readwritesplit
读写分离
causal_reads
transaction_replay
MariaDB
支付宝要 7 个字符 success,微信要空响应体:支付异步通知的应答语义与重试时间表
编程
支付宝要 7 个字符 success,微信要空响应体:支付异步通知的应答语义与重试时间表
2026-10-22 00:03:29
同一套 JSON 响应封装发给支付宝和微信,三家全判失败:支付宝要响应体只有 success 七个字符,微信 APIv3 要 200/204 空报文,V2 要 XML return_code=SUCCESS。整理三家应答语义、25h/8 次与 24h4m 的重试节奏,以及 ACK 之前必须先落库的原因与 Go/PHP handler 骨架。
异步通知
支付回调
notify_url
接口对接
Go
PHP
幂等
Postgres 连接风暴:97 个可用槽位、三条 FATAL 与四个默认为 0 的超时
编程
Postgres 连接风暴:97 个可用槽位、三条 FATAL 与四个默认为 0 的超时
2026-10-21 21:31:38
Postgres 连接耗尽多数不是单点 bug,而是池大小算术、重启惊群和重试放大叠出来的。这篇把 97 个可用槽位、三条 FATAL 原文、四个默认为 0 的超时和 full jitter 重试串成一条可落地的排查与整改路径。
PostgreSQL
连接池
运维
PgBouncer
SQLAlchemy
用 DuckDB mysql 扩展直连线上 MySQL:ATTACH 写法、secret 管理与 pushdown 边界
编程
用 DuckDB mysql 扩展直连线上 MySQL:ATTACH 写法、secret 管理与 pushdown 边界
2026-10-21 21:31:04
DuckDB 的 mysql 扩展可以直接 ATTACH 线上 MySQL 做临时分析,不用先同步数据。这篇给出可复现的连接、secret、只读配置,并说明聚合不 pushdown、结果集不流式、单连接串行等实际边界,附过滤下压与落 Parquet 的写法。
DuckDB
MySQL
SQL
数据分析
Parquet
Bash 5.3 的 ${ cmd; }:在 PS0 里改当前 shell 变量,做 preexec 与命令计时
编程
Bash 5.3 的 ${ cmd; }:在 PS0 里改当前 shell 变量,做 preexec 与命令计时
2026-10-21 21:06:11
Bash 5.3 新增的 ${ cmd; } 让 PS0 能直接改当前 shell 的变量,于是命令计时与 preexec 不必再挂 DEBUG trap。本文给出用 BASH_MONOSECONDS 计时的配置、展开与执行顺序,以及为什么 DEBUG trap 不适合做耗时统计。
Shell
Bash
终端配置
关掉 index_merge_union 后 OR 查询返回空集:MySQL 9.7.4 修掉的优化器正确性 bug
编程
关掉 index_merge_union 后 OR 查询返回空集:MySQL 9.7.4 修掉的优化器正确性 bug
2026-10-21 21:06:11
MySQL 把 index_merge_union 关掉后,某些 OR 查询会漏掉一个 disjunct,本应四行却返回 Empty set。本文给出最小表结构、开关对照的 EXPLAIN 与结果比对方法,说明 EXPLAIN 不能证明结果正确,并给出升级、恢复开关、UNION ALL 重写三条修法。
MySQL
优化器
故障排查
终端打印 hot updated,页面上的值没变:Vite 8.3.4 在 bundled-dev 下重算 acceptExports 边界
编程
终端打印 hot updated,页面上的值没变:Vite 8.3.4 在 bundled-dev 下重算 acceptExports 边界
2026-10-21 21:05:23
Vite 8.3.4 在 bundled-dev 模式下补齐 acceptExports 的边界计算:8.3.3 会在控制台打印 hot updated,页面上的旧值却不动。本文用 child/parent 两个模块对照两个版本的日志与 DOM,说明边界往上不通知引用方这条本来存在的语义。
Vite
前端调试
HMR
PHP 8.6 的 pack/unpack 端序修饰符:一个 l< 读取小端 int32,但要小心键名
编程
PHP 8.6 的 pack/unpack 端序修饰符:一个 l< 读取小端 int32,但要小心键名
2026-10-21 21:05:23
PHP 8.6 给 pack/unpack 加上 Perl 风格的 < 与 > 端序修饰符,整数与浮点都能用,读有符号小端 int32 不必再位移修正。本文给出改写前后的对照、unpack('s<value') 键名变化这个坑,以及一次解析支付报文头的格式字符串与自查命令。
PHP
二进制协议
接口对接
Go 1.27.3 / 1.26.10:crypto/x509 拉黑中间证书后的升级与排查
编程
Go 1.27.3 / 1.26.10:crypto/x509 拉黑中间证书后的升级与排查
2026-10-21 21:04:37
Go 1.27.3 与 1.26.10 在 crypto/x509 里加入中间证书 denylist,Verify 会过滤整条链,对应 CVE-2026-111943。本文说明受影响区间、为什么只升系统 CA 包不够、Go 1.27 起 SystemCertPool 尊重 SSL_CERT_FILE 的变化,并给出验证代码与 toolchain 固定写法。
Go
安全升级
TLS
stripe-node 23.0.0 升级笔记:API 版本被静默抬升、payment_method_types 移除、webhook 容差反转
编程
stripe-node 23.0.0 升级笔记:API 版本被静默抬升、payment_method_types 移除、webhook 容差反转
2026-10-21 21:04:37
stripe-node 23.0.0 把 pinned API 版本抬到 2026-09-30.endive,不写 apiVersion 就跟着换版本;payment_method_types 被移除,纯 JS 会在运行期拿 400;webhook 容差语义反转,constructEvent 传 0 变成跳过校验。含本地抓请求头验证、grep 自查与分步升级顺序。
支付
Stripe
接口对接
webhook
Vite @fs 越界读文件:safeModulePaths 在 fs.allow 之前被信任
资讯
Vite @fs 越界读文件:safeModulePaths 在 fs.allow 之前被信任
2026-10-21 21:03:32
Vite 开发服务器 GHSA-rq7h-c2jc-7f22:项目内 import 路径与宿主机绝对路径重合时,server.fs.allow 之外的文件会经 /@fs 返回。本文拆解 safeModulePaths 先于 fs.allow 被信任的成因,给出 PoC、受影响版本区间、修补版本与三层规避。
Vite
前端安全
漏洞排查
给 readonly 属性加了默认值,构造函数里再赋值就抛 Cannot modify readonly property
编程
给 readonly 属性加了默认值,构造函数里再赋值就抛 Cannot modify readonly property
2026-10-21 21:03:32
PHP 8.6 允许 readonly 属性声明默认值,而默认值就是那次唯一初始化,构造函数里再赋值会抛 Cannot modify readonly property。本文给出报错现场、与 8.4 接口属性的关系、unset 报错,以及迁移时默认值该写属性还是构造参数的判断。
PHP
8.6
类型系统
nginx 1.30.6 / 1.31.7 修复五个配置相关漏洞:先用 nginx -T 自查,再决定升级顺序
资讯
nginx 1.30.6 / 1.31.7 修复五个配置相关漏洞:先用 nginx -T 自查,再决定升级顺序
2026-10-21 21:02:17
nginx 1.30.6 与 1.31.7 修的五个漏洞全部依赖特定配置:alias 加 rewrite、map 正则捕获、AIO 加 SSI、HTTP/3 请求体、TLS 会话票据。给出 nginx -T 的逐项 grep 自查命令、每个 CVE 的暴露条件与临时缓解,以及只有 1.30/1.31 分支拿到修复这一限制。
nginx
漏洞排查
运维
CVE
MySQL 9.7.4 版本号变四段,运维脚本里那条三段正则会静默截断
编程
MySQL 9.7.4 版本号变四段,运维脚本里那条三段正则会静默截断
2026-10-21 21:02:17
MySQL 9.7.4 引入 MAJOR.MINOR.PATCH.UPDATE 四段版本号,VERSION() 等既有接口仍是三段。本文讲清四个能取到完整版本的入口,指出 awk 取第三列与三段正则会静默截断导致版本误判,并给出可选第四段的正则与按段比较的 SQL 写法。
MySQL
运维脚本
版本管理
正则
MySQL 开了并行复制仍延迟:40 万行单事务让 4 个 worker 只剩 1 个在忙
编程
MySQL 开了并行复制仍延迟:40 万行单事务让 4 个 worker 只剩 1 个在忙
2026-10-21 20:04:48
副本开着 replica_parallel_workers=4 仍在延迟,通常不是参数没调对:MySQL 把一个事务整块交给一个 worker,40 万行的单事务让其余三个 worker 全程空转;表没有唯一键时源端退回提交顺序,并行度直接归零。文章给出 perf_schema per-worker 表的读法(APPLYING_TRANSACTION 与 LAST_APPLIED_TRANSACTION 的区别)、Seconds_Behind_Source 读到 0 的陷阱,以及 8.4.11 上的实测数据与 8.0 的 COMMIT_ORDER 默认值。
MySQL
复制
运维
性能排查
Go 1.27 的 Transport 自动排空未读响应体:getStatus 从 710ms 降到 150ms
代码
Go 1.27 的 Transport 自动排空未读响应体:getStatus 从 710ms 降到 150ms
2026-10-21 20:02:32
Go 1.27 让 net/http.Transport 在 Close 时异步排空未读的 HTTP/1 响应体(最多 50ms 或 256KB),只取状态码的 getStatus 从 710ms 降到 150ms。文章讲清未读 body 为何阻断连接复用、json.Decoder 少读一个换行的影响、手工排空从无界 io.Copy 到有界异步的演进,并附 Go 1.27.2 与 1.26.9 的 20 请求连接数实测矩阵、背靠背请求竞态与主动断连的三种写法。
Go
net
http
性能优化
HTTP
四家支付回调收敛到一个入口:/pay/notify/{channel} 的实现笔记
代码
四家支付回调收敛到一个入口:/pay/notify/{channel} 的实现笔记
2026-10-21 09:02:28
微信 v3、支付宝、Stripe、PayPal 的回调应答语义和验签材料完全不同,四份 handler 复制来复制去就会串:支付宝返回 JSON 就被判失败并重试 8 次,原始 body 被 JSON 中间件吃掉就验签不过。文章给出统一入口的分层、四家验签与应答对照表、channel+event_id 幂等表、Go 接口与关键代码,以及回调乱序与查单兜底。
支付接口
回调
Go
Stripe
微信支付
PayPal webhook 验签失败与收不到回调:从四段待签串查到 443 投递
代码
PayPal webhook 验签失败与收不到回调:从四段待签串查到 443 投递
2026-10-21 09:01:17
PayPal 回调已经到账却验签不过,或者干脆收不到,通常是两件事:待签串 transmissionId|timeStamp|webhookId|crc32 里 webhook_id 取错、CRC32 写成十六进制、用了重新序列化的 body;以及 443 入站被拦。文章给出 Go 自校验实现、证书白名单与缓存、25 次/3 天重试下的幂等做法,以及 Order/Capture 双生命周期该在哪个状态发货。
PayPal
webhook
验签
支付接口
Go
Python 3.14 弃用了 asyncio policy:3.16 移除,应用代码改用 asyncio.run + loop_factory 就够
编程
Python 3.14 弃用了 asyncio policy:3.16 移除,应用代码改用 asyncio.run + loop_factory 就够
2026-10-21 00:05:42
Python 3.14 起 asyncio policy 整套进入弃用期、3.16 移除。列出 7 个被弃用名字与 3 处行为变更,给出 asyncio.run/Runner + loop_factory 的迁移对照和检查清单。
DeprecationWarning
Python
asyncio
Python开发
向后兼容
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
…
334
下一页
共 334 页
到第
页
确定