mutex是互斥锁,是一种悲观锁。
因为当一个goroutine想要访问被sync.Mutex
保护的资源时,如果锁已经被其他goroutine持有,则该goroutine会被阻塞,直到锁被释放。
这种机制确保了在任何时刻,只有一个goroutine可以访问受保护的资源,这与悲观锁的锁定资源和等待释放的策略一致。
三次握手四次挥手,sync.pool处理小变量减小gc压力
pgrep -u username php | xargs kill这个命令会查找所有属于username
用户且名称中包含php
的进程,并将它们的PID传递给kill
命令。
退火机制,for错误等待时间<最大等待时间,执行操作,若错误不为空则睡眠一个间隔时间,并给错误等待时间累加间隔时间,给睡眠间隔时间加上睡眠间隔时间,设置最大睡眠间隔时间,继续循环操作。
CAS是"Compare-And-Swap"的缩写,即比较并交换。这是一种常用的原子操作,用于实现乐观锁。
接口前端参数传的越复杂,后端接口实现的功能越可扩展。参数越少,说明只针对这个参数。各有优劣。
更新频率:blog最频繁,dosify有时间再整理...
1 可以做什么 2 有什么优缺点 3 适用于什么场景
mysql的索引只能用于定长的类型,比如blob和text等动态长度,也就是无法指定长度的,无法使用
接口高并发扛不住以后怎么办,第一反应:分三组,A组尽快解决线上问题,比如降级,横向扩容,调整配置策略等;B组调查瓶颈,后续修复bug或者缓存中间件调正;C组善后,解决问题中出现的错误或丢失数据问题,协助善后工作;优先级是ACB,因为修复问题是最慢的
最左原则建立联合索引,根据区分度和使用频率选前后顺序
oracle 对clob进行字符处理比varchar慢很多
文章来源自个人codeup知识库,更新可能不及时。
延迟双删:保证数据一致性,更新数据时进来先删除一次redis缓存,执行更新数据库以后,延时后再删除一次,再次删除需要评估第二个线程过来查询再放入缓存需要的耗时
强一致性就导致性能损耗
先操作数据再操作缓存可以保证最终一致性,极端情况下删除失败进行删除重试操作,异步发送消息到消息队列mq种
git --dry-run 查看即将进行的操作但不更改
go string底层是常量,转换成别的类型比如[]byte会发生内存拷贝
CSP模型作为Go语言并发模型的核心之一,通过channel机制实现了进程之间的通信和协同工作。 它简化了并发编程的复杂性,提高了程序的可靠性和可维护性。
linux脚本赋值=两边不能存在空格!!!!!!!!
git ignore虽然可以忽略文件更改,但是要求文件没上传到仓库中,比如.idea .vscode这种配置 没必要上传,但比如config/config.yml这种配置文件,已经被git追踪,即使在gitignore中 添加了,仍然还是无效唉哦
swaggo-每次添加或修改注解后,都需要使用swag init命令重新生成文档,使其生效???太麻烦哩
换服务器了~从centos7.9->anolis7.9->euler2.0->debian11