使用springBoot+Redis实现分布式缓存

使用springBoot+Redis实现分布式缓存

1. 添加redis框架 依赖

2. 配置redis连接信息

properties 复制代码
#redis 连接的配置信息
spring.redis.database=15
spring.redis.port=6379
spring.redis.host=82.157.236.116
# 可省略
spring.redis.lettuce.pool.min-idle=5
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=1ms
spring.redis.lettuce.shutdown-timeout=100ms

3. 操作redis

3.1 代码式操作redis

java 复制代码
@RestController
public class RedisController {
    //引入redis模版
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @RequestMapping("/set")
    public String setRedis(){
        //redis写缓存的操作
        stringRedisTemplate.opsForValue().set("username","zhangsan");
        return "redis存储成功";
    }
    @RequestMapping("/get")
    public String getRedis(){
        String result = stringRedisTemplate.opsForValue().get("username");
        return result;
    }
}

3.2使用注解操作redis

  • @Cacheable: 查询/添加;判断 redis 是否有缓存,如果没有那么就把当前方法返回值存到 redis; 如果存在缓存直接返回。
  • @CachePut: 修改; 将方法返回值更新到 redis 缓存中。
  • @CacheEvict:删除;将 redis 中对应的缓存删除。

在启动类中添加注解

@EnableCaching // 开启全局注解缓存

java 复制代码
@RestController
public class RedisAnnController {
    //存入或读取缓存
    @RequestMapping("/ann-get")
    @Cacheable(value = "spring.cache", key = "#name+'-'+#pnumber")
    public String get(String name, String pnumber) {
        if (!StringUtils.hasLength(name) || !StringUtils.hasLength(pnumber)) {
            return null;
        }
        System.out.println("执行了 get 方法");
        return "name=" + name + "|pnumber=" + pnumber;
    }
    //更新缓存
    @RequestMapping("/put")
    @CachePut(value = "spring.cache", key = "#name+'-'+#pnumber")
    public String put(String name ,String pnumber){
        if (!StringUtils.hasLength(name) || !StringUtils.hasLength(pnumber)) {
            return null;
        }
        System.out.println("执行了 put 方法");
        return "[name=" + name + "<->pnumber=" + pnumber + "]";
    }
    //redis 缓存删除
    @RequestMapping("/del")
    @CacheEvict(value = "spring.cache",key = "#name + '-' + #pnumber")
    public void del(String name ,String pnumber){
        System.out.println("执行了删除缓存");
    }
}

4. 使用Redis存储Session

4.1 添加依赖

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>

4.2 配置 redis 连接和 session 的相关信息

yml 复制代码
spring:
  redis:
    host: 82.157.236.116
    port: 6379
    database: 15
    password: "XXXXXXXXXXXXX"

  session:
    store-type: redis
    redis:
      flush-mode: on_save
      namespace: spring:session
  servlet:
    session:
      timeout: 1800

经过上述操作有关session的信息都存储到了redis中的15号数据库,spring:session包中

4.3 redis存储对象

使用Spring Data Redis时,尝试将一个非序列化存储在redis中会产生错误。这个错误是由于在使用Spring Data Redis时,尝试将一个非序列化的对象(Userinfo类型)存储到Redis中导致的。要解决这个问题,你需要确保Userinfo类实现了Serializable接口。

在Userinfo类上添加@Serializable注解:

java 复制代码
import java.io.Serializable;

public class Userinfo implements Serializable {
    // ... 其他代码 ...
}
相关推荐
汤姆yu3 小时前
基于springboot的尿毒症健康管理系统
java·spring boot·后端
暮色妖娆丶3 小时前
Spring 源码分析 单例 Bean 的创建过程
spring boot·后端·spring
biyezuopinvip4 小时前
基于Spring Boot的企业网盘的设计与实现(任务书)
java·spring boot·后端·vue·ssm·任务书·企业网盘的设计与实现
惊讶的猫5 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
JavaGuide5 小时前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot
期待のcode5 小时前
Redis的主从复制与集群
运维·服务器·redis
jiunian_cn5 小时前
【Redis】渐进式遍历
数据库·redis·缓存
figo10tf5 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
zhangyi_viva6 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端
橙露6 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot