欢迎访问宙启技术站
智能推送

springboot中redis正确的使用详解

发布时间:2023-05-18 14:33:13

SpringBoot中使用Redis可以更方便地进行缓存管理和持久化存储。正确的使用Redis可以提高应用程序的效率和性能。本文将详细介绍SpringBoot中Redis的正确使用方法:

一、引入Redis依赖

SpringBoot中使用Redis需要引入相关依赖,可以在pom文件中添加以下依赖:

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

二、配置Redis

在application.properties或application.yml文件中添加Redis的配置信息:

#### application.properties

# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(默认为8)
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(默认为-1,表示没有限制)
spring.redis.lettuce.pool.max-wait=-1ms
# 连接池最大空闲连接数(默认为8)
spring.redis.lettuce.pool.max-idle=8
# 连接池最小空闲连接数(默认为0)
spring.redis.lettuce.pool.min-idle=0

#### application.yml

spring:
  redis:
    # Redis服务器地址
    host: localhost
    # Redis服务器连接端口
    port: 6379
    # Redis服务器连接密码(默认为空)
    password: 
    # 连接池最大连接数(默认为8)
    lettuce:
      pool:
        max-active: 8
    # 连接池最大阻塞等待时间(默认为-1,表示没有限制)
        max-wait: -1ms
    # 连接池最大空闲连接数(默认为8)
        max-idle: 8
    # 连接池最小空闲连接数(默认为0)
        min-idle: 0

三、配置RedisTemplate

在Spring中,可以使用RedisTemplate对Redis进行操作,因此需要对RedisTemplate进行配置:

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);
        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(mapper);
        redisTemplate.setValueSerializer(serializer);
        //使用StringRedisSerializer来序列化和反序列化redis的key值
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

在配置类中,需要创建一个RedisTemplate对象,并配置其序列化和反序列化方式。在这里我们使用了Jackson2JsonRedisSerializer来序列化和反序列化redis的value值,它可以支持任何Java对象的序列化和反序列化。同时,使用StringRedisSerializer来序列化和反序列化redis的key值。

四、使用RedisTemplate

配置完RedisTemplate后,就可以使用它来对Redis进行操作了,以下是RedisTemplate的常用方法:

#### set(key, value)

设置缓存,key为字符串类型,value为任意类型。

redisTemplate.opsForValue().set("name", "Tom");

#### get(key)

获取缓存,key为字符串类型,返回值为Object类型。

Object name = redisTemplate.opsForValue().get("name");

#### delete(key)

删除缓存,key为字符串类型。

redisTemplate.delete("name");

#### exists(key)

判断缓存是否存在,key为字符串类型,返回值为boolean类型。

boolean hasKey = redisTemplate.hasKey("name");

#### expire(key, timeout, unit)

设置缓存过期时间,key为字符串类型,timeout为过期时间,unit为时间单位。

redisTemplate.expire("name", 60, TimeUnit.SECONDS);

#### incre(key, delta)

对缓存值进行自增操作,key为字符串类型,delta为自增步长,返回值为自增后的值。

redisTemplate.opsForValue().increment("num", 1);

#### decr(key, delta)

对缓存值进行自减操作,key为字符串类型,delta为自减步长,返回值为自减后的值。

redisTemplate.opsForValue().decrement("num", 1);

#### lpush(key, value)

将数据插入List中,key为字符串类型,value为任意类型,返回值为List的长度。

redisTemplate.opsForList().leftPush("books", "Java");

#### rpop(key)

从List中弹出最后一个元素,key为字符串类型,返回值为弹出的元素值。

Object book = redisTemplate.opsForList().rightPop("books");

#### sadd(key, value)

添加元素到Set中,key为字符串类型,value为任意类型,返回值为添加元素的数量。

redisTemplate.opsForSet().add("users", "Tom");

#### srem(key, value)

从Set中删除元素,key为字符串类型,value为任意类型,返回值为删除元素的数量。

redisTemplate.opsForSet().remove("users", "Tom");

#### smembers(key)

获取Set中的所有元素,key为字符串类型,返回值为Set类型。

Set<Object> users = redisTemplate.opsForSet().members("users");

通过以上示例,你已经可以掌握了SpringBoot中使用Redis的正确方法。总结一下:

1. 引入Redis依赖;

2. 配置Redis;

3. 配置RedisTemplate;

4. 使用RedisTemplate操作Redis。

最后贴一下完整的工程源代码:

### 1、pom.xml

<dependencies>
    <!-- SpringBoot-web组件 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.3.5.RELEASE</version>
    </dependency>

    <!-- SpringBoot-test组件 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>2.3.5.RELEASE</version>
        <scope>test</scope>
    </dependency>

    <!-- SpringBoot-redis组件 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
        <version>2.3.5.RELEASE</version>
    </dependency>
</dependencies>

### 2、application.properties

# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(默认为8)
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(默认为-1,表示没有限制)
spring.redis.lettuce.pool.max-wait=-1ms
# 连接池最大空闲连接数(默认为8)
spring.redis.lettuce.pool.max-idle=8
# 连接池最小空闲连接数(默认为0)
spring.redis.lettuce.pool.min-idle=0

### 3、RedisConfig.java

`java

@Configuration

public class RedisConfig {

@Bean

public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {

RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();

redisTemplate.setConnectionFactory(factory);

//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)

Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

ObjectMapper mapper = new ObjectMapper();

mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

mapper.enableDefaultTyping(ObjectMapper