使用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

相关推荐
星沁城1 小时前
236. 二叉树的最近公共祖先
java·数据结构·leetcode·二叉树
oliveira-time2 小时前
Java 1.8(也称为Java 8)
java·开发语言
极小狐4 小时前
如何使用极狐GitLab 软件包仓库功能托管 maven?
java·运维·数据库·安全·c#·gitlab·maven
.生产的驴4 小时前
SpringBoot 集成滑块验证码AJ-Captcha行为验证码 Redis分布式 接口限流 防爬虫
java·spring boot·redis·分布式·后端·爬虫·tomcat
野犬寒鸦5 小时前
MySQL索引使用规则详解:从设计到优化的完整指南
java·数据库·后端·sql·mysql
思考的橙子5 小时前
Springboot之会话技术
java·spring boot·后端
钰爱&6 小时前
【Linux】POSIX 线程信号量与互斥锁▲
java·开发语言·jvm
黑匣子~7 小时前
java集成telegram机器人
java·python·机器人·telegram
A尘埃8 小时前
K8S有状态服务部署(MySQL、Redis、ES、RabbitMQ、Nacos、ZipKin、Sentinel)
redis·mysql·kubernetes
免檒8 小时前
go基于redis+jwt进行用户认证和权限控制
开发语言·redis·golang