我是靠谱客的博主 安详鸡翅,最近开发中收集的这篇文章主要介绍java redis订单_java redis做app后台 怎么实现多人抢单,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

java jfinal和redis作为后台。

具体流程是:

app端:

app有信息展示,用户选择一条信息进入详细,然后点击抢单按钮,这时携带2个id参数发送给后台

后台:

根据2个id,修改订单表的状态和用户的接单数

现在考虑高并发的问题,该怎么使用redis的队列呢?

我试过使用redis 在创建订单时把订单id存入redis

@ActionKey("/order/create")

public void order_create(){

Order order = Order.dao.order_create(map);

JSONObject jsonObject = new JSONObject();

jsonObject.put("rs", order.result);

jsonObject.put("msg", StateDict.dataBaseMsg(order.result));

Cache c = Redis.use("order");

c.rpush("orderlist", order.id);

renderJson(jsonObject);

}

然后在app点击抢单按钮时读取redis

@ActionKey("/order/take")

public void order_take(){

Integer id = getParaToInt(0);

Integer uid = getParaToInt(1);

Cache orderCache = Redis.use("order");

Object orderlist = orderCache.lpop("orderlist");

JSONObject json = new JSONObject();

if(orderlist!=null){

int rs = Order.dao.order_take(id,uid);

json.put("rs", rs);

json.put("msg", StateDict.dataBaseMsg(rs));

}else{

int rs = StateDict.ORDER_TAKEN;

json.put("rs", rs);

json.put("msg", StateDict.dataBaseMsg(rs));

}

renderJson(json);

}

但是我模拟多并发时,同一个用户可以接多次单,也就是用户的接单数不是1次而是多次,

求高手看看 我该怎么写,

我对redis也不是太熟 刚开始使用

这时操作数据库的代码

public int order_take(int id,int uid){

int state = Db.queryInt("SELECT t.state FROM t_order t WHERE t.id=?", id);

//多个请求同时进来的时候state都是0,所以都会进入if条件

if(state==0){

int rs1 = Db.update("UPDATE t_order SET taketime=?,takeuserid=?,state=? WHERE id=?", User.dao.getSysTime(),uid,1,id);

if(rs1>0){

int rs2 = Db.update("UPDATE t_user SET takecount=takecount+1 WHERE id=?",uid);

if(rs2>0){

return StateDict.DATABASE_SUCCESS;

}else{

return StateDict.DATABASE_FAIL;

}

}else{

return StateDict.DATABASE_FAIL;

}

}else{

return StateDict.ORDER_TAKEN;

}

}

最后

以上就是安详鸡翅为你收集整理的java redis订单_java redis做app后台 怎么实现多人抢单的全部内容,希望文章能够帮你解决java redis订单_java redis做app后台 怎么实现多人抢单所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部