为什么要使用缓存?
其实在大部分场景中都需要使用缓存,比如购物网站上商品详情页的信息。如果不使用缓存,用户每发起一起请求,都需要到服务端数据库查询,数据库的每一次操作都会涉及到磁盘IO,这样不仅增加服务端的压力,同时也降得了响应速度。而缓存存在于内存中,对缓存的操作比对磁盘的操作要快得多。但也不是什么数据都可以存入缓存中。首先内存大小有限,不可能将所有数据都存入内存中。其次对于那些更新比较频繁的数据,如果存入缓存中,就需要经常更新缓存,这有可能得不偿失。
所以缓存中存储的数据应该是一些比较热点(即经常访问)同时又不经常修改的数据。因为缓存的设计是为了提高数据处理速度,提高响应速度,所以也应该将缓存推到离用户最近的地方。
系统环境
在使用缓存之前整个系统的结构如下图所示:
服务器端使用的是SpringBoot2.0.5版本。
这里以查询商品详情信息为例。服务器端关于查询商品详情的部分代码如下:
/**
* @author: Charviki
* @create: 2019-09-03 14:47
**/
@RestController
@RequestMapping("/item")
public class ItemController{
@Autowired
private ItemService itemService;
@GetMapping(value = "/getItemById")
public ItemModel getItemById(@RequestParam("id") Integer itemId){
// 直接从数据库查询
ItemModel itemModel = itemService.getItemById(itemId);
return itemModel;
}
}
redis缓存
首先,我们可以在首次向查询商品数据之后,将数据存入redis中,下一次再查询商品数据时先从Redis缓存中取,如果缓存中没有,再从数据库中查询。修改controller,代码如下:
/**
* @author: Charviki
* @create: 2019-09-03 14:47
**/
@RestController
@RequestMapping("/item")
public class ItemController{
@Autowired
private ItemService itemService;
@Autowired
private RedisTemplate redisTemplate;
@GetMapping(value = "/getItemById")
public ItemModel getItemById(@RequestParam("id") Integer itemId){
// 生成key,item+id
String key = "item_"