使用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.yml或application.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

相关推荐
别动我齐刘海44 分钟前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
code2cat2 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe2 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码2 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
wewowilling2 小时前
认识微服务
java·运维·微服务·springcloud
代码什么用3 小时前
Java Web 7-10
java·servlet
蜗牛互联网4 小时前
GPT-6 与 Intelligent UI:从回答到可审计操作的产品迁移
java·人工智能·后端
SL_staff5 小时前
运维救火实录:钉钉考勤API变更引发工资计算异常,我们用JVS-Logic可视化逻辑引擎实现分钟级热修复
java·mysql·全栈
SunnyDays10115 小时前
Java 查找并高亮 Word 文字:精确查找及正则表达式模糊查找
java·查找文字·word 文档·高亮文字·正则匹配查找·模糊查找