zoukankan      html  css  js  c++  java
  • 生成序列号

    在开发过程中经常要用到序列号,比如订单号,这里介绍两种方法,一种是Redis生成,一种是Sql

    一、Redis生成序列号例子

     public string GetFileName()
            {
                var nextDay = DateTime.Now.AddDays(1);
                var dueTime = new DateTime(nextDay.Year, nextDay.Month, nextDay.Day, 0, 0, 0).Subtract(DateTime.Now);//第二天凌晨过期
                var IncomeNumber = RedisCacheHelper.Instance.GetIncrValue(PictureLibraryConsts.FileNameKey, 1, true, dueTime);
                var fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + IncomeNumber.ToString().PadLeft(8, '0');
                return fileName;
            }

    其中RedisCacheHelper.Instance.GetIncrValue方法如下:

     /// <summary>
            /// 根据原子性获取key的自增值
            /// </summary>
            /// <param name="key">自增的key</param>
            /// <param name="key">自增的value</param>
            /// <param name="autoRemoveKey">是否自动删除</param>
            /// <param name="expireTime">删除key的过期时间</param>
            /// <returns></returns>
            public long GetIncrValue(string key, long value = 1, bool autoRemoveKey = true, TimeSpan expireTime = default(TimeSpan))
            {
                if (string.IsNullOrEmpty(key)) throw new Exception("key为空");
                try
                {
                    var increaseValue = redisClient.Increment(key, value);
                    //第一次获取时,并且自动删除Key
                    if (increaseValue == 1 && autoRemoveKey)
                    {
                        var _expireTime = expireTime == default(TimeSpan) ? TimeSpan.FromDays(2) : expireTime;//默认时间为2天
                        SetExpireTime(key, _expireTime);
                    }
                    return increaseValue;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

    二、利用SQL生成序列号(来自慕课网)

    本文的sql用的是mysql

    首先建一张表如下:

    然后新建存储过程如下:

    CREATE DEFINER=`root`@`localhost` PROCEDURE `CreateOrderNo`()
    BEGIN
        DECLARE v_cnt INT;
        DECLARE v_timestr INT;
        DECLARE rowcount BIGINT;
        set v_timestr=DATE_FORMAT(now(),'%Y%m%d');
        select ROUND(rand()*100,0)+1 into v_cnt;
        start TRANSACTION;
            update order_seq set order_sn=order_sn+v_cnt where timestr=v_timestr;
            if row_count()=0 then
                insert into order_seq(timestr,order_sn)VALUES(v_timestr,v_cnt);     
            end if;
            select CONCAT(v_timestr,LPAD(order_sn,7,0)) as order_sn
            from order_seq where timestr=v_timestr;
        COMMIT;
    END
  • 相关阅读:
    基于jquery. cookie 防刷新重复点击获取验证码
    Mysql常用命令详解
    20种常用的DOS命令小结
    php 常用正则表达式
    VBA Excel 常用 自定义函数
    VBA Mysql 类
    VBA Excel 引用 API,以实现“透明”
    VBA Excel 打印
    VBA Excel 单元格操作
    php上传常见文件类型对应的$_FILES["file"]["type"](转)
  • 原文地址:https://www.cnblogs.com/come-on-come-on/p/11359738.html
Copyright © 2011-2022 走看看