使用Spring Data Redis操作Redis

使用Spring Data Redis操作Redis

文章目录

在Java中使用Spring Data Redis操作Redis的步骤可以分为以下几个关键部分:添加依赖、配置连接、自定义 RedisTemplate、编写操作类以及操作各种数据类型。以下是详细步骤和示例:

1. 添加依赖

pom.xml文件中添加Spring Data Redis的依赖。Spring Boot提供了spring-boot-starter-data-redis,默认使用Lettuce作为Redis客户端:

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

如果需要使用Jedis作为客户端,可以排除Lettuce并添加Jedis依赖。

2. 配置Redis连接

application.ymlapplication.properties文件中配置Redis的连接信息:

yaml 复制代码
spring:
  redis:
    host: 127.0.0.1  # Redis服务器地址
    port: 6379       # Redis服务器端口
    password:        # Redis密码(如果有)
    database: 0      # 数据库索引(默认为0)
    timeout: 1800000 # 连接超时时间(毫秒)
    lettuce:
      pool:
        max-active: 20  # 连接池最大连接数
        max-wait: -1    # 最大阻塞等待时间(负数表示无限制)
        max-idle: 5     # 最大空闲连接数
        min-idle: 0     # 最小空闲连接数

3. 创建Redis配置类

创建一个配置类来定义RedisTemplate,并设置序列化器:

java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@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());
        // 设置值的序列化方式为JSON
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        return template;
    }
}

4. 编写Redis操作类

创建一个服务类来封装Redis的常用操作:

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class RedisService {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

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

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

    public void deleteValue(String key) {
        redisTemplate.delete(key);
    }
}

5. 操作各种数据类型

通过RedisTemplate可以操作Redis中的不同数据类型。

操作字符串(String)
java 复制代码
@Service
public class RedisService {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

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

    public String getString(String key) {
        return (String) redisTemplate.opsForValue().get(key);
    }
}
操作列表(List)
java 复制代码
public void addToList(String key, String value) {
    redisTemplate.opsForList().rightPush(key, value);
}

public List<String> getList(String key) {
    return redisTemplate.opsForList().range(key, 0, -1);
}
操作集合(Set)
java 复制代码
public void addToSet(String key, String value) {
    redisTemplate.opsForSet().add(key, value);
}

public Set<String> getSet(String key) {
    return redisTemplate.opsForSet().members(key);
}
操作哈希(Hash)
java 复制代码
public void addToHash(String key, String hashKey, String value) {
    redisTemplate.opsForHash().put(key, hashKey, value);
}

public Object getFromHash(String key, String hashKey) {
    return redisTemplate.opsForHash().get(key, hashKey);
}
操作有序集合(ZSet)
java 复制代码
public void addToZSet(String key, String value, double score) {
    redisTemplate.opsForZSet().add(key, value, score);
}

public Set<String> getZSet(String key) {
    return redisTemplate.opsForZSet().range(key, 0, -1);
}

6. 启动并测试

启动Spring Boot应用程序后,可以通过编写测试代码或使用工具(如Postman)验证Redis的操作是否成功。

总结

通过上述步骤,你可以使用Spring Data Redis在Spring Boot项目中轻松地操作Redis。RedisTemplate提供了丰富的API,支持Redis的各种数据类型,同时通过自定义序列化器,可以灵活地存储和读取Java对象。

想研究一下Redis数据结构可参考文章:https://blog.csdn.net/weixin_48312484/article/details/127216549

相关推荐
Alan5215928 分钟前
Java 使用 Quartz 实现定时任务(超简单入门)
java
有来技术1 小时前
全栈架构后端攻坚:基于 youlai - boot(开源)、Spring Boot 3 与 Spring Security 6 实现企业级权限系统全功能实战手册
java·spring boot·后端
烁3471 小时前
每日一题(小白)暴力娱乐篇23
java·开发语言·算法·娱乐
helloworld_工程师1 小时前
Spring AI应用:利用DeepSeek+嵌入模型+Milvus向量数据库实现检索增强生成--RAG应用(超详细)
java·后端
顾林海1 小时前
深度解析TreeSet工作原理
android·java·面试
花木凋零成兰2 小时前
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
java·安全·ssl
振鹏Dong2 小时前
剖析Spring中的设计模式(一) | 工厂&观察者
java·spring·设计模式
LUCIAZZZ2 小时前
总结一下常见的EasyExcel面试题
java·spring·操作系统·springboot·poi·easyexcel
猿java2 小时前
为什么说缓存是把双刃剑?
java·后端·面试
绿柱石2 小时前
华为ar1200修改con口密码
java·华为·ffmpeg