redis处理数据问题

我对redis的认识,知道redis需要进队列,出队列概念。如果我现在要做用redis做生成订单号,用来避免高并发问题。那思路是怎么样的呢?我先说一下我的理解:$redi... 我对redis的认识,知道redis需要进队列,出队列概念。如果我现在要做用redis做生成订单号,用来避免高并发问题。那思路是怎么样的呢?
我先说一下我的理解:
$redisValue = 1000;
1.向redis添加一个key:
$this->_redisInfo->set("sn",$redisValue);
2.进入队列
$this->_redisInfo->push("orderSn",$redisValue)
3.进入成功之后,对key=sn自增加1
$redisValue = $this->_redisInfo->increment("sn");
4.出对列
$this->_redisInfo->pop("sn");

我运行了代码,但是不行,$redisValue自动加1失败(也就是进入队列失败了),我想知道为什么?求大神,我该如何做?
展开
 我来答
仙戈雅3n
2016-11-01 · TA获得超过5790个赞
知道大有可为答主
回答量:2398
采纳率:75%
帮助的人:891万
展开全部

我印象中Redis的众多数据类型中,并没有队列(Queue)的数据类型,Redis的数据类型有:string(字符串),Hash(哈希),List(列表),Set(集合),有序集合(Sorted Set)。

如果你仅仅想生成订单号(OrderSn),可以提前生成好Sn号并入队,然后存储在Redis缓存里。

例如:

            // 伪代码
 
            Queue<string> snQueue = null; // 订单号Sn队列
            string sn = Redis.Get("OrderSn");
            string curSn = string.Empty;
            if(String.IsNullOrWhiteSpace(sn)){

                snQueue = new Queue<string>();
                for (int i = 0; i < 30000; i++) // 假定 双11,每秒3万订单
                {
                    // 提前分配好订单Sn号   入队
                    snQueue.Enqueue(DateTime.Now.ToString("yyyMMdd") + i);
                }
                curSn = snQueue.Dequeue(); // 出队
                Redis.Set("OrderSn", JsonConvert.SerializeObject(snQueue));
            }
            else
            {
              snQueue=JsonConvert.DeserializeObject<Queue<string>>(sn);
              curSn = snQueue.Dequeue(); // 出队
              Redis.Set("OrderSn", JsonConvert.SerializeObject(snQueue));// 重新放入Redis缓存
            }
更多追问追答
追问
你这个应该是.net程序。
我看到你是入队了之后,然后就出对了,然后再把订单号放入redis中缓存。(为什么要这种呢?)
你这个是入队了之后就生成了订单号?
我理解的是:如果生成一个订单号,应该是在入队成功之后生成一个,再来个就排队,生成完之后就出队。
追答
上面只是演示, 上面的业务流程是假设的,它是这样假设的:
先提前生成一批Sn并按顺序入队,然后存储在Redis,当客户端下订单时,就从队列里出队一个Sn,然后剩下的就放回去。
今至电子科技有限公司
2024-08-23 广告
数据库备份是确保数据安全与业务连续性的关键环节。我们上海今至电子科技有限公司高度重视数据保护,定期执行全面的数据库备份策略。这包括使用先进工具和技术,对关键业务数据进行自动化备份,并存储在安全可靠的外部存储介质或云端。通过定期验证备份的完整... 点击进入详情页
本回答由今至电子科技有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式