首页 > 数据库 >Redis在springboot的应用场景

Redis在springboot的应用场景

时间:2023-03-23 18:12:54浏览次数:45  
标签:场景 20 springboot Redis qty letter append

场景一:出入库存量——分布锁

  1.  锁是共享的
  2. Callable回调返回结果会抛出异常。Runable不会抛出异常
  3. k打进去==能获取到锁
  4. 自定义线程
  5. mysql并发超过2000就会跟慢,要把压力传给给Redis。这样的场景有秒杀、

 

场景二:秒杀

         lua脚本是将string转换成二进制。转换成二进制之前,数字要先强转成数字;且使用多行lua脚本使用stringBuilder()方法;双引号加空号,符号加空格;否则两个单词会默认成一个,识别不了

 1 @SpringBootTest
 2 public class DockerTest {
 3     @Resource(name="redisTemplate")
 4     private ValueOperations<String,Integer> valueOperations;
 5     @Autowired
 6     private StringRedisTemplate stringRedisTemplate;
 7     @Test //初始化 Redis库存量
 8     void test() throws IOException {
 9         valueOperations.set("producthh",20);
10     }
11 
12     @Test
13     void Test111() throws IOException {
14         ExecutorService executorService = Executors.newCachedThreadPool();
15         StringBuilder letter = new StringBuilder();
16         letter.append(" local qty1 = redis.call('get',KEYS[1]) ");
17         letter.append(" local qty2 = ARGV[1] ");
18         letter.append(" if (tonumber(qty1) >= tonumber(qty2)) ");
19         letter.append(" then   ");
20         letter.append("  redis.call('decrby',KEYS[1],qty2) ");
21         letter.append(" return -1 ");
22         letter.append(" else ");
23         letter.append(" return  tonumber(qty1) ");
24         letter.append(" end ");
25         RedisScript<Long> script = RedisScript.of(letter.toString(), Long.class);
26         for (int i = 1; i < 10; i++) {
27             int finalI = i;
28             executorService.execute(() -> {
29                 int qty = RandomUtil.randomInt(1, 20);
30                 Long ret = stringRedisTemplate.execute(script, CollUtil.newArrayList(key), String.valueOf(qty));
31                 if (ret == -1) {
32                     System.out.println(finalI + "扣减成功->" + qty);
33                 } else {
34                     System.out.println("失败,需要:" + qty + " 剩余库存:" + ret);
35                 }
36             });
37 
38 
39         }
40 
41         ThreadUtil.safeSleep(10000);
42 
43 
44     }
45 
46 }

 

标签:场景,20,springboot,Redis,qty,letter,append
From: https://www.cnblogs.com/liang9479/p/17226975.html

相关文章

  • redis面试题
    redis面试题1.什么是Redis?Redis(RemoteDictionaryServer)是一个使用C语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。2.Redis有哪些优缺点优......
  • SpringBoot整合第三方技术
    整合JUnit名称:@SpringBootTest类型:测试类注解位置:测试类定义上方作用:设置JUnit加载的SpringBoot启动类范例:@SpringBootTest(classes=Springboot07JunitApplication.cl......
  • Web请求与响应(SpringBoot)
    Web请求与响应 Web的工作原理可以分为以下几个步骤:输入URL:Web客户端使用Web浏览器输入所需访问的URL(统一资源定位符)。建立连接:Web浏览器与Web服务器之间建立TCP/......
  • SpringBoot详解
    一、介绍1.SpringBoot是一个基于Spring框架的开源框架,用于构建微服务和Web应用程序。它可以帮助开发者轻松创建独立的、基于Spring的应用程序,并在较短的时间内完......
  • SpringBoot接收参数的七种方式
    1、直接把请求参数写在Controller相应的方法的形参中,此场景适用于请求参数较少的情况/** *1.直接把请求参数写在Controller相......
  • redis
     10.0.1使用Redis有哪些好处?参考答案:(1)速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)(2)支持丰富数据类型,支持st......
  • Springboot 系列 (24) - Springboot+HBase 大数据存储(二)| 安装配置 Apache HBase 和 A
    ApacheHBase是Java语言编写的一款Apache开源的NoSQL型数据库,不支持SQL,不支持事务,不支持Join操作,没有表关系。ApacheHBase构建在ApacheHadoop和ApacheZoo......
  • python redis keepalive 保活
     https://dxian.github.io/2016/07/21/python-redis-subscribe-tcp-keepalive/ https://github.com/opennumber/opennumber/blob/bab590c29ab227bbcf1c301cf454c0e668......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-从0到1快速入门翻译编程语言应用——官网推荐
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载......
  • SpringBoot开启定时任务
    SpringTaskSpring系列框架中SpringFramework自带的定时任务,使用上面两种方式,很难实现某些特定需求,比如每周一执行某任务,但SpringTask可轻松实现。以SpringBoot为例来......