自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(3)
  • 收藏
  • 关注

原创 golang mutex源码理解

尝试用自己的理解来解读sync.Mutex源码,mutex锁的 state值第一位0表示未上锁 1表示已上锁第二位表示唤醒标识位,如果为1表示有goroutine在唤醒状态,释放锁的goroutine如果看到这个位为1则不用特意去唤醒其他goroutine第三位表示是否进入饥饿模式func (m *Mutex) Lock() { // Fast path: grab unlocked mutex. //快速加锁,只有在m.state的值为0时,才能成功,这意味着没有任何其他goroutine跟自

2022-02-17 22:23:22 243

原创 分布式锁处理缓存一致性问题

分布式锁处理缓存一致性问题使用redis做为mysql的缓存,缓存失效时或者后台修改mysql内容时如果并发量大,可能会造成数据库的值与redis缓存值不一致的情况。一般解决方案是采用延迟双删除来处理,本文给出分布式锁的处理方案,压力测试结果,在10万并发的高频读高频写情况下,最终数据库与缓存也能保持数据一致当一个请求来读取数据时,如果有缓存则直接取走返回,如果没有缓存,则去查mysql,得到结果后尝试获取一次这个数据的锁,一次不成功直接就不管了拿mysql里的数据返回,因为这个时候可能有其他客户端在处

2022-02-11 21:38:22 1121

原创 golang 分布式锁

golang 分布式锁参考java redisson包写的golang版分布式锁,使用redigo。实现了重入功能,锁等待采用redis发布/订阅功能,redisson续期功能暂未实现,经过一定的本地测试,有一定的可用性package mainimport ( "context" "crypto/rand" "errors" "fmt" _ "net/http/pprof" "sync" "time")import redigo "github.com/gomodule/redi

2022-02-11 17:32:25 1392

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除