随着电商的快速发展,人们越来越喜欢在网上购物。然而,很多人经历过订单过期失败的困扰。订单过期失败是指用户在下单后,在规定的时间内没有付款或者没有完成支付,订单就会自动关闭或被取消。因为这种情况在电商中十分普遍,所以如何解决订单过期失败问题就成了很多企业面临的一项重要任务。
目前,解决订单过期失败问题的常见方法是将订单信息存储在MySQL数据库中,并且借助定时任务去删除过期订单。这种方法虽然可以有效解决问题,但是随着订单量的增加,MySQL数据库的负担也随之增加,极有可能导致响应变慢。
那么,有没有一种更好的方式来解决这个问题呢?答案是肯定的。Redis可以有效地解决订单过期失败问题。那么,Redis是什么呢?它是一种基于内存的高性能缓存数据库,相较于MySQL数据库,Redis能够更快地读写数据,并且可以轻松处理海量并发请求。
在Redis中,我们可以使用Sorted Set数据结构来实现订单过期失败的问题。Sorted Set是有序集合,它可以很方便地使用时间戳作为元素的分数,因此,我们可以将订单信息的过期时间作为Score值存入Sorted Set中。
下面,我们来看看具体的实现过程。我们先来创建一个Sorted Set:
zadd expire_orders
这条命令将订单的过期时间作为分数,将订单id 作为成员加入到Sorted Set中。例如:
zadd expire_orders 1613082595 123456
接下来,我们需要定时扫描Sorted Set,找出Score小于当前时间戳的订单,将它们设置为过期状态。我们可以使用以下两条命令来实现:
zrangebyscore expire_orders -inf// 查找Score小于的成员zrem expire_orders// 从Sorted Set中删除
例如:
zrangebyscore expire_orders -inf 1613082595zrem expire_orders 123456
在实现过程中,我们可以使用Redis的事件机制来监听Sorted Set的key过期事件。一旦key过期,我们就可以自动删除它。代码示例如下:
redisUtil.getResource().configSet("notify-keyspace-events", "Ex");redisUtil.getResource().psubscribe(new OrderExpiredListener(), "__keyevent@*__:expired");public class OrderExpiredListener extends JedisPubSub {@Overridepublic void onPMessage(String pattern, String channel, String message) {System.out.println("Pattern: " + pattern + ", Channel: " + channel + ", Message: " + message);// 删除已过期订单String orderId = message.replace("expire_orders:", "");// ...}}
通过Redis的事件机制,我们可以轻松地追踪过期订单,并且能够随时删除它们。
在结束之前,我们需要注意以下几点:
1. Sorted Set中的Score值必须是唯一的,否则将无法正确地比较时间。

2. 待定时任务删除过期订单时,必须使用“获取-删除”模式,避免多个服务同时删除同一订单的情况。
3. 使用Sorted Set存储订单信息时,必须将订单id作为成员存储,避免不同订单的Score值相同。
使用Redis来解决订单过期失败问题具有很多优势。它能够快速地存储和检索数据,同时也能够轻松地处理海量并发请求。因此,如果你的电商网站正在遭受订单过期失败的问题,那么不妨试试Redis。
香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云 服务器 和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
redis可以设置生效开始的时间吗
一般是根据需求来进行设置。 redis通过expire命令来设置key的过期时间。 语法(key, expiration)1. 在小于2.1.3的redis版本里,只能对key设置一次expire。 redis2.1.3和之后的版本里,可以多次对key使用expire命令,更新key的expire time。 2. redis术语里面,把设置了expire time的key 叫做:volatile keys。 意思就是不稳定的key。 3. 如果对key使用set或del命令,那么也会移除expire time。 尤其是set命令,这个在编写程序的时候需要注意一下。 4. redis2.1.3之前的老版本里,如果对volatile keys 做相关写入操作(LPUSH,LSET),和其他一些触发修改value的操作时,redis会删除该key。 也就是说 (key,expiration);(key,field,value);(key) //return nullredis2.1.3之后的版本里面没有这个约束,可以任意修改。 (key,100);(key,expiration);(key)(key)//redis2.2.2 return 101; redis<2.1.3 return 1;5. redis对过期键采用了lazy expiration:在访问key的时候判定key是否过期,如果过期,则进行过期处理。 其次,每秒对volatile keys 进行抽样测试,如果有过期键,那么对所有过期key进行处理。
Redis和Memcache的区别分析
1、 Redis和Memcache都是将数据存放在内存中,都是内存数据库。 不过memcache还可用于缓存其他东西,例如图片、视频等等。 2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。 3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘4、过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。 Redis可以通过例如expire 设定,例如expire name 105、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。 都可以一主一从6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)7、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复8、Redis支持数据的备份,即master-slave模式的数据备份。
创业中应该注意什么
一、创业要有足够的资源。 很多人在初次创业的时候,都是资源十分欠缺的。 资源不足,使企业创业成功的概率降低,但要有完全充分的资源也是不可能的。 在资源具备上,一般来说,要符合两种条件:一是要有进入一个行业的起码的资源,另一方面是具备差异性资源。 如果任何条件均不具备,创业成功的可能性很小。 创业资源条件主要包括几个方面:业务资源:赚钱的模式是什么;客户资源:谁来购买;技术资源:凭什么赢取客户的信赖?经营管理资源:经营能力如何;财务资源:是否有足够的启动资金;行业经验资源:对该行业资讯与常识的积累;行业准入条件:某些行业受到一些政策保护与限制,需要进入资格条件;人力资源条件:是否有合适的专业人才。 以上资源创业者也不需要100%的具备,但至少应具备其中一些重要条件,其他条件可以通过市场化方式来获取。 创业者如有足够的财务资源,其他资源欠缺也可以弥补;如果有足够的客户资源,其他资源的欠缺也容易改变。 创业具备的条件是:足够的资本?行业经验?客户资源?技术创新?商业运作能力?与即将面对的竞争对手相比是否有明显的优势?二、 创业前要慎思创业前要认真思考、反复评估、考虑成熟再行动。 除了要足够的资源准备外,心理准备最重要。 以下几个方面问题,值得好好思考。 第一,我为什么要创业?是否有足够的决心,愿意承担风险吗?过去的利益是否舍得放弃?第二,我是否具备创业者应有的能力与素质,是否能承受挫折,是否具有综合全面的素质,还是有专项技术特长?第三,我创业成功的核心资源优势是什么?我具备的条件是:足够的资本?行业经验?客户资源?技术创新?商业运作能力?与即将面对的竞争对手相比是否有明显的优势?第四,是否有足够的耐心与耐力度过创业期的消耗,估计通过多长时间走过创业瓶颈阶段,自己有多长时间的准备。 第五,创业最大的风险是什么,最坏的结果是什么,我是否能承受?不要只想到乐观的一方面,对风险一定要有充分的心理准备,否则,一碰到现实状况与想象不一样,一下会造成信心动摇。 回答清楚以上问题之后,再决定是否创业不迟。 很多创业者的失败,都是与创业前心理准备不够,匆匆忙忙进行创业,最后失败得一塌糊涂,假如准备不足,条件不具备,晚一点创业也不迟。 三 先有业务,再创业进入该行业为别人打工,通过打工的经历来积累经验与资源。 那么“学费”自然由别的老板给你付了。 很多人创业是迫于生存的压力,希望赚多点钱,过上较好的生活。 因此,在创业之初,是无所谓事业的,创业选择极具盲目性,为创业而创业,在刚开始创之前,进入什么行业,以什么为盈利模式,都是一片茫然。 很多创业者,先将公司注册好了,再考虑业务范畴。 创业者在创业之前,一定要有明确的创业方向,再决定创业。 假如,选择了某一个行业,创业前一定要积累一些该行业的经验,收集相关的资讯,如果有可能,可以先考虑进入该行业为别人打工,通过打工的经历来积累经验与资源。 那么“学费”自然由别的老板给你付了,也就用不着自己创业时间交学费,行业知识、客户资源渠道,赢利模式都有了,再创业,成功就指日可待了。 四、经营能力最重要经营赚钱的能力是最重要的,只要有非常出色的经营能力,自然会找到投资者,很多投资家天天都在找好项目投资。 很多年轻人在创业时,过多强调资金因素影响力,其实不然,创业条件中资金虽然很重要,但最最重要的是创业者个人的经营能力,特别是业务能力。 如果资金是根本因素,那好,我给你投资1000万,你经营什么,你有什么可以确保赚钱吗?我想,很多人恐怕都无法保证,也不知道投资干什么,所以资金因素不是惟一的。 经营赚钱的能力是最重要的,只要有非常出色的经营能力,自然会找到投资者,很多投资家天天都在找好项目投资。 在创业初期,创业者个人的能力非常重要,事无巨细,都要自己亲自动手,创业不是一件很轻松的事情。 在创业者的个人能力中业务能力,开发客户能力,综合应变能力十分重要。 创业者其实很多时候就是一个业务经理,能够拿到订单什么都好办了。 很多创业成功者,都是做业务出身。 有了客户,有了订单,自然的事情都变得容易了。 笔者个人创业成功也是在近十年的专业积累基础上获得成功的,经营能力修炼到家,成功自然到来。 对于有志创业者而言,不断打造好自己的经营能力是至关重要的。 从学做业务开始,是一个好办法,当能力有了,创业机会自然很多,特别是今天,进入靠能力赚钱的时代,经营能力更是重中之重。 五、 内部创业更容易在创业者中,有几种成功的类型,自己从零开始独立创业成功者,有技术与他人合作成功者,在企业内部创业成功者。 笔者认为第三种创业方式最容易成功。 一个创业者比较好的选择就是有计划与策略地进入一家成功公司,先取得老板的信任,再找准机会,建议老板从公司发展角度投资新项目,这样创业的机会就有了,作为项目的提出者,自然会被老板赋予重任。 很多企业都会有发展新项目的需要,如果冒昧地找人投资,合作机会不会太多,关键是一个信任感的问题,萍水相逢,人家为什么要信任?国内企业管理控制乏力,企业用人时,对忠诚度的在意,甚至超过对能力的重视。
发表评论