OpenResty + Tomcat + Redis实现多级缓存

本文介绍了为何使用缓存,系统环境,以及使用Redis、Java本地缓存、Nginx缓存和Lua缓存的方式。重点推荐了使用OpenResty的Lua脚本结合Redis来实现多级缓存,以提高数据处理速度并降低服务器压力。
摘要由CSDN通过智能技术生成
为什么要使用缓存?

其实在大部分场景中都需要使用缓存,比如购物网站上商品详情页的信息。如果不使用缓存,用户每发起一起请求,都需要到服务端数据库查询,数据库的每一次操作都会涉及到磁盘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_" 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值