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

相关推荐
Java内核笔记10 分钟前
同一份知识库,4 种切分 × 3 种召回,纯关键词比纯向量高 13 个点
java·人工智能·spring boot
用户0942485680320 分钟前
第8章:Redis Bitmap 与 BitField 实战:签到、活跃用户与状态压缩
redis·架构·源码
学长毕设2 小时前
基于springboot的社会志愿者管理系统-附源码
java·spring boot·后端
计算机编程-吉哥2 小时前
计算机毕业设计 基于 SpringBoot + Vue 的剧本杀系统 Java毕业设计【任务书、开题报告、中期报告、论文、源码】
java·vue.js·spring boot·毕业设计·课程设计·计算机毕业设计选题
这里是杨杨吖3 小时前
SpringCloud+Vue民宿房屋租赁系统 附带详细运行指导视频
vue.js·spring boot·spring cloud·房屋·民宿租赁
RuoyiOffice3 小时前
SpringBoot OA推荐:面向信创选型,看看这套企业协同平台
spring boot·vue3·信创·flowable·企业协同·ruoyi office·oa选型
jianxuan3 小时前
Spring Boot + Maven 接入 Allatori:从普通打包到可选混淆发布
spring boot·python·maven
RuoyiOffice5 小时前
llama.cpp + SpringBoot3:本地部署 Qwen3.8,接入 AgentOS 企业办公智能体
spring boot·springboot3·llama.cpp·spring ai·qwen3.8·agentos
Flynt14 小时前
我把微信运动的排行榜和定点推送复刻了一遍:100万次步数更新只要4秒,坑在别处
redis·后端·性能优化
学长毕设14 小时前
基于SpringBoot的青少年编程学习平台系统-附源码
spring boot·学习·青少年编程