SpringBoot集成Redis

1、为何要使用Redis?

  • 性能极高 – Redis读的速度是110000次/s,写的速度是81000次/s ;
  • 丰富的数据类型 – Redis支持Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操做;
  • 原子 – Redis的全部操做都是原子性的,即要么成功执行要么失败彻底不执行。单个操做是原子性的。多个操做也支持事务,即原子性,经过MULTI和EXEC指令包起来;

*丰富的特性 – Redis还支持publish/subscribe, key过时等特性。html

2、什么状况应该使用Redis?

  • 会话缓存(如分布式应用存储token等);
  • 计数器(如一天以内密码输错了三次,自动锁定帐户);
  • 热点数据(如排名等);
  • 缓解数据库压力(MyBatis或MyBatis-Plus使用Redis作二级缓存);
  • 定时器(主要针对redis的key过时时间)。

3、整合Redis

1.导入Maven依赖

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

2.配置文件application.yml修改

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password:

3.Controller测试(可复用SpringBoot整合MyBatis-Plus例子)

package com.blog.tutorial.controller;
import com.blog.tutorial.entity.Users;
import com.blog.tutorial.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
 * @description:
 * @author: youcong
 * @time: 2020/11/14 13:27
 */@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
 private UsersService usersService;
    @Autowired
 private RedisTemplate redisTemplate;
    @GetMapping("/list")
    public String list() {
        System.out.println("list:"+redisTemplate.opsForValue().get("list"));
        if (StringUtils.isEmpty(redisTemplate.opsForValue().get("list"))) {
            redisTemplate.opsForValue().set("list", usersService.list(), 360, TimeUnit.MINUTES);
        }
        return redisTemplate.opsForValue().get("list").toString();
    }
}

4.测试效果

请求接口,以下:
image.pngjava

控制台,以下:
image.pngweb

初次请求,会打印SQL,再次请求只会输出Redis的key,同时页面接口响应时间很是快。redis

4、Redis常见问题有哪些?

  • 缓存和数据库双写一致性(缓存的数据与数据库查询的数据不同);
  • 缓存雪崩(即缓存同一时间大面积的失效,这个时候又来了一波请求,结果请求都怼到数据库上,从而致使数据库链接异常);
  • 缓存击穿(黑客故意去请求缓存中不存在的数据,致使全部的请求都怼到数据库上,从而数据库链接异常);
  • 缓存并发竞争(多个系统同时set同一个key,涉及分布式锁)。

5、Java的Redis框架有哪些?

  • Jedis;
  • Lettuce;
  • Redisson。

关于上述框架使用,我在个人博客园写下以下几篇文章,感兴趣的能够看看:
SpringBoot整合Redisson\(单机版\)spring

SpringBoot实战\(七\)之与Redis进行消息传递数据库

SpringBoot整合Redisson\(集群版\)缓存

redis集群搭建性能优化

Java链接Redis之redis的增删改查并发

网站性能优化小结和spring整合redisapp

相关文章
相关标签/搜索