场景:
1、新增订单,订单编码字段的规则为 “DD+yyyyMMdd+0000001。
2、每天订单量10万
思路:
1、假设redis服务器绝对安全
2、将订单编码存到缓存中(redis),其值只存“DD”+yyyyMMdd后面的数字部分;
对应的key为:key标识+yyyyMMdd,即每天一个key
3、每次生成订单编码时,先调用redis的incr方法,使其在原来编码的基础上加1,并返回结果
4、判断返回的结果,如果返回的是1,说明当前key之前不存在,为生成的新的一天的key,
6、如果redis宕机,或者key被删除,调用指定的接口,接口会去数据库查询今天最大的订单编码,
解析后,将其存在redis中,后面的订单编码再在此基础上自增
PHP实现:
$key = 'DD'.date('Ymd', time());
$id = $redis->incr($key);
$final_id = '';
$l = strlen($id);
if ($l>6) {
$final_id = $id;
} else {
$final_id = str_repeat(0, 6-$l).$id;//用0填充到6位数字
}
echo $key.$final_id;
针对上面第6条
数据库查询当天最新订单号,处理提取出数值 $v,重新赋值给$key
$redis->set($key,$v);