日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

springboot中redis的緩存穿透問題實(shí)現(xiàn)

瀏覽:19日期:2023-03-25 17:00:02
什么是緩存穿透問題??

我們使用redis是為了減少數(shù)據(jù)庫的壓力,讓盡量多的請(qǐng)求去承壓能力比較大的redis,而不是數(shù)據(jù)庫。但是高并發(fā)條件下,可能會(huì)在redis還沒有緩存的時(shí)候,大量的請(qǐng)求同時(shí)進(jìn)入,導(dǎo)致一大批的請(qǐng)求直奔數(shù)據(jù)庫,而不會(huì)經(jīng)過redis。使用代碼模擬緩存穿透問題如下:

首先是service里面的代碼:

@Servicepublic class NewsService { @Autowired private NewsDAO newsDAO; //springboot自動(dòng)初始化,不需要我們進(jìn)行配置,直接注入到代碼中使用 @Autowired private RedisTemplate<Object,Object> redisTemplate; public /*synchronized*/ List<News> getLatestNews(int userId,int offset,int limit){ //設(shè)置序列化方式,防止亂碼 redisTemplate.setKeySerializer(new StringRedisSerializer()); //第一步:查詢緩存 News news= (News) redisTemplate.opsForValue().get('newsKey'); //判斷是否存在緩存 if(null == news){//查詢數(shù)據(jù)庫news = newsDAO.selectByUserIdAndOffset(userId,offset,limit).get(0);//redisTemplate.opsForValue().set('newsKey',news);System.out.println('進(jìn)入數(shù)據(jù)庫。。。。。。。。'); }else{ System.out.println('進(jìn)入緩存。。。。。。。。。'); } return newsDAO.selectByUserIdAndOffset(userId,offset,limit); }}

然后是使用線程池在Controller里面對(duì)請(qǐng)求進(jìn)行模擬:

@Controllerpublic class HomeController { @Autowired UserService userService; @Autowired NewsService newsService; //遇到的坑,如果不加method,頁面啟動(dòng)不起來。 @RequestMapping(value = '/home',method = {RequestMethod.GET, RequestMethod.POST}) @ResponseBody public String index(Model model){ //這邊是可以讀出數(shù)據(jù)來的 //線程池------緩存穿透問題的復(fù)現(xiàn) ExecutorService executorService = Executors.newFixedThreadPool(8*2); for(int i = 0;i < 50000;i++){ executorService.submit(new Runnable() {@Overridepublic void run() { List<News> newsList = newsService.getLatestNews(0,0,10);} }); } List<News> newsList = newsService.getLatestNews(0,0,10); News news=newsList.get(0); return news.getImage(); }}

結(jié)果如圖:大量的請(qǐng)求進(jìn)入數(shù)據(jù)庫,那么如何解決這個(gè)問題?

springboot中redis的緩存穿透問題實(shí)現(xiàn)

方法一、在方法上加鎖:

@Servicepublic class NewsService { @Autowired private NewsDAO newsDAO; //springboot自動(dòng)初始化,不需要我們進(jìn)行配置,直接注入到代碼中使用 @Autowired private RedisTemplate<Object,Object> redisTemplate; //第一種方式:方法加鎖 public synchronized List<News> getLatestNews(int userId,int offset,int limit){ //設(shè)置序列化方式,防止亂碼 redisTemplate.setKeySerializer(new StringRedisSerializer()); //第一步:查詢緩存 News news= (News) redisTemplate.opsForValue().get('newsKey'); //判斷是否存在緩存 if(null == news){//查詢數(shù)據(jù)庫news = newsDAO.selectByUserIdAndOffset(userId,offset,limit).get(0);//redisTemplate.opsForValue().set('newsKey',news);System.out.println('進(jìn)入數(shù)據(jù)庫。。。。。。。。'); }else{ System.out.println('進(jìn)入緩存。。。。。。。。。'); } return newsDAO.selectByUserIdAndOffset(userId,offset,limit); }}

直接在方法上加鎖,保證每次只有一個(gè)請(qǐng)求可以進(jìn)入。但是這個(gè)方法存在一個(gè)缺陷,每次只有一個(gè)請(qǐng)求可以進(jìn)入,請(qǐng)求處理的速度變得相當(dāng)?shù)穆?,不利于系統(tǒng)的實(shí)時(shí)性。

方法二、使用雙重校驗(yàn)鎖:

@Servicepublic class NewsService { @Autowired private NewsDAO newsDAO; //springboot自動(dòng)初始化,不需要我們進(jìn)行配置,直接注入到代碼中使用 @Autowired private RedisTemplate<Object,Object> redisTemplate; //第一種方式:方法加鎖 public /*synchronized*/ List<News> getLatestNews(int userId,int offset,int limit){ //設(shè)置序列化方式,防止亂碼 redisTemplate.setKeySerializer(new StringRedisSerializer()); //第一步:查詢緩存 News news= (News) redisTemplate.opsForValue().get('newsKey'); //判斷是否存在緩存 if(null == news){ //第二種方式:雙重檢測(cè)鎖 synchronized (this){//查詢數(shù)據(jù)庫news = newsDAO.selectByUserIdAndOffset(userId,offset,limit).get(0);//redisTemplate.opsForValue().set('newsKey',news);System.out.println('進(jìn)入數(shù)據(jù)庫。。。。。。。。'); } }else{ System.out.println('進(jìn)入緩存。。。。。。。。。'); } return newsDAO.selectByUserIdAndOffset(userId,offset,limit); }}

這個(gè)方法比較好,雖然不能保證只有一個(gè)請(qǐng)求請(qǐng)求數(shù)據(jù)庫,但是當(dāng)?shù)谝慌?qǐng)求進(jìn)來,第二批之后的所有請(qǐng)求全部會(huì)在緩存取數(shù)據(jù)。

到此這篇關(guān)于springboot中redis的緩存穿透問題實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)springboot redis緩存穿透內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久亚洲欧美| 日韩和欧美的一区| 麻豆成人在线观看| 美女久久久久久| 91精品国产自产观看在线 | 精品国产黄a∨片高清在线| 久久国产欧美日韩精品| 欧美日韩一区二区三区四区在线观看 | 久久只有精品| 久久精品国产精品亚洲毛片| 精品午夜视频| 中文字幕在线看片| 日韩av一级| 国产综合视频| 在线亚洲一区| 日韩精品1区2区3区| 日韩中文av| 久久不卡国产精品一区二区| 精品午夜av| 欧美影院三区| 蜜臀精品一区二区三区在线观看| 日本国产欧美| 精品视频自拍| 国产中文一区| 亚洲欧洲免费| 欧美国产极品| 亚洲视频综合| 日韩精品一区二区三区中文在线| 国产精品流白浆在线观看| 福利一区视频| 亚洲激情偷拍| 国产婷婷精品| 欧美在线首页| 亚洲精品88| 蜜臀av在线播放一区二区三区| 欧美亚洲自偷自偷| 黑森林国产精品av| 一区三区视频| 国产精品中文| 99久久精品费精品国产| 中文字幕视频精品一区二区三区| 国产精品一区二区美女视频免费看 | 亚洲日本免费电影| 久久精品国产精品亚洲毛片| 成人羞羞视频在线看网址| 另类亚洲自拍| 免费亚洲婷婷| 欧美日韩国产亚洲一区| 欧美日韩午夜| 精品欧美久久| 国产精品白丝一区二区三区| 久久精品国语| 欧美日本一区| 99久久99久久精品国产片果冰| 日韩精品久久久久久| 麻豆理论在线观看| 亚洲精品激情| 日韩av福利| 日韩区欧美区| 日韩1区在线| 一区二区亚洲视频| 水蜜桃精品av一区二区| 国产精品人人爽人人做我的可爱| 国产精品2023| 天堂av在线一区| 国产精品二区不卡| 日韩不卡免费视频| 亚洲小说欧美另类婷婷| 国产女人18毛片水真多18精品| 亚洲午夜电影| 国产精品www.| 亚洲一区二区毛片| 91综合网人人| 日本午夜精品久久久久| 热三久草你在线| 日韩福利视频导航| 欧美日韩国产一区精品一区| 国产不卡精品| 欧美色综合网| 亚洲一区二区三区高清不卡| 三级小说欧洲区亚洲区| 里番精品3d一二三区| 亚洲有吗中文字幕| 亚洲精品1区| 成人久久一区| 成人国产综合| 国产精品一线| 综合国产视频| 亚洲精品一二三区区别| 精品九九在线| 国产欧美日韩一区二区三区四区| 免费人成网站在线观看欧美高清| 91精品国产91久久久久久黑人| 国产精品久久久久av蜜臀| 综合亚洲色图| 亚洲少妇一区| 蜜桃成人av| 日本免费久久| 精品久久精品| 麻豆一区二区在线| 欧美日韩亚洲一区二区三区在线| 免费精品视频最新在线| 午夜久久黄色| 欧美jjzz| 久久国产免费| 九色porny丨国产首页在线| 加勒比视频一区| 欧美a级一区二区| 91精品福利观看| 日韩国产一区二| 亚洲综合五月| 亚洲一二三区视频| 亚洲精品自拍| 无码日韩精品一区二区免费| 免费观看在线色综合| 亚洲永久字幕| 亚洲综合欧美| 蜜臀av一区二区在线免费观看| 日韩影院免费视频| 日韩一级欧洲| 激情婷婷欧美| 国产精品av一区二区| 欧美不卡高清| 国产视频一区三区| 综合色一区二区| 人人精品久久| 免费在线亚洲| 欧美好骚综合网| caoporn视频在线| 天堂8中文在线最新版在线| 国产日韩电影| 国产91久久精品一区二区| 激情五月色综合国产精品| 99国产精品99久久久久久粉嫩| 久久久久国产精品一区三寸| 久久久久国产| 伊人久久亚洲影院| 蜜臀av在线播放一区二区三区| 日韩欧乱色一区二区三区在线| 97久久精品| 久久av日韩| 久草免费在线视频| 久久国产电影| 亚洲一区二区成人| 婷婷综合电影| 国产九一精品| 成人精品久久| 国产主播一区| 婷婷成人av| 日韩精品视频在线看| 欧美日韩一区二区国产| 久久免费影院| 国产在线欧美| 亚洲最大av| 国产精品大片| 久久免费黄色| 亚洲激情二区| 欧美三级第一页| 久久中文在线| 欧美一区二区三区高清视频| 久久都是精品| 国产乱码精品一区二区亚洲| 国产h片在线观看| 黄色av日韩| 97久久亚洲| 国产中文在线播放| 久久国产精品亚洲77777| 国产精品亚洲欧美日韩一区在线| 四季av一区二区凹凸精品| 九九综合在线| 国产日韩一区二区三区在线| 91综合视频| 蜜桃一区二区三区在线| 国产精品久久久久久妇女 | 欧美在线网站| 欧美精品中文字幕亚洲专区| 亚洲精品在线影院| 中文视频一区| 久久影视三级福利片| 免费毛片在线不卡| 国产精品自在| 一区二区自拍| 久久久免费人体| 亚洲欧美一区在线| 免费一级欧美在线观看视频| 国产尤物精品| 美女精品久久| 91久久亚洲| 免费看一区二区三区| 欧美日韩视频| 精品一区二区三区视频在线播放| 九九在线精品| 麻豆一区二区在线| 丝袜国产日韩另类美女| 国产精品99一区二区三区| 亚洲精品日本| 久久一区二区三区电影| 国产精品久久久久久模特| 午夜一级久久| 伊人久久视频|