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

电脑在哪网站接做扇子单品牌seo主要做什么

电脑在哪网站接做扇子单,品牌seo主要做什么,建筑专业培训有哪些内容,中国菲律宾撤侨最新消息文章要点 自定义配置属性类集成配置RedisTemplate集成配置分布式锁Redisson使用分布式锁简单实现超卖方案 1. 项目结构 2. 集成RedisTemplate和Redisson 添加依赖 依赖的版本与继承的spring-boot-starter-parent工程相对应&#xff0c;可写可不写 <!--spring data redis…

文章要点

  • 自定义配置属性类
  • 集成配置RedisTemplate
  • 集成配置分布式锁Redisson
  • 使用分布式锁简单实现超卖方案

1. 项目结构

在这里插入图片描述

2. 集成RedisTemplate和Redisson

添加依赖
依赖的版本与继承的spring-boot-starter-parent工程相对应,可写可不写

<!--spring data redis & cache--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- redis依赖commons-pool 这个依赖一定要添加 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency><!--redisson--><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.15.6</version></dependency><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency>

大概图解

在这里插入图片描述如上图,先配置application.yml设置Redis的各项属性包括ip,端口,密码。再注入。

server:port: 8080# Redis配置
spring:redis:host: 192.168.200.131port: 6379password: root
// RedisConfigProperties.java
@Data
@ConfigurationProperties(prefix = "spring.redis")
public class RedisConfigProperties {private String host;private int port;private String password;
}// RedisTemplateConfig.java
@Configuration
public class RedisTemplateConfig {@AutowiredRedisConfigProperties redisConfigProperties;@Beanpublic RedisConnectionFactory redisConnectionFactory() {RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(redisConfigProperties.getHost(), redisConfigProperties.getPort());config.setPassword(redisConfigProperties.getPassword());return new LettuceConnectionFactory(config);}@Beanpublic RedisTemplate<String, Object> redisTemplate(){RedisTemplate<String,Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory());// 设置序列化器等其他配置return template;}
}// RedissonConfig.java
@Configuration
@EnableConfigurationProperties({RedisConfigProperties.class})
public class RedissonConfig {@AutowiredRedisConfigProperties redisConfigProperties;@Beanpublic RedissonClient redissonClient(){// 1. 创建配置文件Config config = new Config();// 2. 设置单节点服务器配置config.useSingleServer().setAddress("redis://"+redisConfigProperties.getHost()+":"+redisConfigProperties.getPort());// 3. 如果Redis设置了密码,这里需要设置密码config.useSingleServer().setPassword(redisConfigProperties.getPassword());// 4. 创建RedissonClient实例RedissonClient redisson = Redisson.create(config);return redisson;}
}

到这里,RedisTemplate和Redisson就已经集成好了,后续使用只需要注入就行。
例如

@RestController
@RequestMapping(value = "/order")
public class OrderController {@Autowired//private RedisTemplate redisTemplate;private StringRedisTemplate redisTemplate; //通常用这个StringRedisTemplate@Autowiredprivate RedissonClient redissonClient;......
}

3. 模拟分布式场景下超卖现象

OrderController

	/**** 抢单*/@GetMapping(value = "/v1/{id}/{num}")public String addv1(@PathVariable(value = "id")String id,@PathVariable("num")Long num) throws InterruptedException {// 1.查询库存int count = Integer.valueOf(redisTemplate.opsForValue().get(id));System.out.println("剩余库存:"+count);// 2.库存充足if (count>=num){//模拟操作TimeUnit.SECONDS.sleep(5);//递减库存Long decrement = redisTemplate.opsForValue().decrement(id, num);System.out.println("递减库存后剩余库存:"+decrement);//其它操作 略System.out.println("----添加订单了!");return "下单成功";}//库存不足else {return "库存不足";}}

复制一个端口为8081的配置,模拟分布式服务

在这里插入图片描述
启动两个服务
在这里插入图片描述
在Redis中设置一个键值对water:2,模拟水的库存为2.
在这里插入图片描述浏览器同时发送2个请求,模拟有2个用户同时每人买2瓶水
http://127.0.0.1:8080/order/v1/water/2
http://127.0.0.1:8081/order/v1/water/2
在这里插入图片描述

出现超卖现象

4. 利用Redisson分布式锁,防止超卖

关键代码

RLock lock = redissonClient.getLock("mylock_" + id);
lock.lock();   //自旋获取锁
...
...
lock.unlock();

首先记得set water 2

OrderController

	/**** 抢单,使用分布式锁*/@GetMapping(value = "/{id}/{num}")public String add(@PathVariable(value = "id")String id,@PathVariable("num")Long num) throws InterruptedException {//对该商品加锁,加锁成功,则判断库存,避免多人同时判断某一个商品的库存RLock lock = redissonClient.getLock("mylock_" + id);lock.lock();   //自旋获取锁System.out.println("获取了锁!"+lock.getName());try {// 1.查询库存int count = Integer.valueOf(redisTemplate.opsForValue().get(id));System.out.println("剩余库存:"+count);// 2.库存充足if (count>=num){//模拟操作TimeUnit.SECONDS.sleep(5);//递减库存Long decrement = redisTemplate.opsForValue().decrement(id, num);System.out.println("递减库存后剩余库存:"+decrement);//其它操作 略System.out.println("----添加订单了!");return "下单成功";}//库存不足else {return "库存不足";}} finally {//释放锁System.out.println("释放了锁!"+lock.getName());lock.unlock();}}

启动2个服务,浏览器同时发送2个请求
http://127.0.0.1:8080/order/water/2
http://127.0.0.1:8081/order/water/2
在这里插入图片描述
防止了超卖现象

http://www.15wanjia.com/news/35501.html

相关文章:

  • 网站域名重定向有什么平台可以推广
  • 新疆交通建设管理局项目执行一处网站百度账号官网
  • 如何更改asp网站自定义产品顺序广州抖音seo
  • 武汉高端网站制作公司seo网络优化招聘信息
  • javaweb做新闻网站搜索引擎优化的方法有哪些
  • 建设一个公司网站需要什么条件关键词代发排名首页
  • 成都公司做网站多少钱新媒体运营怎么自学
  • 红页网站如何做短视频seo询盘系统
  • 企业网站建设方案论文泉州百度开户
  • 儿童网站建设外文翻译网络销售这个工作到底怎么样
  • 企业网站建设方案及报价公司建设网站哪家好
  • 佛山h5建站模板网络营销百度百科
  • 老年门户网站建设的意义今日新闻网
  • 外贸型网站免费推广有哪些
  • 武汉专业网站建设域名注册需要多少钱?
  • 独立网站优化广告网站快速有排名
  • 在大网站做网页广告需要多少钱如何做网站营销
  • 桂林旅游网站制作公司动态网站的制作与设计
  • asp网站怎么做404页面跳转seo优化一般包括哪些
  • 陕西网站建设推广公司做个网站
  • 域名申请到网站建设教程南宁网站建设公司
  • 乌克兰设计网站建设百度接单平台
  • 深圳燃气公司招聘新乡搜索引擎优化
  • 网站建设营销话术职业技能培训学校
  • 青海网站建设设计南通关键词优化平台
  • 网站设计公司南京我要推广网
  • 平度网站建设google中文搜索引擎
  • 江苏seo推广网站建设产品全网营销推广
  • 网站设计需要那些模块网站seo关键词
  • 用什么开发和建设网站最好网络营销服务企业有哪些