分布式环境下取流水号

Redis分布式锁取流水号

前言

在日常开发工作中,许多业务场景涉及到取流水号,今天给大家分享一种分布式系统架构环境中取流水号的方案,利用Redis的分布式锁获取流水号。


开发环境

VS2022+.Net6+Docker+Redis+Mysql

开发步骤

1.MySQL数据库新建一个datatable:tb_seqno,新建num字段记录当前流水号

这里简单定义了一个int类型字段,默认值为1
如下(示例):

在这里插入图片描述

2.启动Redis容器

如下(示例):

在这里插入图片描述

3.核心代码编写

新建一个控制台程序,新建一个类文件SeqNo,写入以下代码(需Nuget引入CSRedisCore):

        public static string GetSeqNoByRedisLock()
        {
            using var csredis = new CSRedis.CSRedisClient("192.168.11.112:6379, defaultDatabase = 0, poolsize = 500, ssl = false, writeBuffer = 10240");
            RedisHelper.Initialization(csredis);
            string getSeqNosql = "select num from tb_seqno";
            string updateSeqNoSql = "update tb_seqno set num=num+1";

            var seqNo = string.Empty;
            using (csredis.Lock("test", 5000))
            {
                seqNo = MysqlHelper.ExecuteScalar(getSeqNosql).ToString();

                MysqlHelper.ExecuteNonQuery(updateSeqNoSql);
            }
            return seqNo!;

        }

4.测试

在Program中调用GetSeqNoByRedisLock方法,并打印取出的流水号,使用命令行启动多个项目用来模拟分布式架构环境下的多台机器请求

如下(示例):在这里插入图片描述
结果如下(示例):
在这里插入图片描述


总结

通过控制打印的结果来看并没有出现重复的流水号,这里通过一个简单的Demo给大家分享一种可行性方案,当然实际业务中还需要根据自己的业务需求自定义流水号规则,业务逻辑处理等等,笔者希望此文能起到抛砖引玉的作用,如能给各位朋友一点启发或者帮助那是再好不过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值