当前位置:首页 > 编程笔记 > 正文
已解决

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

来自网友在路上 169869提问 提问时间:2023-11-05 22:23:56阅读次数: 69

最佳答案 问答题库698位专家为你答疑解惑

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

1. 添加redis框架 依赖

image-20231102215956817

2. 配置redis连接信息

#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

@RestController
public class RedisController {//引入redis模版@Autowiredprivate 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 // 开启全局注解缓存

@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 添加依赖

image-20231105194948808

<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 的相关信息

spring:redis:host: 82.157.236.116port: 6379database: 15password: "XXXXXXXXXXXXX"session:store-type: redisredis:flush-mode: on_savenamespace: spring:sessionservlet:session:timeout: 1800

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

4.3 redis存储对象

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

在Userinfo类上添加@Serializable注解:

import java.io.Serializable;public class Userinfo implements Serializable {// ... 其他代码 ...
}
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"使用springBoot+Redis实现分布式缓存":http://eshow365.cn/6-33056-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!