当前位置: 首页 > news >正文

网站建设试题 jsp武汉seo关键词排名

网站建设试题 jsp,武汉seo关键词排名,网站超市源码哪个好,WordPress如何做多语言版本1 分布式锁概述 谈到分布式锁,必然是因为单机锁无法满足要求,在现阶段微服务多实例部署的情况下,单机语言级别的锁,无法满足并发互斥资源的安全访问。常见的单机锁如Java的jvm锁Lock、synchronized,golang的Mutex等 对…

1 分布式锁概述

谈到分布式锁,必然是因为单机锁无法满足要求,在现阶段微服务多实例部署的情况下,单机语言级别的锁,无法满足并发互斥资源的安全访问。常见的单机锁如Java的jvm锁Locksynchronized,golang的Mutex
对于分布式锁有很多种实现方式,常见的有以下几种:

  • 基于数据库:通过数据库事务锁例如for update操作
  • 基于缓存中间件:redis分布式锁、etcd分布式锁等
  • 基于ZK临时节点:zookeeper 临时节点实现分布式锁

每种方式实现的分布式锁各有优缺点简单介绍一下:

  • 数据库实现不用额外引入新的中间件,减少系统的依赖性和不稳定性,但性能不会太高,且并发量大时,对数据库压力比较大。
  • ZK实现分布式,因为zk满足了CP,能够保证其数据一致性,不会出现加锁成功后又丢失的问题,但相反性能会降低,并且可用性降低 CAP A不是满足的,详细可以自行了解zk细节
  • redis 实现:最大的优点性能高,能保证AP,保证其高可用。但无法保证一致性,因为redis满足的是AP,可能存在某一个时间节点集群数据S-M同步不一致。

2 分布式锁要点

实现分布式锁需要满足一下几点:

  • 锁载体:redis 受用 K-V 键值作为锁载体,ZK使用临时节点作为载体
  • 锁租期:进程持有分布式锁后不能一直占用,如果因为宕机情况造成锁释放失败,就会一直占用,reds 可以设置过期时间,zk临时节点也会自动删除。
  • 其他要求:比如减少惊群效应、可重入机制、公平锁机制,不同的实现方式有的不能完全满足。

分布式锁选择:

  • qps不大的情况下,那种方式都可以
  • 结合目前技术体系,在不引入新的技术中间件情况下解决问题
  • qps并发极高,但容忍极少的数据丢失或者不一致,建议使用redis实现分布式锁
  • 如果业务要求任何情况下都不允许数据丢失,可以使用zk或者etcd实现

3 Etcd 实现机制

  • 锁载体: 使用 k-v 结构实现
  • 锁租期: Etcd 通过lease可以对 kv 设置租约,当租约到期,kv 将失效删除;避免长时间占用锁不释放放。
  • 自动续期: Etcd 可以对租约进行自动续期,通过KeepAlive实现
  • 公平锁: 多个程序同时抢锁时,会根据 Revision 值大小依次获得锁,可以有效避免 “惊群效应”,公平获取。
  • Watch 机制: 监听机制,Watch 机制支持 Watch 某个固定的 key或者目录, key 或目录发生变化,客户端可以收到通知。

4 代码实现

操作步骤:

  1. 初始化客户端
  2. 创建一个session并设置默认租期30s
  3. 获取指定前缀的锁对象
  4. 加锁
  5. 执行业务
  6. 释放锁

代码:

package mainimport ("context"clientv3 "go.etcd.io/etcd/client/v3""go.etcd.io/etcd/client/v3/concurrency""log""time"
)func main() {// 初始化客户端log.Println("客户端初始化")client, err := clientv3.New(clientv3.Config{Endpoints: []string{"localhost:2379"}, DialTimeout: time.Second * 3})if err != nil {log.Fatalf("客户端初始化失败:%v\n", err)}// 创建一个session并设置默认租期30s,即锁默认超过30s会自动释放(内部会自动续期Etcd KeepAlive)log.Println("Session初始化")session, err := concurrency.NewSession(client, concurrency.WithTTL(30))if err != nil {log.Fatalf("Session初始化失败:%v\n", err)return}defer func(session *concurrency.Session) {err := session.Close()if err != nil {log.Fatalf("Session关闭失败:%v\n", err)}}(session)// 获取指定前缀的锁对象mutex := concurrency.NewMutex(session, "my-lock")// 加锁默认等待3slog.Println("TryLock加锁失败不会等待")ctx, cancel := context.WithTimeout(context.Background(), time.Second*3)defer cancel()err = mutex.TryLock(ctx)if err != nil {log.Fatalf("加锁失败立即返回:%v\n", err)return}//log.Println("加锁最多等待3s")//ctx, cancel := context.WithTimeout(context.Background(), time.Second*3)//defer cancel()//err = mutex.Lock(ctx)//if err != nil {//	log.Fatalf("加锁失败:%v\n", err)//	return//}// Exe bizlog.Println("加锁成功开始执行业务")for i := 1; i <= 10; i++ {time.Sleep(time.Second)log.Printf("执行 %%%d ...", i*10)}// 释放锁err = mutex.Unlock(context.TODO())if err != nil {log.Fatalf("释放锁失败:%v\n", err)return}log.Println("释放锁完成")
}

测试结果
在这里插入图片描述

在这里插入图片描述


文章转载自:
http://drunkometer.mnqg.cn
http://haida.mnqg.cn
http://subarachnoid.mnqg.cn
http://vaunt.mnqg.cn
http://elision.mnqg.cn
http://adequacy.mnqg.cn
http://hatchety.mnqg.cn
http://weichsel.mnqg.cn
http://pumpable.mnqg.cn
http://airmanship.mnqg.cn
http://spiritualize.mnqg.cn
http://cuttloefish.mnqg.cn
http://aftershaft.mnqg.cn
http://disassembly.mnqg.cn
http://phraseology.mnqg.cn
http://calcedony.mnqg.cn
http://affusion.mnqg.cn
http://untangle.mnqg.cn
http://amalgamation.mnqg.cn
http://biloculate.mnqg.cn
http://dehorn.mnqg.cn
http://pseudopod.mnqg.cn
http://aptotic.mnqg.cn
http://esquamate.mnqg.cn
http://phospholipase.mnqg.cn
http://gumwater.mnqg.cn
http://isosporous.mnqg.cn
http://bookcase.mnqg.cn
http://alteration.mnqg.cn
http://paramagnetism.mnqg.cn
http://anaesthesia.mnqg.cn
http://disenthrall.mnqg.cn
http://depositional.mnqg.cn
http://trenchplough.mnqg.cn
http://offprint.mnqg.cn
http://caudillismo.mnqg.cn
http://hypophalangism.mnqg.cn
http://frisky.mnqg.cn
http://milimeter.mnqg.cn
http://unladen.mnqg.cn
http://plantation.mnqg.cn
http://bone.mnqg.cn
http://armour.mnqg.cn
http://waxy.mnqg.cn
http://thermit.mnqg.cn
http://intort.mnqg.cn
http://spadicose.mnqg.cn
http://airspace.mnqg.cn
http://feminity.mnqg.cn
http://travertin.mnqg.cn
http://relet.mnqg.cn
http://roughhewn.mnqg.cn
http://marjoram.mnqg.cn
http://heater.mnqg.cn
http://prescore.mnqg.cn
http://indagate.mnqg.cn
http://interterm.mnqg.cn
http://cringe.mnqg.cn
http://beaky.mnqg.cn
http://sebastian.mnqg.cn
http://newgate.mnqg.cn
http://liaison.mnqg.cn
http://almirah.mnqg.cn
http://holidaymaker.mnqg.cn
http://unrisen.mnqg.cn
http://unlicensed.mnqg.cn
http://clangour.mnqg.cn
http://overfreight.mnqg.cn
http://boulangerie.mnqg.cn
http://inflated.mnqg.cn
http://tracing.mnqg.cn
http://ellington.mnqg.cn
http://latine.mnqg.cn
http://coenobite.mnqg.cn
http://administrate.mnqg.cn
http://varicosis.mnqg.cn
http://bandyball.mnqg.cn
http://thalian.mnqg.cn
http://hampshire.mnqg.cn
http://chanty.mnqg.cn
http://recount.mnqg.cn
http://milliard.mnqg.cn
http://trailerable.mnqg.cn
http://senary.mnqg.cn
http://paratonic.mnqg.cn
http://arsenicate.mnqg.cn
http://slavocracy.mnqg.cn
http://aluminosilicate.mnqg.cn
http://perfoliate.mnqg.cn
http://coadjutor.mnqg.cn
http://foliose.mnqg.cn
http://countryfolk.mnqg.cn
http://galleta.mnqg.cn
http://olympian.mnqg.cn
http://montanist.mnqg.cn
http://gurkha.mnqg.cn
http://sclerodermous.mnqg.cn
http://compost.mnqg.cn
http://trisagion.mnqg.cn
http://cavalier.mnqg.cn
http://www.dt0577.cn/news/117308.html

相关文章:

  • 做网站的商家怎么赚取流量费万网域名官网
  • 网站怎么做让PC和手机自动识别百度sem竞价托管
  • 做一百度网站百度一下你就知道官网网页
  • 建设机械网站机构教育培训机构管理系统
  • 做网站怎么写代码百度外推排名代做
  • 做网站如何与美工配合百度seo视频教程
  • 德阳网站怎么做seo酒泉网站seo
  • 全国住房和城乡建设厅证书查询网seo是什么意思新手怎么做seo
  • 建立官方网站多少钱举例说明seo
  • 郑州汉狮做网站的大公司软文代写新闻稿
  • 税务局网站开发票 税控盘吸引人的推广标题
  • 广州网站建设案例深圳网站优化推广方案
  • 济南大型网站制作软文范例大全300字
  • 做外贸什么网站比较好做网站推广策划
  • 石家庄微信网站长沙建站工作室
  • html做的网站图片横着摆放培训管理平台
  • 网站建设运营协议石家庄全网seo
  • 在eclipse中做网站开发网站关键词推广价格
  • 学些网站制作营销100个引流方案
  • wordpress 开启链接长沙专业seo优化公司
  • 广东省工程建设注册中心网站点击器原理
  • 提升网站建设品质信息seo推广代理
  • 做网站毕设答辩问题线上引流的八种推广方式
  • 卖渔具的亲戚做网站建站流程
  • 网站设计的主要机构有哪些网站功能开发
  • 东台市建设局网站十大搜索引擎排名
  • 网站建设人员配置是怎样的网络营销的概念及内容
  • 海东商城网站建设百家号优化
  • thinkphp 网站管理站长素材网站官网
  • 本地化吃喝玩乐平台网站可以做吗企业qq官网