gin通过go build -tags实现json包的切换
gin的json库分析
在github.com/gin-gonic/gin/internal/json
包下,存在两个文件
一个是json.go
,一个是jsoniter.go
json.go
// Copyright 2017 Bo-Yi Wu. All rights reserved.
// Use of
… 在github.com/gin-gonic/gin/internal/json
包下,存在两个文件
一个是json.go
,一个是jsoniter.go
json.go
// Copyright 2017 Bo-Yi Wu. All rights reserved.
// Use of
… 服务器A与服务器B在同一个NAT网络环境下,出口IP相同
服务器A -访问服务器C接口
服务器B -访问服务器C接口
此时AB其中一台服务器无法得到响应。
通过查阅资料,是因为被调用服务端配置了tcp_tw_recycle,而调用方配置了tcp_timestamp造成了丢包的问题。
需要客户端关闭tcp_timestamp或者服务端关闭tcp_tw_recycle
## /etc/sysctrl.conf
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_timestamps = 0
… 在beego中使用ORM做一些查询操作,一般会用到下面这样的代码
o := orm.NewOrm()
user := new(User)
qs = o.QueryTable(user) // 返回 QuerySeter
var users []User
qs.All(&user)
如果想增加一些条件限制就需要用到qs.Filter
或者…
为了从本地浏览器能够直接访问公司内网的web,我们需要额外的vpn代理或者其他方式代理。经过查阅资料,找到一种比较快速的方案,即通过ssh隧道和socks5代理实现访问公司内网项目,前提是跳板机能通过外网访问,并且支持ssh方式登录。
ssh -D 1337 -f -C -q -N user@remote -p 2222
-D
表示本地端口转发,当监听到此端口有连接时,此连接中的数据将通过安全隧道转发到server端,目前支持socks4和socks5协议-f
请求ssh在工作在后台模式。该选项隐含了"-n"选项,所以标准输入将变为/dev/null。-C
请求会话间的数据压缩传递。对于网络缓慢的主机,压缩对连接有所提升。但对网络流畅的主机来说,压缩只会更糟糕。-q
静默模式。大多数警告信息将不输出。在el-table
中加入:row-class-name="tableRowClassName"
,利用tableRowClassName
方法将rowIndex赋值给row对象
<el-table
ref="multipleTable"
:data="data"
:row-class-name="tableRowClassName"
@selection-change="handleSelectionChange"
>
handleSelectionChange(rows) {
//用一个变量来存放被选中的index
this.selectionItemIndexes =
… 前段时间在一台小内存服务器上使用composer更新第三方类库时出现了内存不足的问题,以至于触发了OOM异常,使得composer进程被kill,无法完成更新。
通过free -h
查看,测试服务器上并没有启用swap交换分区
当内存不足时,系统会将部分数据交换到swap空间上。类似win上的虚拟内存
OK,那就让我们启用swap。
mkdir /data
touch /data/swapfile
dd if=/dev/zero of=/data/swapfile bs=1M count=2048
…/dev/zero是linux设备上一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL,
在表关联查询时,如两个表的关联字段类型、编码不同,是无法利用索引的。
前段时间,公司某业务在高并发下,单机单个redis实例中,有个大字符串的get操作总是很慢。查看slowlog并无慢日志记录。
通过咨询掌阅@老钱,得到了以下答复
redis的网络读写和逻辑处理都是单个线程处理的,slowlog只是衡量逻辑处理的时间并不包括接受指令和发送响应的时间。字符串的get操作逻辑非常快,所以slowlog没有任何信息。但是网络读写就慢了,特别是高并发下,内存中有大量待发送的缓冲数据堆积在那里,单线程需要拼命地发送数据,所以才会这样缓慢。
当时考虑了两种解决方案:
考虑到项目初期的架构及业务代码的改动量,决定选择第二种方式解决,那么由于项目架构采用的是传统的nginx+php-fpm,无法常驻内存,于是决定利用/dev/shm(tmpfs)将这个value缓存到本地内存文件系统中。
既然用到了本地缓存,就要考虑集群下机器的value一致性,所以最终使用redis在每台机器上部署了一个订阅服务,当value发生改变时,更新本地缓存。
从zabbix中可以很明显看到网络传输的峰值下降了非常多,可见这个key在业务高峰期时读取有多频繁。
对于大字符串,偶尔读写不会存在问题,但是在频繁读写就会给redis带来不小的压力。…
首先准备一套可以外网访问的服务器,并且安装nginx ,以centos为例
yum install nginx
service nginx start
编辑nginx的配置文件
vim /etc/nginx/conf.d/default.conf
server {
listen 8000;
server_name test.im050.com;
location /
… 布隆过滤器是一种空间利用率高,可以用来对数据进行排重过滤处理的数据结构,具有以下两点特征:
存在的数据如果实际上并不存在,称为false positive,那么为什么会有这种现象呢?
布隆过滤器是通过k个hash函数将某个key映射到m个的比特位上。那么某个key的比特位有可能会被其他的一个或多个key占用,即会产生误判为存在的情况,所以这个误判率取决于k(hash函数个数)、m(比特位个数)、n(元素个数),关于误差率推导,由于我的数学比较不好,还没领悟透彻,可以参考网络上其他文章。
因为比特位非0既1,且多个key共享比特位,也导致了布隆过滤器无法删除已添加的元素,因为删除某个key会影响到其他key。
当然还有一些其他变种的布隆过滤器使得可以删除元素,例如将比特位变成一个计数器,删除元素时只需要将计数器-1即可。…
最新评论