package main
import (
"encoding/json"
"net/http"
)
func main() {
http.HandleFunc("/", ExampleHandler)
if err := http.ListenAndServe(":8080", nil); err != nil {
panic(err)
}
}
func ExampleHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Content-Type", "application/json")
resp, _ := json.Marshal(map[string]string{
"ip": GetIP(r),
})
w.Write(resp)
}
func GetIP(r *http.Request) string {
forwarded := r.Header.Get("X-FORWARDED-FOR")
if forwarded != "" {
return forwarded
}
return r.RemoteAddr
}
最新文章
限流器是后台服务中的非常重要的组件,可以用来限制请求速率,保护服务,以免服务过载。 限流器的实现方法有很多种,例如滑动窗口法、Token Bucket、Leaky Bucket等。
其实golang标准库中就自带了限流算法的实现,即golang.org/x/time/rate。 该限流器是基于Token Bucket(令牌桶)实现的。
简单来说,令牌桶就是想象有一个固定大小的桶,系统会以恒定速率向桶中放Token,桶满则暂时不放。 而用户则从桶中取Token,如果有剩余Token就可以一直取。如果没有剩余Token,则需要等到系统中被放置了Token才行。
go中我们往往要对变量分配内存,那么分配内存有两中方式分别是new和make。查了一些资料,顺便看我开发中用的几个地方。其实,很好理解。
new分配中内存,不做初始化,也就是不能直接赋值,必须初始化后才能赋值。
make分配好内存且已经
在go中往redis的hash写数据的时候遇到了结构体数组写入时无法写入,看了看写入数据要求是map[string]interface,而我的是struct。因此,无法写入的。
那么就是转格式呗
type order struct{
Id int64 `json:"id"`
orderSn int64 `json:"order_sn"`
}
orders:=order{
Id:2022032034566
OrderSn:20220320122444
}
jsonData,_:=json.Marshal(orders)
var redisData map[string]interface{}
json.Unmarshal([]byte(jsonData),&redisData)
log.Info(redisData)
以上就是转化过程。
Maximum function nesting level of ‘256’ reached, aborting
先跑了所有接口,发现都是这个报错。梳理新增加的接口方法后,直接屏蔽新接口所有方法逻辑,就恢复正常。依次排除法,最终发现在model里面封装的方法调用了service层的方法导致超负荷加载函数嵌套。
当一个项目沉淀一段时间后,随着用户量的提升,用户群体庞大起来。这时候就会出现过多的用户访问导致服务器(单机)供应不足。那么,负载均衡就出现了。
谈起Redis锁,下面三个,算是出现最多的高频词汇:
- Setnx
- Redlock
- Redisson
Setnx
其实目前通常所说的Setnx命令,并非单指Redis的setnx key value这条命令。
首先,我们应该清楚的是,日志文件不仅可以帮助我们追踪入侵者的来源并找到其攻击路径,而且在正常的操作和维护中,日志还可以反映出许多安全攻击。
一个简单易用的Web日志分析工具可以大大提高效率。当前,行业中有许多日志分析工具。今天,我们推荐十种易于使用的Web日志安全性分析工具。
1、查看进程占用带宽情况-Nethogs
Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。
下载:http://sourceforge.net/projects/nethogs/files/nethogs/0.8/nethogs-0.8.0.tar.gz/download
yum -y install libpcap-devel ncurses-devel
tar zxvf nethogs-0.8.0.tar.gz
cd nethogs
make && make install
nethogs eth0
