中间件: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中的实际应用

相关推荐
用户30745969820710 小时前
Redis 延时队列详解
redis
烤代码的吐司君13 小时前
Redis 数据结构 ZSet, BIT, HyperLogLog,Geo 空间数据
redis·后端
Flittly19 小时前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring
Flynt2 天前
从Spring Boot 4.0升到4.1,我在Maven和gRPC上栽了跟头
java·spring boot·后端
掉鱼的猫3 天前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·spring boot
leeyi3 天前
Checkpoint 机制:Agent 怎么在断电后接着跑
redis·aigc·agent
人活一口气3 天前
Spring Boot与AIGC的完美结合:从零搭建智能内容生成平台
java·spring boot·aigc
云技纵横4 天前
一个 @Async 让循环依赖暴雷:Spring 代理的暗坑
redis
犯困蛋挞yy5 天前
用Claude快速解决Redis代码报错反复无解的问题
redis
java小白小6 天前
SpringBoot(01): 初识SpringBoot,从Spring的痛点说起
spring boot