zoukankan      html  css  js  c++  java
  • php + redis 并发生成唯一顺序code

    $prefix = ‘DS’; //标题前缀

    $currentCycle = date(‘ymd‘); // 日期拼接成中间
    $key = "codegen:{$currentCycle}:{$prefix}"; // 生成redis健  健名前缀按照天来更新
    $Redis = $this->Redis->getRedis(); // 连接redis
    $codeNum = $Redis->incr($key);  // 这里用incr 方法来获取当前自增数量 incr是原子性的 能处理并发
    // 为1说明是当天的第一条,设置有效期,删除过期key
    if ($codeNum == 1) {

      // 设置有效期1天
        $expireAt = strtotime(date('Y-m-d 00:00:00', strtotime("+1 day")));
        $Redis->expireAt($key, $expireAt);
      // 删除过期key,加锁,一周期只删一次 setnx锁设置键不存在则设置并返回1,否则返回0
      if ($Redis->setnx("codegen:{$currentCycle}:rmLock", 1)) {
        $lastCycle = date($dateFormat, strtotime("-1 day"));
        $keys = $Redis->keys("codegen:{$lastCycle}:*");
        foreach ($keys as $k) {
        $Redis->del($k);
      }

    }

    $codeNum = str_pad($codeNum, 4, '0', STR_PAD_LEFT);  // 拼成固定长度  比如  1  100  返回 0001  0100

    return $prefix . $codeNum;

  • 相关阅读:
    JavaScript 获取CSS媒体查询信息
    拖拉事件
    JavaScript 中的正常任务与微任务
    IOS 采用https 协议访问接口
    将类数组 转化为数组
    合并两个数组的方法
    base64转码
    Promise 异步执行的同步操作
    proxy set 拦截
    VIm 一些常用的设置
  • 原文地址:https://www.cnblogs.com/yjhsm/p/13590405.html
Copyright © 2011-2022 走看看