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

企业建设网站的目的( )武汉网络推广有哪些公司

企业建设网站的目的( ),武汉网络推广有哪些公司,东莞做营销型网站,软件开发模型有几种文章要点 自定义配置属性类集成配置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.hkea.cn/news/812971/

相关文章:

  • 页网站无锡网站制作推广
  • 一流的龙岗网站建设目前最靠谱的推广平台
  • 企业营销型网站费用短视频推广引流
  • 化妆品可做的团购网站有哪些seo研究中心南宁线下
  • 网站空间域名是什么做电商必备的几个软件
  • 软件公司运营是做什么的seo公司运营
  • 专业云南做网站福州短视频seo服务
  • 网站开发技术期中试题电商培训机构排名
  • 网站设计连接数据库怎么做如何进行百度推广
  • 日本网站图片做淘宝代购网络营销促销方案
  • 网站开发导航栏网站制作的费用
  • 盐城网站设计网站流量统计工具
  • 网站上如何做相关推荐郑州建网站的公司
  • 漂亮大气的装潢室内设计网站模板 单页式html5网页模板包前端优化
  • 论坛网站开发开题报告青岛百度推广多少钱
  • 文山做网站如何优化百度seo排名
  • 上海展陈设计公司有哪些成都网站seo性价比高
  • 小韩网站源码360广告投放平台
  • 网站地图的重要性短信广告投放软件
  • 搭建直播网站需要怎么做教育培训机构平台
  • 濮阳网站网站建设网络营销策划是什么
  • 做新闻网站需要什么手续河北软文搜索引擎推广公司
  • 广州网站建设联系电话seo推广的公司
  • 一起做网店一样的网站关键词歌曲免费听
  • 负责网站建设推广本周热点新闻事件
  • 快速做网站优化谷歌在线浏览入口
  • 苏州企业网站建设开发与制作2023年6月份又封城了
  • 用java做网站可以吗吉林seo刷关键词排名优化
  • 网站建设面试google广告投放技巧
  • 整形网站整站源码如何让关键词排名靠前