当前位置:首页 > 行业动态 > 正文

springboot redis 批量查询

简介

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API,在 Spring Boot 项目中,我们可以使用 RedisTemplate 或者 StringRedisTemplate 来操作 Redis 数据,本文将介绍如何在 Spring Boot 项目中批量修改 Redis 数据。

springboot redis 批量查询  第1张

使用 RedisTemplate 批量修改 Redis

1、我们需要在项目中引入 Redis 相关依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2、在 application.properties 文件中配置 Redis 连接信息:

spring.redis.host=localhost
spring.redis.port=6379

3、在项目中创建一个 RedisService 类,用于封装 Redis 操作方法:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@Service
public class RedisService {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    /**
     * set key value with timeout
     * @param key the key of the Redis object to store in the database
     * @param value the data object to be stored in the database
     * @param timeout the time that the key will expire in seconds, optional, default is null, means never expire.
     */
    public void set(String key, Object value, Integer timeout) {
        redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
    }
}

4、在需要批量修改 Redis 数据的业务类中,注入 RedisService,然后调用 set 方法进行批量修改:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Service
public class TestService {
    @Autowired
    private RedisService redisService;
    /**
     * batch set key value with timeout for all keys in map
     * @param keyValues a map contains key-value pairs to be stored in the database, like {"key1":"value1", "key2":"value2"}
     * @param timeout the time that the key will expire in seconds, optional, default is null, means never expire.
     */
    public void batchSet(Map<String, Object> keyValues, Integer timeout) {
        for (Map.Entry<String, Object> entry : keyValues.entrySet()) {
            redisService.set(entry.getKey(), entry.getValue(), timeout);
        }
    }
}

使用 StringRedisTemplate 批量修改 Redis(适用于字符串类型的数据)

与 RedisTemplate 类似,我们可以使用 StringRedisTemplate 这个类来操作 Redis,首先需要在项目中引入 RedisStringRedisSerializer:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

然后在配置文件中添加 StringRedisSerializer:

spring.redis.string-serializer=org.springframework.data.redis.serializer.StringRedisSerializer$Instance

接下来,我们可以在 TestService 类中使用 StringRedisTemplate 实现批量修改 Redis:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.SessionCallback;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframeworktransactionsupport.TransactionSynchronizationManager; // 注意引入此包以支持事务回滚功能(如果需要)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-> 如果需要支持事务回滚功能,请务必引入此包(否则无法实现事务回滚功能)<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<---------------------------------------------------------------------------------------------------> 注意引入此包以支持事务回滚功能(如果需要) <---------------------------------------------------------------------------------------------------<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<---------------------------------------------------------------------------------------------------> 注意引入此包以支持事务回滚功能(如果需要) <---------------------------------------------------------------------------------------------------<<<<<<<<<<<<<<<<<<------------------------------------------------------------------------------------------------------------------------------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>注意:这里使用了 Java8 Stream API 对多个 key 同时进行批量修改操作,如果使用的是 Spring Boot 2 以及更高版本,可以考虑使用 Spring Data Redis 直接进行批量操作。
0