SQL 转义问题

SQL 转义问题是指执行的 SQL 语句中包含了某些特定的字符,如单引号 '、反斜杠 \ 等,导致 SQL 语句不能正常执行。所以,我们应该在拼接 SQL 语句的过程中对特别的传入参数进行转义。

环境信息:

  1. MySQL 8.0.28;
  2. Go 1.16.9 windows/amd64

当发送给数据库的语句过大时,会报如下错误:

panic: Error 1105: Parameter of prepared statement which is set through mysql_send_long_data() is longer than 'max_allowed_packet' bytes

从报错中可知,需要修改 max_allowed_packet 选项的值。

Redis 的 list 和 stream:异步记录请求信息

在 Web 开发中,常常需要对请求信息进行记录,形成日志以便于后期评估应用的性能。请求信息通常包含客户端地址、请求的 URL、请求时间及请求执行时间。在程序中,可以以同步或异步的方式完成这一需求。同步方式是指请求信息写入日志文件后才返回数据给客户端,异步方式则是在返回数据之前以新线程或进程完成对请求信息的记录。开源的日志包有:

  1. Zap:出自 Uber 团队,以高性能著称;
  2. Zerolog:以易用性著称,支持 7 种日志级别;
  3. Logrus:兼容标准日志包格式,也是本人常用的日志包;
  4. apex/log:受 Logrus 启发,简化操作后的 Logrus;
  5. Log15:日志可读性强;

5 个日志包的详细介绍可以看《5 种结构化 Go 日志包对比分析》这篇文章。

MySQL 存储过程

存储过程是存储在数据库中并且已经提前编译好的 SQL 语句集合,它是应用中数据操作的部分逻辑实现。MySQL 5 版本引入了这一设计,存储过程包含 3 个部分:

  1. 名称;
  2. 参数列表;
  3. SQL 语句;

Redis 集群是基于“主从复制”特性之上的分布式 Redis 版本,可提供高并发、高性能、高可用的数据库服务。Redis 集群突破了单台服务器的内存局限,集群中的每一个节点都可以存储数据,同时维护着 “key-node” 的映射表。本文记录了 3 主 3 从的 Redis 集群的配置过程,主要内容包括:

  1. Redis 集群的配置过程;
  2. 集群相关命令;
  3. Go 存取集群数据;

Redis 主从复制可以实现数据库的读写分离,即主节点负责接收写请求、从节点负责接收读请求,是高性能 Redis 服务的基础。所以配置 Redis 主从复制应当作为开发者的技能之一,后文内容包括:

  1. 单机配置一主二从的主从复制服务
  2. 服务验证;