redis 缓存在课程平台中的使用

redis缓存在项目中的使用

1、环境搭建

redis数据库(Redis-x64-5.0.10.zip)和桌面可视化工具(RedisDesktopManager_42636.zip)放在小龙局域网下的toShare文件夹中。项目目前用的是在我的主机上配置好的redis数据库,如果只是看使用过程中缓存生存的过程可以只安装可视化工具,连接我的数据库就可以(连接名自定义,地址:192.168.66.116,没有密码)。如果想搭建自己的redis数据库,用上面的安装包,自己查一下安装步骤即可。

2、具体使用

参考博客:https://www.cnblogs.com/coding-one/p/12402543.html

缓存一般用在查询方法,在ServiceImpl类中的某个查询方法上加上 @Cacheable 注解即可。注解中需要填写缓存名和key。

  • 缓存名:有两个参数来指定:value、cacheNames,我使用的是cacheNames,并且重写了构造方法,在缓存名最后加上#再加上数字,表示这条缓存的有效时间(单位:秒)。示例:@Cacheable( cacheNames = “scholat#60” , keyGenerator = “keyGenerator”),表示这个方法生成的缓存名为scholat,有效时间为60秒,过期后redis会自动删除缓存。

  • key:redis是键值数据库,每一条记录都有唯一的key与之对应(上面的缓存名可以视为一个缓存分组,改分组下有对应不同key的缓存)。建议自己在注解中指定key,不要用默认生成的。key可以用spring表达式(SpEl)描述,也可以在redis配置类中自定义 keyGenerator(如果不指定key的话会使用默认的SimpleKeyGenerator)。我在config包下的RedisConfig中自定义了一个keyGenerator,有需要的可以自己的情况再定义其他keyGenerator。假设你定义的keyGenerator写法如下

    1
    2
    3
    4
    5
     public KeyGenerator mykeyGenerator() {
    return (o, method, objects) -> {
    // ***
    };
    }

    用法为@Cacheable( cacheNames = , keyGenerator = “mykeyGenerator”)

  • 注意:使用缓存后,如果其他方法(增删改方法)会改变这个查询方法的返回值,记得要清除原来的缓存。比如在查询某课程的所有班级方法和修改班级方法,前端在修改班级后会刷新,如果不清除缓存的话刷新后的结果还是没有变化(尽管实际上更改已经写到数据库中了)。可以考虑更新缓存@CachePut或者删除缓存@CacheEvict,不过这两个注解我还没用上,我是自己写的手动删除缓存(stringRedisTemplate.delete(keys); 具体可见CourseDiscussReplyServiceImpl类中的addReply和deleteReply方法),这些可控制性更强,缺点是需要在方法体内自己写代码,没有注解那么优雅。