中间件:SpringBoot集成Redis

1. Redis简介

Redis(Remote Dictionary Server)是一个开源的内存数据库,支持多种数据结构,具有极高的性能。它通常用作缓存、中间件,支持持久化和主从复制,广泛应用于高并发、低延迟的场景

(1) 数据类型

Redis 支持以下五种基本数据类型:

  • String:最常用的类型,可存储字符串、整数、浮点数
  • List:双向链表,支持元素的插入、删除,适用于队列场景
  • Set:无序集合,支持交集、并集、差集等操作
  • Hash:类似于Java中的Map结构,适合存储对象数据
  • ZSet(Sorted Set):有序集合,带分数的元素集合,适用于排行榜、排名系统等场景

(2) 关键优势

  • 高性能:单线程模型,支持每秒百万级请求
  • 丰富的数据结构:可以满足多样化的场景需求
  • 持久化机制:支持数据落盘(RDB和AOF两种方式)
  • 分布式:支持主从复制,便于构建高可用集群

2. Redis的基本使用

(1) 配置

安装 Redis 后,配置文件通常为 redis.conf,常用配置包括端口、最大连接数、持久化设置等

  • 端口:默认端口为 6379
  • 持久化:通过 RDB 或 AOF 来设置数据持久化的方式

(2) 启动

可以通过命令 redis-server 启动 Redis,也可以指定配置文件来启动:

bash 复制代码
redis-server /path/to/redis.conf

(3) 连接

可以通过命令行客户端 redis-cli 或通过编程方式(如Jedis、Lettuce)连接 Redis

(4) 基本操作

  • 设置键值

    bash 复制代码
    SET key value
  • 获取键值

    bash 复制代码
    GET key
  • 删除键

    bash 复制代码
    DEL key

(5) 可视化工具

常用 Redis 可视化管理工具:

  • Redis Desktop Manager:跨平台的 GUI 管理工具
  • Another Redis Desktop Manager (RDM):开源 Redis 管理工具
  • FastoRedis:基于 C++ 的 Redis 客户端

3. Jedis操作Redis

Jedis 是 Java 语言的 Redis 客户端,提供了方便的 API 操作 Redis

(1) 常用方法API

  • set:设置键值
  • get:获取键值
  • del:删除键
  • exists:检查键是否存在
  • expire:设置键过期时间

(2) 基本操作

java 复制代码
Jedis jedis = new Jedis("localhost", 6379);
jedis.set("key", "value");
String value = jedis.get("key");

(3) 连接池

为了提高性能和复用连接,Jedis 支持连接池:

java 复制代码
JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), "localhost");
try (Jedis jedis = jedisPool.getResource()) {
    jedis.set("key", "value");
}

4. SpringBoot操作Redis

通过 SpringBoot 的 spring-boot-starter-data-redis 来简化对 Redis 的操作

(1) spring-boot-starter-data-redis

在 SpringBoot 项目中,添加以下依赖:

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

(2) 基本操作

RedisTemplate 是 SpringBoot 中用于操作 Redis 的核心类,支持多种数据类型的操作

java 复制代码
@Autowired
private RedisTemplate<String, Object> redisTemplate;

redisTemplate.opsForValue().set("key", "value");
Object value = redisTemplate.opsForValue().get("key");

(3) 封装

可以通过封装 Redis 工具类简化 Redis 的常用操作:

java 复制代码
public class RedisUtils {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void set(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }

    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }
}

5. SpringBoot集成Redis使用Cache缓存

Spring Boot 集成 Redis 后,支持使用 Cache 注解实现缓存功能

(1) RedisConfig配置

需要配置 Redis 的连接信息和序列化方式,避免存储乱码:

java 复制代码
@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

(2) Cache注解

Spring 提供了 @Cacheable、@CachePut 和 @CacheEvict 注解,用于缓存管理:

  • @Cacheable:方法执行结果缓存
  • @CachePut:更新缓存
  • @CacheEvict:清除缓存
java 复制代码
@Cacheable(value = "users", key = "#id")
public User getUserById(Long id) {
    return userRepository.findById(id).orElse(null);
}

(3) JSON注解

为了在 Redis 中以 JSON 形式存储数据,可以配置 GenericJackson2JsonRedisSerializer 来序列化和反序列化数据

通过以上配置和方法,可以将 SpringBoot 与 Redis 集成,提供缓存能力,有效提升应用性能

这份总结涵盖了Redis的基础概念、操作方式以及SpringBoot中的实际应用

相关推荐
李昊哲小课1 小时前
Spring Boot SSE 实时推送教程
spring boot·websocket·flux·sseemitter
wno7042 小时前
Spring Boot WebFlux增删改查
java·spring boot·后端
行百里er4 小时前
Spring Insight 里如何把 Span 收成一条链路
spring boot·spring cloud·监控
xcl09254 小时前
24小时自助健身房系统软件开发实战指南:从架构到部署
java·spring boot
吉甫作诵6 小时前
Redis 常用命令大全:11 大类命令速查手册
运维·数据库·redis·缓存·nosql
ID34610744206 小时前
【课程设计】基于Spring Boot+Vue的游戏账号租赁系统的设计与实现-计算机毕设 附源码50345
javascript·vue.js·spring boot·python·node.js·php·课程设计
hweiyu007 小时前
Redis命令:MGET
redis·缓存
あ-8 小时前
Redis 常见问题及解决方案
redis
晚安日记wanna9 小时前
Redis 持久化RDB 和 AOF 到底该怎么选
redis·面试·架构
小蒜学长9 小时前
基于RFID技术的仓储管理系统设计(代码+数据库+LW)
java·数据库·spring boot·后端·rfid技术·仓储管理