个人记录:2018年,工作的第6到7个年头。
重点研究自己不太擅长的技术:分布式、高并发、大数据量、数据库优化、高性能、负载均衡等。

个人看法:

原文作者的总体思路,很清晰。

就是要考虑setnx+expire2个方法组合使用时,expire在设置过期时间的过程中,redis挂了,或者开发阶段,强行停止了jetty/tomcat,会造成死锁。

推荐redis和Zookeeper的2篇文章,分布式锁。

http://blog.csdn.net/FansUnion/article/details/79563821

http://blog.csdn.net/FansUnion/article/details/79564846

并发、并行、多线程,之类的问题,最重要的问题之一就是“线程安全”。

不能同时修改,根本问题是“分布式锁”。

分布式锁,提供一个单独的服务,抽象封装好,大家都用这个,重点关注业务问题。

这里面有个隐患,在jd等大公司大团队,很多技术基础组件和通用服务都有了,咱们这些只关注应用业务开发。

如果不主动去研究原理,在跳槽找工作的时候,非常吃亏。

一问三不知,虽然通过互联网能解决问题,但是别人和你不熟,对你解决问题的能力,并不清楚。

所以,老老实实学扎实,刷笔试面试题,储备知识。

记得16年去1个电商公司面试的时候,当时比较懵逼,这个问题回答的也不太好,还是多总结。

最近看了一些面试官对求职者的评价,才T3-T5级别,问题都难得要死。

好多T6级别,也不可能回答的很好吧。

毕竟,大家都忙着工作干活,又不是天天面试,考试这种。

如果有一天,我当了boss,负责面试,绝对不能搞这一套。

为了生存、生活、自由,我个人只能主动地去多刷刷题,提高自己,当作一种习惯。

嗯,刷题是种态度,是种好习惯。

JavaT5面试权威指南.pdf

今后有空,就多看看,把学习经验继续总结到我的CSDN博客里。

原文链接:http://blog.csdn.net/hikeboy/article/details/69789863

在订单的创建和支付系统时,会有检查逻辑是否已经签约。

如果查到某个客户与某个投资顾问的投顾服务产品已经有签约关系,则不允许重复签约。

但是QA反应,因目前客户端可以多终端登陆,QA反应当两个终端同时间提交同一订单时,会对同一产品生成2个订单。

为了避免在同一时间的2个请求生成2个订单,可以通过Redis缓存一个lockkey来生成一个锁。

基本思路为:在开始创建订单前,在redis中缓存一个由客户号clientId+投资顾问adviserId+名下产品productId的 lockey值,

创建订单完成后,删除该lockkey值。

这样,每次创建订单前先查询 该 “客户号clientId+投资顾问adviserId+名下产品productId” 对应的lockey值在缓存中是否存在,

如果存在说明有正在创建中的订单,直接返回。

String lockKey = CacheKeys.genClientAdviserProductConfirmKey(crmAuth.getClientId(), String.valueOf(adviserId), productId);
//拼接key值//检测该订单对应的lockKey值是否存在,存在则返回,不存在则在缓存中缓存lockKey,并开始往下执行订单创建
if(lockService.checkRepeat(lockKey)) {return JsonResponse.failure("订单创建中,请勿重复提交申请!");}//执行订单创建逻辑createOrder()//订单创建结束后,删除lockKey解锁
lockService.delFromLockList(lockkey);

相应的lockService实现如下:

@Service
@Slf4j
public class LockServiceImpl implements LockService {@Autowiredprivate StringRedisTemplate stringRedisTemplate;private static int expireTime = 15;@Override//检查key锁是否存在,不存在则创建key,加锁public boolean checkRepeat(String cacheKey) {boolean result = stringRedisTemplate.opsForValue().setIfAbsent(cacheKey, cacheKey);if (result) {log.debug("update redis lock key {}", cacheKey);stringRedisTemplate.expire(cacheKey, expireTime, TimeUnit.SECONDS);}return !result;}@Override//删除key 解锁public void delFromLockList(String cacheKey) {stringRedisTemplate.delete(cacheKey);}
}

因并发造成创建了2条相同订单解决的方法相关推荐

  1. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  2. 从零开始学PowerShell(8)创建一个进度条

    我相信不少人会遇到这类情况,通常在执行一些大批量操作时,代码正在后台持续执行,你又没有为每个细节设置详尽的输出的话,你也不知道到底是脚本卡死了还是正在运行,因为没有任何响应反馈. 应对这种情况,要是我 ...

  3. 使用SQL编程创建100万条数据测试索引

    SQL编程创建100万条数据测试索引 CREATE TABLE `app_user`( `id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT, `name ...

  4. 并发场景下MySQL存在的问题及解决思路

    转载自 并发场景下MySQL存在的问题及解决思路 目录 1.背景 2.表锁导致的慢查询的问题 3.线上修改表结构有哪些风险? 4.一个死锁问题的分析 5.锁等待问题的分析 6.小结 一.背景 对于数据 ...

  5. MySQL中同一时候存在创建和上次更新时间戳字段解决方法浅析

    在写这篇文章之前.明白我的MySQL版本号. mysql> SELECT VERSION(); +------------+ | VERSION() | +------------+ | 5.5 ...

  6. mysql 死锁原因_Mysql并发时经典常见的死锁原因及解决方法

    1.mysql都有什么锁 MySQL有三种锁的级别:页级.表级.行级. 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 行级锁:开销大,加锁慢:会出现死锁:锁定粒 ...

  7. Mysql并发时经典常见的死锁原因及解决方法

    1.    mysql都有什么锁 MySQL有三种锁的级别:页级.表级.行级. 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 行级锁:开销大,加锁慢:会出现死锁 ...

  8. W3school导航条实现的两种方法

    W3school导航条实现的两种方法(浮动,弹性布局) 1.用浮动实现 <!DOCTYPE html> <html lang="en"> <head& ...

  9. C#CAD二次开发学习 两条直线求交点的方法IntersectWith的一点整理

    求两条直线交点时可以使用IntersectWith方法,但对于我这种初学者有点摸不清该怎么使用. 直接上代码吧 [CommandMethod("GTest")]public sta ...

最新文章

  1. (0008) iOS 开发之iTunes Connect 显示可供销售,AppStore 不显示新版本
  2. sql sum条件求和_Hive中使用over()实现累积求和和滑动求和
  3. 【实用】SAP MR8M校验增强
  4. Hibernate各种主键生成策略与配置详解
  5. OGRE分析之设计模式
  6. Linux 命令[2]:mkdir
  7. codeforce 804B Minimum number of steps
  8. 东南大学数字信号处理实验_数字与信号处理实验1 离散时间信号分析
  9. JS事件冒泡和事件捕获
  10. .net String Formatter 格式转换
  11. Java中导入Excel文件
  12. 查看网页上次更新时间
  13. Java执行语句--------04
  14. JS日历控件 (兼容IE firefox) 可选择时间
  15. python求解立方根_求解立方根
  16. 电力负荷预测三篇综述总结
  17. 去看看《自动化学报》等等这种期刊,这样看可能有感觉些,比你单纯在知网零散搜可能要好些。
  18. 5个城市,5个女人,5种生活
  19. java人名识别_HanLP中人名识别分析
  20. 四图秒懂BN、LN和IN

热门文章

  1. 如何实现私域营销中最重要的第一步:高效加好友
  2. 中国绿色专利申请与授权数据
  3. html+css+js实现飞机大战小游戏
  4. 2012安卓系统大事记
  5. 游戏引擎Flax Engine源码分析(十)渲染
  6. AUTOSAR (JASPAR)FVM Introduction
  7. Helmet-wearing Datasets
  8. NXP汽车电子芯片路线图和命名规范
  9. 根据倾斜矩形中心点,长宽和倾斜角度,计算顶点,计算两直线交点
  10. ipa砸壳+frida-ios-dump