.net 分布式架构之分布式锁实现

分布式锁

经常用于在解决分布式环境下的业务一致性和协调分布式环境。

实际业务场景中,比如说解决并发一瞬间的重复下单,重复确认收货,重复发现金券等。

使用分布式锁的场景一般不能太多。

开源地址:http://git.oschina.net/chejiangyi/XXF.BaseService.DistributedLock

开源相关群: .net 开源基础服务 238543768

这里整理了C#.net关于redis分布式锁和zookeeper分布式锁的实现,仅用于研究。(可能有bug)

采用ServiceStack.Redis实现Redis分布式锁



1

      RedisDistributedLock( redisserver,   LockResult TryGetDistributedLock(TimeSpan? getlockTimeOut, TimeSpan? (lockresult ==  DistributedLockException(=            

._lock = =.Format(=   (._lock !=  (_client != .Format(

来自网络的java实现Redis分布式锁(C#版)

      RedisDistributedLockFromJava( redisserver,   LockResult TryGetDistributedLock(TimeSpan? getlockTimeOut, TimeSpan? (lockresult ==  DistributedLockException(
                 taskexpiredMilliseconds = (taskrunTimeOut !=  ? ()taskrunTimeOut.Value.TotalMilliseconds : ( getlockexpiredMilliseconds = (getlockTimeOut !=  ? ()getlockTimeOut.Value.TotalMilliseconds :  hassleepMilliseconds =  ( ( redisclient = value = CurrentUnixTimeMillis() + taskexpiredMilliseconds +                         

 acquired = redisclient.Add<>(@lock, value, TimeSpan.FromMilliseconds(taskexpiredMilliseconds +
                         (acquired == =
                             oldValueBytes =
                             (oldValueBytes !=  && BitConverter.ToInt64(oldValueBytes, ) <                                

 getValueBytes = o1 = redisclient.ExpireEntryIn(@lock, TimeSpan.FromMilliseconds(taskexpiredMilliseconds + DistributedLockConfig.TaskLockDelayCleepUpTime));=
                                =
                            =
                     (lockresult ==
                     (hassleepMilliseconds >==+=.Format(=  ()(System.DateTime.UtcNow -  System.DateTime(, , , , ,    (lockresult == LockResult.Success || lockresult == current = ( redisclient = v = (v != 
                             (current < BitConverter.ToInt64(v, .Format(

ServiceStack.Redis内部实现版本(较旧)


1

      RedisDistributedLockFromServiceStack( redisserver,   LockResult TryGetDistributedLock(TimeSpan? getlockTimeOut, TimeSpan? (lockresult ==  DistributedLockException( ( redisClient ==>
                                  
                                  lockString = (expireTime.ToUnixTimeMs() + 
                                 =  lockExpireString = redisClient.Get<> (!.TryParse(lockExpireString, 
                                      
                                      
                                     trans.QueueCommand(r =>
                                      (t == ==.Format(=   ( redisClient =.Format(

Zookeeper 版本实现分布式锁

       root = ; 
          lockName; 
          waitNode; 
          myZnode; 
         TimeSpan sessionTimeout = TimeSpan.FromMilliseconds( IList<Exception> exception =  List<Exception>         
                
                 
                 
         ZooKeeprDistributedLockFromJava( config, .lockName =
            =  ZooKeeper(config, sessionTimeout,  stat = zk.Exists(root,  (stat == 
                    zk.Create(root,  [         
                 
           (.autoevent !=    splitStr = 
                myZnode = zk.Create(root +  + lockName + splitStr,  [+ 
                IList<> subNodes = zk.GetChildren(root, 
                IList<> lockObjNodes =  List<> ( node =+  + lockObjNodes[ (myZnode.Equals(root +  + lockObjNodes[
                     
                 subMyZnode = myZnode.Substring(myZnode.LastIndexOf(, StringComparison.Ordinal) + = lockObjNodes[Array.BinarySearch(alockObjNodes, subMyZnode) -     (    waitForLock( stat = zk.Exists(root +  + lower, 
             (stat !=  + System.Threading.Thread.CurrentThread.Name +  + root +  +=  AutoResetEvent( r ==                     +-=

以上代码仅做参考,未压测。

代码粘贴有些问题,详细请下载开源包运行研究。

时间: 2024-08-05 19:06:07

.net 分布式架构之分布式锁实现的相关文章

dubbo + springmvc + mybatis + ehcache + redis }企业大型互联网分布式架构{Java分布式架构}

摘要: Jeesz目前包括以下模块项目,后台系统管理系统,RestFul独立服务系统.Scheduler定时调度系统.内容管理(CMS)系统.在线办公(OA)系统.我的待办(Task服务).我的收藏(Bookmark服务).         后台管理系统包括企业组织架构(用户管理.机构管理.区域管理).菜单管理.角色权限管理.字典管理等功能:         RestFul独立提供标准Rest服务API,您可以快速实现自己的业务,提供需要的服务:         Quartz定时调度系统可以动态

企业大型互联网分布式架构{Java分布式架构 dubbo + springmvc + mybatis

平台简介 ??????? Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. ????? ? Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis分布式缓存技术.FastDFS分布式文件系统.ActiveMQ异步消息中间件.Nginx负载均衡等分布式技术 ??????? 使用Maven做项目管理,项目模块化,提高项目的易开发性.扩展性 ??????? 以Spring Framework为核心容器,Spring

搭建JEESZ分布式架构10-Redis分布式缓存安装(单节点)

Redis分布式缓存安装(单节点) Redis官网:http://redis.io独立缓存服务器:IP:xxx.xxx.xxx.xxx安装环境:CentOS 6.6Redis 版本:redis-3.0 (因为 Redis3.0 在集群和性能提升方面的特性,rc 版为正式版的候选版,请在安装时去官网选用最新版)用户:root安装目录:/usr/local/redis 下面我们针对于Redis安装做下详细的记录:编译和安装所需的包:# yum install gcc tcl 提醒:下载 3.0 版

搭建jeesz分布式架构-- Redis分布式缓存安装(单节点)

安装环境:CentOS 6.6Redis 版本:redis-3.0 (因为 Redis3.0 在集群和性能提升方面的特性,rc 版为正式版的候选版,请在安装时去官网选用最新版)用户:root安装目录:/usr/local/redis下面我们针对于Redis安装做下详细的记录:编译和安装所需的包:# yum install gcc tcl提醒:下载 3.0 版 Redis(当前最新版 redis-3.0.0-rc5.tar.gz,请在安装时去官网选用最新版)# cd /usr/local/src#

一文归纳总结分布式架构的那些事!

双十一购物狂欢节已经过去了,作为程序员的你,除了在关心自己的快递的运送情况之外,最关心的是不是双十一架构技术是如何承受亿级用户流量的冲击,又是如何在分布式架构中实现单点登陆,形成支持高并发,高可用的分布式架构技术呢?下面小编就来帮你总结如何从0到1学习分布式架构技术,如何实现从小白到架构师的蜕变!! 一.初识分布式架构: 1.初识分布式架构及意义 2.如何把应用从单机架构扩展到分布式 3.大型分布式架构的演进过程 4.构建分布式架构的重要因素 (1)CDN加速静态访问 (2)分布式储存 (3)分

阿里P8架构专家带你透析分布式架构

什么是分布式系统 分布式系统是由一组通过网络进行通信.为了完成共同的任务而协调工作的计算机节点组成的系统.分布式系统的出现是为了用廉价的.普通的机器完成单个计算机无法完成的计算.存储任务.其目的是利用更多的机器,处理更多的数据. 首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算.存储任务的时候,且硬件的提升(加内存.加磁盘.使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统.因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于

微服务架构下分布式事务方案

1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这样可以降低开发难度.增强扩展性.便于敏捷开发.当前被越来越多的开发者推崇,很多互联网行业巨头.开源社区等都开始了微服务的讨论和实践.Hailo有160个不同服务构成,NetFlix有大约600个服务.国内方面,阿里巴巴.腾讯.360.京东.58同城等很多互联网公司都进行了微服务化实践.当前微服务的开发框架也非常多,比较著名的有Dubbo.SpringCloud.thrift .grpc等. 2 微服务落地存在的问题

阿里P8架构师告诉你什么是分布式架构

一.前言 我们都知道,当今无论在BAT这样的大公司,还是各种各样的小公司,甚至是传统行业刚转互联网的企业都开始使用分布式架构,那么什么叫分布式架构呢?分布式架构有什么好处呢?分布式架构经过了怎样的发展呢?是哪家企业开启了分布式架构的时代呢?读完本文,你就会得到这些答案,下面让我们一起来开启分布式概述的奇妙之旅吧! 二.分布式架构的发展历史 1946年2.14日,那是一个浪漫的情人节 , 世界上第一台电子数字计算机在美国宾夕法尼亚大学诞生了,她的名字叫ENIAC.这台计算机占地170平米.重达 3

分布式架构理解(云时代架构文章读后感10)

随着移动互联网的发展智能终端的普及,计算机系统早就从单机独立工作过渡到多机器协作工作.计算机以集群的方式存在,按照分布式理论的指导构建出庞大复杂的应用服务,也已经深入人心.本文力求从分布式基础理论,架构设计模式,工程应用,部署运维,业界方案这几大方面,介绍基于MSA(微服务架构)的分布式的知识体系大纲.从而对SOA到MSA进化有个立体的认识,从概念上和工具应用上更近一步了解微服务分布式的本质,身临其境的感受如何搭建全套微服务架构的过程. SOA面向服务架构 由于业务发展到一定层度后,需要对服务进