Redis(案例二:高并发商品首页热点数据开发实战)
生活随笔
收集整理的這篇文章主要介紹了
Redis(案例二:高并发商品首页热点数据开发实战)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
熱點數(shù)據(jù)
經(jīng)常會被查詢,但是不經(jīng)常被修改或者刪除的數(shù)據(jù)
??-詳情?
鏈路邏輯
檢查緩存是否有
緩存不存在則查詢數(shù)據(jù)庫
查詢結(jié)果放到緩存,設(shè)置過期時間
下次訪問則命中緩存
代碼實現(xiàn)
pojo —熱點視頻
@Data @NoArgsConstructor @AllArgsConstructor public class VideoDO {private int id;private String title;private String img;private int price;pojo —熱點卡片
@Data import java.util.List;public class VideoCardDO {private String title;private int id;private int weight;List<VideoDO> list;dao —模擬數(shù)據(jù)
import net.xdclass.xdclassredis.model.VideoCardDO; import net.xdclass.xdclassredis.model.VideoDO; import org.springframework.stereotype.Repository;import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit;@Repository public class VideoCardDao {public List<VideoCardDO> list(){try {TimeUnit.MILLISECONDS.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}List<VideoCardDO> cardDOList = new ArrayList<>();VideoCardDO videoCardDO = new VideoCardDO();videoCardDO.setId(1);videoCardDO.setTitle("熱門視頻");VideoDO videoDO1 = new VideoDO(1,"springcloud微服務(wù)視頻","xdclass.net",43);VideoDO videoDO2 = new VideoDO(2,"Paas工業(yè)級項目實戰(zhàn)","xdclass.net",32);VideoDO videoDO3 = new VideoDO(3,"面試專題視頻","xdclass.net",43);VideoDO videoDO4 = new VideoDO(4,"spring源碼實戰(zhàn)","xdclass.net",4);List<VideoDO> videoDOS = new ArrayList<>();videoDOS.add(videoDO1);videoDOS.add(videoDO2);videoDOS.add(videoDO3);videoDOS.add(videoDO4);videoCardDO.setList(videoDOS);VideoCardDO videoCardDO2 = new VideoCardDO();videoCardDO2.setId(2);videoCardDO2.setTitle("項目實戰(zhàn)視頻");VideoDO videoDO5 = new VideoDO(1,"springcloud微服務(wù)視頻項目","xdclass.net",43);VideoDO videoDO6 = new VideoDO(2,"Paas工業(yè)級項目實戰(zhàn)項目","xdclass.net",32);VideoDO videoDO7 = new VideoDO(3,"面試專題視頻項目","xdclass.net",43);VideoDO videoDO8 = new VideoDO(4,"設(shè)計模式視頻","xdclass.net",4);List<VideoDO> videoDOS2 = new ArrayList<>();videoDOS2.add(videoDO5);videoDOS2.add(videoDO6);videoDOS2.add(videoDO7);videoDOS2.add(videoDO8);videoCardDO2.setList(videoDOS2);cardDOList.add(videoCardDO);cardDOList.add(videoCardDO2);return cardDOList;}}service
import net.xdclass.xdclassredis.model.VideoCardDO; import java.util.List;public interface VideoCardService {List<VideoCardDO> list(); }serviceImpl
import net.xdclass.xdclassredis.dao.VideoCardDao; import net.xdclass.xdclassredis.model.VideoCardDO; import net.xdclass.xdclassredis.service.VideoCardService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List;@Service public class VideoCardServiceImpl implements VideoCardService {@Autowiredprivate VideoCardDao videoCardDao;@Overridepublic List<VideoCardDO> list() {return videoCardDao.list();} }controller
import net.xdclass.xdclassredis.model.VideoCardDO; import net.xdclass.xdclassredis.service.VideoCardService; import net.xdclass.xdclassredis.util.JsonData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.List; import java.util.concurrent.TimeUnit;@RequestMapping("/api/v1/card") @RestController public class VideoCardController {@Autowiredprivate VideoCardService videoCardService;@Autowiredprivate RedisTemplate redisTemplate;/*** 緩存key*/private static final String VIDEO_CARD_CACHE_KEY = "video:card:key";/*** 有緩存* @return*/@GetMapping("list_cache")public JsonData listCardCache(){Object cacheObj = redisTemplate.opsForValue().get(VIDEO_CARD_CACHE_KEY);if(cacheObj != null){List<VideoCardDO> list = (List<VideoCardDO>) cacheObj;return JsonData.buildSuccess(list);} else {List<VideoCardDO> list = videoCardService.list();redisTemplate.opsForValue().set(VIDEO_CARD_CACHE_KEY,list,10,TimeUnit.MINUTES);return JsonData.buildSuccess(list);}}/*** 無緩存* @return*/@GetMapping("list_nocache")public JsonData listCardNoCache(){List<VideoCardDO> list = videoCardService.list();return JsonData.buildSuccess(list);}}總結(jié)
以上是生活随笔為你收集整理的Redis(案例二:高并发商品首页热点数据开发实战)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CommonResult响应工具类封装
- 下一篇: 刺客信条最低配置多少啊?