当前位置: 首页 > news >正文

网站怎么加载图片做logo维持一个素材网站要多少钱

网站怎么加载图片做logo,维持一个素材网站要多少钱,给公司制作网站吗,深圳注册公司代理转#xff1a;https://segmentfault.com/a/1190000011421467 废话不多说#xff0c;首先分享一个业务场景-抢购。一个典型的高并发问题#xff0c;所需的最关键字段就是库存#xff0c;在高并发的情况下每次都去数据库查询显然是不合适的#xff0c;因此把库存信息存入Red… 转https://segmentfault.com/a/1190000011421467 废话不多说首先分享一个业务场景-抢购。一个典型的高并发问题所需的最关键字段就是库存在高并发的情况下每次都去数据库查询显然是不合适的因此把库存信息存入Redis中利用redis的锁机制来控制并发访问是一个不错的解决方案。 首先是一段业务代码 Transactional public void orderProductMockDiffUser(String productId){//1.查库存int stockNum stock.get(productId);if(stocknum 0){throw new SellException(ProductStatusEnum.STOCK_EMPTY);//这里抛出的异常要是运行时异常否则无法进行数据回滚这也是spring中比较基础的 }else{//2.下单orders.put(KeyUtil.genUniqueKey(),productId);//生成随机用户id模拟高并发sotckNum stockNum-1;try{Thread.sleep(100);} catch (InterruptedExcption e){e.printStackTrace();}stock.put(productId,stockNum);} } 这里有一种比较简单的解决方案就是synchronized关键字。 public synchronized void orderProductMockDiffUser(String productId) 这就是java自带的一种锁机制简单的对函数加锁和释放锁。但问题是这个实在是太慢了感兴趣的可以可以写个接口用apache ab压测一下。 ab -n 500 -c 100 http://localhost:8080/xxxxxxx 下面就是redis分布式锁的解决方法。首先要了解两个redis指令SETNX 和 GETSET可以在redis中文网上找到详细的介绍。SETNX就是set if not exist的缩写如果不存在就返回保存value并返回1如果存在就返回0。GETSET其实就是两个指令GET和SET首先会GET到当前key的值并返回然后在设置当前Key为要设置Value。 首先我们先新建一个RedisLock类 Slf4j Component public class RedisService {Autowiredprivate StringRedisTemplate stringRedisTemplate;/**** 加锁* param key* param value 当前时间超时时间* return 锁住返回true*/public boolean lock(String key,String value){if(stringRedisTemplate.opsForValue().setIfAbsent(key,value)){//setNX 返回booleanreturn true;}//如果锁超时 ***String currentValue stringRedisTemplate.opsForValue().get(key);if(!StringUtils.isEmpty(currentValue) Long.parseLong(currentValue)System.currentTimeMillis()){//获取上一个锁的时间String oldvalue stringRedisTemplate.opsForValue().getAndSet(key,value);if(!StringUtils.isEmpty(oldvalue)oldvalue.equals(currentValue)){return true;}}return false;}/**** 解锁* param key* param value* return*/public void unlock(String key,String value){try {String currentValue stringRedisTemplate.opsForValue().get(key);if(!StringUtils.isEmpty(currentValue)currentValue.equals(value)){stringRedisTemplate.opsForValue().getOperations().delete(key);}} catch (Exception e) {log.error(解锁异常);}} } 这个项目是springboot的项目。首先要加入redis的pom依赖该类只有两个功能加锁和解锁解锁比较简单就是删除当前key的键值对。我们主要来说一说加锁这个功能。首先锁的value值是当前时间加上过期时间的时间戳Long类型。首先看到用setiFAbsent方法也就是对应的SETNX在没有线程获得锁的情况下可以直接拿到锁并返回true也就是加锁最后没有获得锁的线程会返回false。 最重要的是中间对于锁超时的处理如果没有这段代码当秒杀方法发生异常的时候后续的线程都无法得到锁也就陷入了一个死锁的情况。我们可以假设CurrentValue为A并且在执行过程中抛出了异常这时进入了两个value为B的线程来争夺这个锁也就是走到了注释*的地方。currentValueA这时某一个线程执行到了getAndSet(key,value)函数(某一时刻一定只有一个线程执行这个方法其他要等待)。这时oldvalue也就是之前的value等于A在方法执行过后oldvalue会被设置为当前的value也就是B。这时继续执行由于oldValuecurrentValue所以该线程获取到锁。而另一个线程获取的oldvalue是B而currentValue是A所以他就获取不到锁啦。多线程还是有些乱的需要好好想一想。接下来就是在业务代码中加锁啦首要要Autowired注入刚刚RedisLock类不要忘记对这个类加一个Component注解否则无法注入 private static final int TIMEOUT 10*1000; Transactional public void orderProductMockDiffUser(String productId){long time System.currentTimeMillions()TIMEOUT;if(!redislock.lock(productId,String.valueOf(time)){throw new SellException(101,换个姿势再试试)}//1.查库存int stockNum stock.get(productId);if(stocknum 0){throw new SellException(ProductStatusEnum.STOCK_EMPTY);//这里抛出的异常要是运行时异常否则无法进行数据回滚这也是spring中比较基础的 }else{//2.下单orders.put(KeyUtil.genUniqueKey(),productId);//生成随机用户id模拟高并发sotckNum stockNum-1;try{Thread.sleep(100);} catch (InterruptedExcption e){e.printStackTrace();}stock.put(productId,stockNum);}redisLock.unlock(productId,String.valueOf(time)); } 大功告成了比synchronized快了不知道多少倍再也不会被老板骂了! 转载于:https://www.cnblogs.com/duende99/p/11553745.html
http://www.huolong8.cn/news/418638/

相关文章:

  • 凡科网站网站建设进不去十个实用网站网址
  • app网站公司名称学做美食交流网站有哪些
  • 织梦行业网站模板wordpress升级主题总是失败
  • 网站建设会出现哪些问题网页设计与制作论文6000
  • 优秀学校网站模板网址缩短在线生成app
  • 深圳网站制作公司资讯企业系统软件排行
  • 小网站开发用哪些技术机械加工网站模板
  • 酒泉网站建设有限公司维护一个网站一年多少钱
  • 优秀自适应网站建设哪家好网站建设领导小组
  • 网站读取速度慢北京专业制作网站的公司
  • 网站建设石家庄wordpress反应慢
  • 合肥网站设计建世安建设有限网站
  • 唐山网站开发设计方案怎么写
  • icp备案网站建设方案书产品推广软文200字
  • 怎样在网站做链接wordpress反广告屏蔽
  • 专门做素菜的网站泉州那几个公司网站建设比较好
  • 做公司网站要多少钱做海淘的网站做海淘的网站有哪些
  • 辽宁省网站建设wordpress后台侧栏
  • python可以做网站开发吗wordpress价格
  • 黄页网站软件下载免费app友情链接英文
  • 昆山城市建设投资有限公司网站WordPress文章数据转emlog
  • 网页设计与网站建设期末考试试卷上海网站建设企业
  • 制作网站要求wordpress多站点 文章导入
  • 做地方门户网站的资质卡盟网站怎么做图片
  • 在线音乐制作网站国家住房与城乡建设部网站
  • 深圳外包网站制作公司网上打字兼职正规网站
  • 网页设计素材螺蛳粉图网络优化2年工资有多少
  • 南海佛山网站建设全屋设计效果图
  • wordpress旅游类网站模板挂机宝可以做网站
  • 机械加工类网站怎么做黄山旅游最佳路线安排