當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot+Redis(实现处理热点数据)
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot+Redis(实现处理热点数据)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、什么是熱點數據
在很短的時間內,許多數據要被多次查詢(像雙十一購物,查詢商品)
二、為什么要使用redis
redis是非關系型數據庫,Redis將數據存儲在內存上,避免了頻繁的IO操作
三、場景
短時間內有大量的請求來獲取用戶列表的數據,每次都需要從數據庫進行查詢。
處理熱點數據的基本思路:用戶首次訪問從數據庫中取值,之后每次進行判斷只要redis中有數據,就從redis中取值,其中涉及到多線程訪問造成的內存穿透問題,采用雙重檢查的形式解決。
package com.abbey.myblog.service;import com.abbey.myblog.mapper.UserMapper; import com.abbey.myblog.entity.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.stereotype.Service;/*** @author lianying* @create 2020-11-21 9:02 下午**/@Service public class UserService {@Autowiredprivate RedisTemplate<Object, Object> redisTemplate;@Autowiredprivate StringRedisTemplate stringRedisTemplate;@AutowiredUserMapper userMapper;public String Sel(int id){String user = stringRedisTemplate.opsForValue().get(""+id);// 防止首次訪問該接口有大量用戶,造成內存穿透,使redis沒有效果if(null == user){synchronized (this){if(null == user){System.out.println("從mysql中查詢數據中。。。。。。");// 從數據庫中查詢數據user = userMapper.Sel(id).toString();System.err.println(user);// 放入redisstringRedisTemplate.opsForValue().set(""+id,user);}}}else{System.out.println("從redis中查詢數據中。。。。。。");}return user;} }項目源碼地址:https://github.com/Barry-Manilow/myblog
總結
以上是生活随笔為你收集整理的SpringBoot+Redis(实现处理热点数据)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot连接Redis超简单
- 下一篇: Spring框架—基础介绍