归纳一下修改后的逻辑:

1.查询缓存,如果缓存存在,返回结果

2.缓存不存在,查询数据库

3.争夺分布式锁

4.成功获得锁,再次判断缓存的存在

5.如果缓存仍旧不存在,把查询数据库的结果循环放入缓存

6.释放分布式锁

这种二次判断存在性的机制有一个专门的名字,叫做双重检测。该方法在线程安全的单例模式中也常常被用到。

几点补充:

1.文中所使用的分布式锁,其实并不是“正宗”的分布式锁,当线程争夺锁失败的时候,会直接返回查询DB的结果,而不会依靠自旋机制来等锁。

2.为什么优惠券列表的信息要使用List类型来存入缓存,而不是把整个列表存为一个很长的Json字符串?这是由于业务需要,使用List在某些情况下更方便对单个优惠券信息进行修改(LSET指令)。

3.为什么优惠券列表的信息不使用Redis的Set或者Hash数据类型来存储,实现自动去重呢?对于Set类型,去重前需要对比整个字符串是否完全相同,而每一张优惠券是一个较长的Json字符串,对比的效率会比较低。使用Hash倒是可以实现高效的去重,但并未在根本上解决重复更新的问题。

https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653190521&idx=1&sn=aef6fdd509a9a869381a2eaf78fbb719&chksm=8c990ba3bbee82b5ad237a80e67c99a725abbea909498aa58b079f0a908d0ccefb83b493a9eb&scene=21#wechat_redirect

优惠券领取--Java电商相关推荐

  1. 【session】Java电商平台开发技能图谱,探秘双十一百万PV

    您将学习 Java电商平台开发技能图谱,探秘双十一百万PV 分享内容 企业级Java开发技能图谱 从宏观到微观,Java到底怎么学 为了支撑双十一,我们对Java程序做了什么 你将认识 热爱分享的常乐 ...

  2. Java电商平台-电商订单系统全解析

    说明:Java电商平台-电商订单系统全解析主要讲解OMS的内容,设计,开发,架构等知识 今天分享将会分为以下三个环节来阐述: 1.订单系统的介绍 2.订单系统的解构 3.垂直电商订单系统设计思路 一. ...

  3. JAVA电商秒杀实战(三)

    JAVA电商秒杀实战(三)- - 实现第三方登录 QQ登录 短信验证码登录 QQ登录 首先导入所需要的相关依赖: <dependency><groupId>org.apache ...

  4. 五款开发Java电商系统的工具

    Java电商系统由于其稳定性和后台处理数据效率高的优势而备受运营者欢迎,Java电商系统还因为库的丰富性以及开发的便利性收受到开发者的青睐,今天这里介绍5款java网店系统的开发工具. 1.即开即用的 ...

  5. JAVA电商 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城

    JAVA电商 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城 1. 鸿鹄Cloud架构清单 2. Commonservice(通用服务) 通用服务: ...

  6. 慕课网,乐字节 Java电商秒杀项目

    慕课网.乐字节Java电商秒杀项目 技术点介绍: 前端:Thymeleaf,Bootstrap,Jquerry 后端:SpringBoot,MybatisPlus,Lombok 中间件:RabbitM ...

  7. 全开源java电商小程序saas项目介绍

    weiit-saas是一款Java开源项目,属于weiit团队自研产品,意在通过技术封装,让企业无需代码开发,帮助企业一键生成小程序.公众号,让企业拥有独立品牌的自营商城.产品竞争对手<有赞&g ...

  8. mybatis事物如何避免脏读_新手指南:如何从java电商小白到秒杀大咖

    前言 刚从事java开发的同学很多时间会直接接触一些简单的ssm框架,使用spring mvc外加mybatis实现一个基本的web项目,打个war包部署上线.跟上时代潮流的会使用spring boo ...

  9. java电商网站建设教程_java开发电商系统实战开发视频教程

    JAVA 当前位置:主页 > 编程教程 > JAVA > java开发电商系统实战开发视频教程 java开发电商系统实战开发视频教程 教程大小:4GB   发布时间:2018-07- ...

最新文章

  1. 学习sql注入:猜测数据库_对于SQL的热爱:为什么要学习它以及它将如何帮助您...
  2. 学习新技术的10个建议
  3. 给程序员的VIM速查卡
  4. 粒子滤波(Particle filter)
  5. jzoj1758-过河【dp】
  6. java获取linux下面所有线程,获取Linux中Java线程的线程ID
  7. python锁机制_Python并发编程之谈谈线程中的“锁机制”(三)
  8. crm高速开发之OrganizationService
  9. AMPL实现中国邮递员问题,你get到了吗
  10. 网站访问统计术语和度量方法
  11. 第二章第三题(将英尺转换为米)(convert feet to meters)
  12. 电商短视频运营应该怎么做
  13. 神秘的程序员6 没事笑一笑
  14. 做了7年新媒体人,现在才懂的精细化运营增粉变现秘诀!黎想
  15. 结束已经占用的端口号的进程
  16. java与c的交互,java与c/c++之间的数据交互,java交互
  17. 第三次作业--原型设计
  18. 网络基础——牛客网刷题第一波
  19. 《集体智慧编程》读书笔记10
  20. word彩色图片转黑白

热门文章

  1. ASP.NET Core 设置允许跨域访问
  2. 在html中单选选择器,已选中单选按钮标签的CSS选择器
  3. linux 如何解压.exe,linux下解压火狐浏览器压缩包 ./filefox 运行可执行程序报错问题...
  4. HBase数据模型深入剖析-OLAP商业环境实战
  5. exc_bad_instruction(code=EXC_I386_INVOP,subcode=0x0) 错误
  6. ZKWeb网页框架1.3正式发布
  7. [IOS地图开发系类]5、改变大头针MKPinAnnotationView的颜色
  8. 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.1——支持多种数据库。让分页更加简单。...
  9. Fedora Linux中配置JDK5或JDK6环境变量
  10. 什么是A记录,子域名,CNAME别名,MX记录,TXT记录,SRV 记录,泛域名(泛解析),域名转向,域名绑定...