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

相关推荐
段ヤシ.12 分钟前
【Java框架】知识点汇总Day7:Spring Boot +Vue(持续更新)
vue.js·spring boot·后端·框架
BossFriday31 分钟前
【手撸IM】SycllaDB 消息存储基础
java·分布式·中间件
逻极32 分钟前
Redis 从入门到精通:缓存设计与实战
数据结构·redis·缓存·哨兵集群
夜白宋34 分钟前
【Redis深入】二、高性能
java·前端·redis
空圆小生34 分钟前
Vue3 + Spring Boot 全栈实战:从零搭建在线彩票模拟系统
java·spring boot·后端
小马爱打代码37 分钟前
SpringBoot + 分布式锁 + 事务日志:跨服务操作原子性兜底方案
spring boot·分布式·后端
真实的菜41 分钟前
Spring Boot 2.2.x 优雅停机实践指南
spring boot·后端
小马爱打代码42 分钟前
基于Redis发布订阅实现轻量级多级缓存方案
数据库·redis·缓存
逍遥德12 小时前
MQTT教程详解-04.SpringBoot集成MQTT(告别手动控制)
java·spring boot·物联网·中间件·iot·iotdb
我是一颗柠檬15 小时前
【Java后端技术亮点】热Key探测与本地缓存二级防护:Redis热点问题的终极解决方案
java·redis·后端·缓存·中间件