![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
文章平均质量分 61
沐已成风
19届毕业,之前从事java开发,目前在用golang语言谋生。
展开
-
redis-Modules(TairHash)
TairHash是基于redis module开发的一种hash数据结构,和redis原生的hash数据结构相比,TairHash不但和原生hash一样具有丰富的数据接口和高性能,还可以为field设置过期时间和版本,这极大的提高了hash数据结构的灵活性,在很多场景下可以大大的简化业务开发。TairHash提供active expire机制,即使field在过期后没有被访问也可以被主动删除,释放内存。剩下的有中文的介绍,有兴趣可以研究下哈。原创 2022-09-05 21:33:43 · 905 阅读 · 1 评论 -
线上问题排查-golang使用json进行对象copy
第一步操作完成,经验证机器可以正常运行,借助gops导出cpu运行图和内存消耗情况执行上述两个命令后,其会生成文件在tmp目录下内存的火焰图如下cpu的火焰图如下通过对火焰图的分析,可以明显的看到json.Marshal 和 json.Unmarshal 有明显的占用问题。跟着火焰图去找寻调用此处的该方法,定位到此处就不列出runtime.Context对象的具体情况了,你可以理解为里面多处指针,多处切片。反正就是结构体很大 【PS:改天针对大结构体出个压测结果】发现问题后更换如下代码进原创 2022-06-19 16:21:53 · 382 阅读 · 0 评论 -
Go 各种数据库连接字符串汇总
各种数据库的连接字符串的连接格式(一般叫做database source name, 简称DSN)是不同的,本文汇总了各个数据库驱动程序的字符串连接方式。一、关系型数据库1.1 Mysql[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶mN=valueN]// user@unix(/path/to/socket)/dbname// root:pw@unix(/tmp/mysql.sock)/my.原创 2022-02-25 18:06:08 · 1248 阅读 · 2 评论 -
Redis学习(11)--限流相关
断尾求生–简单限流背景:定义一个简单接口,表示系统要限定用户的某个行为在指定的时间里只能允许发生N次。# 指定用户 user_id 的某个行为 action_key 在特定的时间内 period 只允许发生最多的次数 max_countdef is_action_allowed(user_id,action_key,period,max_count): return true# 调用这个接口,一分钟内只允许最多回复5个帖子can_reply = is_action_allowed("laoq原创 2021-09-03 09:31:28 · 106 阅读 · 0 评论 -
Redis学习(9)--HyperLogLog
四两拔千斤-HyperLogLog >=2.8.9背景: 统计某一个爆款页面的UV(访问人次),可能会有几千万个,如果使用set则需要一个很大的Set集合进行统计,会非常浪费空间。Redis提供了HyperLogLog数据结构来解决这种统计问题.HyperLogLog提供不精确的去重计数方案,虽然不精确,但也不是非常离谱,标准误差是0.81%.使用方法> pfadd codehole user1 # 与set集合的sadd用法一样,来一个用户ID,就将用户ID塞进去(integer)原创 2021-08-18 12:48:08 · 169 阅读 · 0 评论 -
golang-lint让代码更规范点
golangci-lint什么是lint?answer: 静态代码分析。通俗地讲,扫描源代码,在不运行代码的情况下,找出一些不规范的书写方式以修正.fmt.Sprintf("%d", "123") // 错误fmt.Sprintf("%s", "123") // 正确for i, _ := range []int{1,2,3}{} // 错误for i := range []int{1,2,3}{} // 正确a := make([]int, 0, 0) // 错误a :原创 2021-07-28 11:00:12 · 1626 阅读 · 0 评论 -
golang--遇见的坑总结
关于Channel遇见的坑使用select监听通道时,通道会被阻塞直到当前case执行完毕。func TestChannel(t *testing.T) { strChan:=make(chan string,10) go func() { for { strChan <- time.Now().String() time.Sleep(600*time.Millisecond) } }() ticker := time.NewTicker(250 * time原创 2021-07-26 14:19:01 · 131 阅读 · 0 评论