4Redis 缓存 · SpringCloud微服务实战 · 看云

导航

本节代码地址


在Redis 介绍篇,我们介绍了Redis 的特性和功能,Redis 这么流行不是没有原因的。本篇我们将实际使用Redis 来演示缓存功能的demo,读者可以利用docker run 一个(可以参照容器化章节)也可以使用本地起一个(windows)。因此我们装一个单机版即可,集群或者哨兵一般公司会有DBA负责。

1. 安装包下载

Redis 安装包地址https://github.com/microsoftarchive/redis/releases
下载目前最新的安装包
dff8ef5fcbb2c6db78ea3be267914a2a_MD5.webp

2. 启动

解压缩,配置全部用默认的
dos命令提示符,进入redis安装目录:
输入命令

redis-server redis.windows.conf

看到下面的日志即代表启动成功

                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 3.2.100 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 43156
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

[43156] 19 Mar 13:32:13.609 # Server started, Redis version 3.2.100
[43156] 19 Mar 13:32:13.611 * The server is now ready to accept connections on port 6379

3. 新建模块

下面我们新建模块来演示Redis缓存
87a738397e87b3ba6f727680069035c8_MD5.webp

需要在mave中添加redis 的包

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

4. 核心方法

我们这里需要注入StringRedisTemplate的bean,通过redisTemplate.opsForValue()来读取和写入redis。在getUserById方法中先到redis查,查不到再去到数据库中查询。

@Service
@Slf4j
public class UserServiceImpl implements UserService {

    @Autowired
    private StringRedisTemplate redisTemplate;


    @Override
    public User getUserById(long id) {
        String userRedis = redisTemplate.opsForValue().get(String.valueOf(id));
        if(StrUtil.isEmpty(userRedis)){
            User userByDao = getUserByDao(id);
            if(null!=userByDao){
                redisTemplate.opsForValue().set(String.valueOf(id),JSONUtil.toJsonStr(userByDao));
                return  userByDao;
            }else{
                return null;
            }
        }else{
            log.info("我是缓存的,有点叼");
            return JSONUtil.toBean(userRedis,User.class);
        }
    }

    private User getUserByDao(long id) {
        List<User> userList = initUser().stream().filter(user -> user.getId() == id).collect(Collectors.toList());
        if (CollectionUtils.isEmpty(userList)) {
            return new User(0, null, null, null, "这位顾客先拿一下腰牌!");
        }
        log.info("我是非缓存的,请多指教");
        return userList.get(0);
    }

5. 启动项目

浏览器或Postman输入http://localhost:8801/user/1可以看到控制台显示的日志
03c91838eec9b9ab9f922288bd3b3ff4_MD5.png

2020-03-19 16:09:27.078  INFO 4860 --- [nio-8801-exec-1] c.y.c.r.service.impl.UserServiceImpl     : 我是非缓存的,请多指教
2020-03-19 16:09:32.448  INFO 4860 --- [nio-8801-exec-2] c.y.c.r.service.impl.UserServiceImpl     : 我是缓存的,有点叼
2020-03-19 16:09:34.690  INFO 4860 --- [nio-8801-exec-4] c.y.c.r.service.impl.UserServiceImpl     : 我是缓存的,有点叼
2020-03-19 16:14:37.440  INFO 4860 --- [nio-8801-exec-7] c.y.c.r.service.impl.UserServiceImpl     : 我是缓存的,有点叼