随笔 - 115  文章 - 0  评论 - 0  阅读 - 40316

Java面试题 P17:Redis篇:Redis使用场景-缓存-缓存击穿

什么是缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把数据库压垮。

 

 

互斥锁代码:

复制代码
 1 package com.atguigu.boot00testredis.controller;
 2 
 3 import com.atguigu.boot00testredis.utils.RedisUtil;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.web.bind.annotation.GetMapping;
 6 import org.springframework.web.bind.annotation.PathVariable;
 7 import org.springframework.web.bind.annotation.RequestMapping;
 8 import org.springframework.web.bind.annotation.RestController;
 9 
10 import java.util.concurrent.locks.Lock;
11 import java.util.concurrent.locks.ReadWriteLock;
12 import java.util.concurrent.locks.ReentrantReadWriteLock;
13 
14 @RestController
15 @RequestMapping("/hello")
16 public class HelloController
17 {
18     /**
19      * 注入redis工具
20      */
21     @Autowired
22     private RedisUtil redisUtil;
23 
24     private final ReadWriteLock readWriteLock=new ReentrantReadWriteLock();
25     //写锁
26     private final Lock writeLock=readWriteLock.writeLock();
27 
28     @GetMapping("/hi/{name}")
29     public String hi(@PathVariable("name") String name)
30     {
31         System.out.println("name="+name);
32 
33         if(redisUtil.get(name)!=null)
34         {
35             return redisUtil.get(name).toString();
36         }
37         else {
38             //加锁
39             writeLock.lock();
40             System.out.println("readLock.......");
41             try{
42                 Thread.sleep(20*1000);
43                 redisUtil.set(name,"My name is "+name+"!",60);
44                 return redisUtil.get(name).toString();
45             }
46             catch (Exception e)
47             {
48                 return null;
49             }
50             finally {
51                 //开锁
52                 writeLock.unlock();
53             }
54         }
55     }
56 }
复制代码

 

posted on   wuzx-blog  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示