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

找人做网站需要什么条件汉中网络推广

找人做网站需要什么条件,汉中网络推广,网上做网站赚钱,怎么做超链接网站目录 一、基于 Redis 演示超卖现象 1.1 Redis 超卖现象 1.2 超卖现象解决方案 二、Redis 的乐观锁机制 2.1 原生客户端演示 2.2 业务代码实现 三、单机部署 Redis 实现分布式锁 3.1 分布式锁的演变和升级 3.2 setnx 实现分布式锁 3.2.1 递归调用实现分布式锁 3.2.2 循…

目录

一、基于 Redis 演示超卖现象

1.1 Redis 超卖现象

1.2 超卖现象解决方案

二、Redis 的乐观锁机制

2.1 原生客户端演示

2.2 业务代码实现

三、单机部署 Redis 实现分布式锁

3.1 分布式锁的演变和升级

3.2 setnx 实现分布式锁

3.2.1 递归调用实现分布式锁

3.2.2 循环实现分布式锁(避免栈溢出)

3.3 set nx ex/px

3.3.1 锁设置过期时间

3.3.2 Lua 脚本解决锁误删问题

3.4 set nx ex/px+Lua(解决锁重入和锁续期)

3.4.1 可重入锁实现的分析

3.4.2 分布式锁工厂实现

3.4.3 Redis 分布式锁实现类


一、基于 Redis 演示超卖现象

1.1 Redis 超卖现象

1. 编写业务逻辑实现

@Autowired
private StringRedisTemplate stringRedisTemplate;public void deduct(){//1.查询库存信息String stock = stringRedisTemplate.opsForValue().get("stock");//2.判断库存是否充足if(stock != null && stock.length() > 0){Integer st = Integer.valueOf(stock);if(st>0){//3.扣减库存stringRedisTemplate.opsForValue().set("stock",String.valueOf(st-1));}}
}

2. 通过 JMeter 进行并发压力测试

3. 查看 Redis 请求后实际的商品库存数量:发生超卖现象

1.2 超卖现象解决方案

  1. JVM 本地锁机制:本地锁可以解决一个资源内部的并发资源的问题

  2. Redis 提供的乐观锁机制(性能较低):watch multi exec

    1. watch:可以监控一个或多个 key 的值,如果在事务执行之前,key 的值发生变化,则取消事务的执行

    2. multi:开启事务

    3. exec:执行事务

  3. 分布式锁:分布式锁可以实现跨进程跨服务器的使用

    1. 基于 Redis 实现:setnx

    2. 基于 Zookeeper/etcd 实现

    3. 基于 MySQL 实现


二、Redis 的乐观锁机制

2.1 原生客户端演示

Redis中的WATCH命令用于实现乐观锁机制。它可以监视一个或多个键,在事务执行前,如果这些被监视的键没有被其他客户端修改,事务可以正常执行;但只要有一个被监视的键在事务执行前被修改了,事务在执行EXEC时就会失败,从而让应用程序可以重新尝试事务或者采取其他处理逻辑,以保证在高并发场景下数据的一致性。

在执行WATCH stock之后,stock键的值被客户端2修改了。WATCH命令会监视指定的键,当在事务执行前(从WATCH命令执行到EXEC命令执行之间),被监视的键发生了变化,那么事务在执行EXEC时就会失败,以保证数据的一致性和避免并发问题。

2.2 业务代码实现

public void deduct(){stringRedisTemplate.execute(new SessionCallback<Object>() {@Overridepublic Object execute(RedisOperations operations) throws DataAccessException {//1.查询库存信息operations.watch("stock");String stock = operations.opsForValue().get("stock").toString();//2.判断库存是否充足if(stock != null && stock.length() != 0){Integer st = Integer.valueOf(stock);if(st>0){//3.扣减库存operations.multi();operations.opsForValue().set("stock",String.valueOf(--st));List exec = operations.exec();if(exec == null || exec.size()==0){//重试操作deduct();}return exec;}}return null;};});}

运行 JMeter 进行并发测试:吞吐量只有104请求/秒:(性能太差)

查看 Redis 商品库存数量:


三、单机部署 Redis 实现分布式锁

3.1 分布式锁的演变和升级

Redis 实现分布式锁的演变和升级:

  1. setnx:set if Not eXists -> setnx key value -> 问题:因为没有设置过期时间,所以可能存在死锁的问题(执行一半程序崩溃,后面的释放锁流程没有执行)。

  2. set nx ex/px:Redis 2.6+ set key value

http://www.dtcms.com/wzjs/421585.html

相关文章:

  • 网站建设公司苏州网络推广产品要给多少钱
  • 网站建设交接协议书网站推广有哪些方式
  • 企业网站免费制作网络营销与直播电商专业
  • 天津市城乡建设部网站首页腾讯域名
  • 建设部职称证书查询官方网站海外推广渠道都有哪些
  • wordpress外链图片插件小程序seo
  • 建盏大师排名与落款网站关键词优化公司哪家好
  • 衣服商业网站建设策划书泉州seo排名扣费
  • 如何选择丹徒网站建设今日时政新闻热点
  • 通化建设工程信息网站网站开发的公司
  • 郑州网站建设中国建设建设银行深圳网络营销推广服务
  • 惠州网站建设 惠州邦百度投放广告流程
  • 如何做网站站内搜索代码网上营销新观察网
  • 深圳俄语网站建设网络营销实施方案
  • 怎做连接网站合肥网站推广
  • 网站建设平台协议书站长工具手机综合查询
  • 深圳网站建设门户上海百度搜索优化
  • 贵州公明建设投资咨询有限公司官方网站厦门百度竞价开户
  • 网站大图怎么做更吸引客户单页站好做seo吗
  • 那些网站容易做淘宝推广百度免费下载安装百度
  • 国际营销网站建设网站综合查询工具
  • 西宁企业做网站优秀软文营销案例
  • 网站建设公司发展规划国外独立网站如何建站
  • 湛江模板建站哪家好如何自己弄个免费网站
  • 自己网站做短链接百度搜索
  • 下载好了网站模板怎么开始做网站百度推广销售话术
  • 推广网站怎么做能增加咨询推广和竞价代运营
  • 上海装饰公司排名百强网站优化提升排名
  • 网站制作优势网站推广线上推广
  • 400电话单页网站seo云优化软件