SpringBoot2+Vue2实战(十四)springboot集成redis实现缓存

一、添加缓存

添加redis缓存之后就不会一直刷新数据库,减少数据库压力

pom.xml依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
SpringbootApplication
@EnableCaching
EchartsController
 @AuthAccess
    @GetMapping("/file/front/all")
    @Cacheable(value = "files", key = "targetClass + methodName")
    public Result frontAll() {
        return Result.success(fileMapper.selectList(null));
    }

也可以自定义key,要用 ' ' 括起来

@AuthAccess
    @GetMapping("/file/front/all")
    @Cacheable(value = "files", key = "'frontAll'")
    public Result frontAll() {
        return Result.success(fileMapper.selectList(null));
    }

二、更新缓存:

fileController

//更新
    @PostMapping("/update")
    //更新缓存
    @CachePut(value = "files",key = "'frontAll'")
    public Result update(@RequestBody Files files) {
        //新增或修改
        fileMapper.updateById(files);
        return success(fileMapper.selectList(null));
    }

三、删除缓存

数据库执行删除之后,第一次缓存也删除,后面就不会请求数据库

//删除
    @DeleteMapping("/{id}")
    //清除一条缓存,key为要清空的数据
    @CacheEvict(value = "emp",key = "'frontAll'")
    public Result delete(@PathVariable("id") Integer id) {
        Files files = fileMapper.selectById(id);
        files.setIsDelete(true);
        fileMapper.updateById(files);
        return success();
    }

四、集成redis

pom.xml

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

application.yml

  redis:
    port: 6379
    host: 127.0.0.1

EchartController

@Resource
    private FileMapper fileMapper;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;



@AuthAccess
    @GetMapping("/file/front/all")
    /*@Cacheable(value = "files", key = "targetClass + methodName")*/
    public Result frontAll() {

        //1.从缓存获取数据
        String jsonStr = stringRedisTemplate.opsForValue().get(FILES_KEY);
        List<Files> files;
        //2.取出来的json是空的
        if (StrUtil.isBlank(jsonStr)) {
            //3.从数据库取出数据
            files = fileMapper.selectList(null);
            //4.再去缓存到redis
            stringRedisTemplate.opsForValue().set(FILES_KEY,JSONUtil.toJsonStr(files));
        } else {
            //减轻数据库的压力
            //5.如果有,从redis缓存中获取数据
            files = JSONUtil.toBean(jsonStr, new TypeReference<List<Files>>() {
            }, true);
        }
        return Result.success(files);
    }

操作完数据库更新缓存操作:(增删改时使用)

第一种方法:最简单的方式

//最简单的方式
        flushRedis(Constants.FILES_KEY);

删除缓存

FileController

@Autowired
    private StringRedisTemplate stringRedisTemplate;


//删除缓存
    private void flushRedis(String key){
        stringRedisTemplate.delete(key);
    }




//更新
    @PostMapping("/update")
    //更新缓存
    /*@CachePut(value = "files",key = "'frontAll'")*/
    public Result update(@RequestBody Files files) {
        //新增或修改
        fileMapper.updateById(files);
        flushRedis(Constants.FILES_KEY);
        return success();
    }


 //删除
    @DeleteMapping("/{id}")
    //清除一条缓存,key为要清空的数据
   /* @CacheEvict(value = "emp",key = "'frontAll'")*/
    public Result delete(@PathVariable("id") Integer id) {
        Files files = fileMapper.selectById(id);
        files.setIsDelete(true);
        fileMapper.updateById(files);
        flushRedis(Constants.FILES_KEY);
        return success();
    }

第二种方法:

设置缓存

FileController



//设置缓存
    private void setCache(String key,String value){
        stringRedisTemplate.opsForValue().set(key,value);
    }

 ①从redis取出数据,操作完,再设置,不用查询数据库,性能比较高

//从redis取出数据,操作完,再设置,不用查询数据库
        String json = stringRedisTemplate.opsForValue().get(Constants.FILES_KEY);
        List<Files> files1 = JSONUtil.toBean(json, new TypeReference<List<Files>>() {
        },true);
        files1.add(saveFile);
        setCache(Constants.FILES_KEY,JSONUtil.toJsonStr(files1));

②从数据库查出数据,再设置最新缓存

 //从数据库查出数据
        List<Files> files = fileMapper.selectList(null);
        //设置最新的缓存
        setCache(Constants.FILES_KEY, JSONUtil.toJsonStr(files));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot+SpringSecurity+Vue实现动态路由的过程如下: 1. 在后端(SpringBoot)中,首先需要定义一个权限表,用于存储所有的权限信息,包括权限名称、权限标识等。 2. 在前端(Vue)中,需要定义一个路由表,用于存储所有的路由信息,包括路由路径、组件名称等。 3. 后端需要提供一个接口,用于获取当前用户的权限列表。该接口会根据用户的角色查询对应的权限,并返回给前端。 4. 前端在登录成功后,会调用后端接口获取当前用户的权限列表,并将权限列表存储到本地(如localStorage或vuex)中。 5. 前端在路由跳转时,会根据当前用户的权限列表动态生成路由。可以通过遍历权限列表,根据权限标识匹配路由表中的路由信息,将匹配到的路由添加到路由表中。 6. 前端在生成路由后,需要使用Vue Router的addRoutes方法将动态生成的路由添加到路由表中。 7. 前端在路由跳转时,会根据用户的权限判断是否有权限访问该路由。可以通过导航守卫的beforeEach方法,在路由跳转前进行权限判断。 8. 后端可以使用Spring Security的注解对接口进行权限控制。可以通过在接口上添加注解,指定需要的权限才能访问该接口。 9. 后端在接口调用时,可以通过从redis中获取当前用户的权限列表,并进行权限判断。 10. 前端和后端通过接口交互,实现动态路由的权限控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值