自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于golang实现redis分布式锁

基于golang实现redis分布式锁一、使用场景通常在分布式系统中,我们经常会从数据库中读取数据和修改数据,然而这不是一个原子操作,在并发时就会导致数据的不正确,例如一会下面的电商秒杀,库存数量的更新就会遇到。二、实现锁的条件1.互斥性:在任何时候,都有一个客户端持有锁2.不能出现死锁:即在一个客户端持有锁的期间内,如果客户端出现故障也不能影响后续的客户端可以持有锁3.保证上锁和解锁的是同一个客户端三、具体实现setnx+expire (加锁)setnx k1 value1 expi

2021-10-26 15:44:42 1329

原创 基于go-micro+etcd+gin微服务之服务注册与发现

基于go-micro+etcd+gin微服务之服务注册与发现etcd主要API1.Put(key,value)/Delete(key)$ ./bin/etcdctl put foo "Hello World!"OK$ ./bin/etcdctl del key12.Get(key)/Get(keyFrom,keyEnd)//第一种是指定单个 key 的查询,第二种是指定的一个 key 的范围;./bin/etcdctl put web1 value1$ ./bin/etcdctl p

2021-09-05 10:19:08 454

原创 groupcache源码分析(singleflight防缓存击穿)

groupcache源码分析(singleflight)主要的功能是抑制同一个函数调用重复执行,也就是说,如果对于某个key的请求已经存在并且正在进行,则对该key的新的请求会堵塞在这里,等原来的请求结束后,将请求得到的结果同时返回给堵塞中的请求。可以达到防止缓存击穿的效果。//在执行的或者已经完成的do过程,实际请求函数的封装type call struct { wg sync.WaitGroup val interface{} err error}//主要是用来阻止对已经存在的某ke

2021-06-18 17:33:40 159

原创 一致性Hash(Consistent Hashing)

一致性Hash(Consistent Hashing)一、产生背景在业务开发中,我们常把数据持久化到数据库中。如果需要读取这些数据,除了直接从数据库中读取外,为了减轻数据库的访问压力以及提高访问速度,我们更多地引入缓存来对数据进行存取。读取数据的过程一般为:先访问缓存,如果缓存存在就从缓存中读取数据,如果缓存不存在就从数据库中读取数据,然后将数据写入缓存例如有n个服务器,m为机器编号,o为对象名称,我们要将一个对象均匀映射到n个服务器上,采用下面这个式子来定位对象缓存服务器:m = hash(o)

2021-06-17 21:47:41 239

原创 groupcache源码解析(IRU)

一、什么是LRULRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。二、代码解析iru/iru.gotype Cache struct { //缓存中最多存储的条数,当MaxEntries为0时没有限制 MaxEntries int //销毁前回调 OnEvicted func(key Key, value interface{}) //链表 ll *list.List //key为任意类型,值为

2021-06-14 17:58:20 364

原创 RabbitMQ(Golang版本)

一、RabbitMQ 简介消息队列是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是/用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。二、使用场景1.解耦场景说明:用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口。传统模式的缺点:如

2021-06-11 16:45:34 2279 5

空空如也

空空如也

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

TA关注的人

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