Redis缓存


当我们不希望每次调用接口或方法时,都去请求数据库或服务时,可以将返回结果缓存起来,这样在缓存有效期内,再次请求接口或方法时,会直接返回缓存结果,而不会进去到方法内部。

注解说明

Cacheable

cache1

CachePut

cache2

CacheEvict

cache3

示例

 @Cacheable(value = "getUserInfo",key = "#userId")
    @Override
    public UserInfoDto getUserInfo(Long userId) {
        // do something
    }
  @CacheEvict(value = "getUserInfo",key = "#id")
    @ApiOperation(value = "更新用户")
    @PutMapping("/user/{id}")
    @SneakyThrows
    public RestData update(@PathVariable Long id, @RequestBody @Valid OfaUserUpdateDto user, BindingResult bindingResult) {
    }

缓存使用, 同一个缓存对象应只保留一个出入口, 防止代码变更, 逻辑遗漏, 造成数据不一致. 同时对于绝大多数数据都应该设置有效时间

Redis 使用规范

key名设计

1: key中添加前缀,以示区分,防止key冲突

2: 控制key的长度,减少无意义的内存浪费

3: key中不要包含特殊字符(空格、引号、换行符等)

key命名规范

1: 整体采用${team}+${project}+${func}+${key}

2: key全都用小写, 每一级通过. _ :分割. 例如 ofa:user:cache:1, ofa.user.cache.1

value设计

1: 拒绝大key (string类型控制在10KB以内,hash、list、set、zset元素个数不要超过5万)

2: 有效过期时间

3: 适合的数据类型

使用范围 [推荐]

1: 只做缓存, 不做唯一持久化

2: 使用连接池

3: 禁用模糊查询 keys, flushall, flushdb

4: 避免多个业务使用同一个Redis实例

5: 批量操作使用pipeline