使用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 {
    // ... 其他代码 ...
}
相关推荐
漫霂1 小时前
基于redis实现登录校验
redis·后端
程序员小崔日记1 小时前
一篇文章彻底搞懂 MySQL 和 Redis:原理、区别、项目用法全解析(建议收藏)
redis·mysql·项目实战
读书笔记2 小时前
CentOS 7 安装 redis-6.2.6.tar.gz 详细步骤(从源码编译到启动配置)
redis
焗猪扒饭14 小时前
redis stream用作消息队列极速入门
redis·后端·go
用户908324602731 天前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot
用户8307196840822 天前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
Java水解2 天前
Spring Boot 视图层与模板引擎
spring boot·后端
Java水解2 天前
一文搞懂 Spring Boot 默认数据库连接池 HikariCP
spring boot·后端
洋洋技术笔记2 天前
Spring Boot Web MVC配置详解
spring boot·后端
雨中飘荡的记忆3 天前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端