Spring Boot 教程

集成 Redis

Redis 是一个开源的且使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。

它通常被称为数据结构服务器,因为值(value)可以是字符串(String), 哈希(Map), 列表(list), 集合(sets)和有序集合(sorted sets)等类型。

至于怎样在 Windows 和 Linux 安装和使用 Redis 这里将不再赘述。关于 Redis 的用法,读者可以自行参考 https://redis.io/documentation 官网。

启动 Redis

笔者为了简单和方便,将使用 Windows 版本的 Redis。运行 redis-server.exe 去启动 Redis,如下:

redis-server.exe ./redis.windows.conf

Redis 启动结果:

                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 3.0.503 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 10848
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'
[10848] 30 Nov 12:38:02.783 # Server started, Redis version 3.0.503
[10848] 30 Nov 12:38:02.790 * DB loaded from disk: 0.001 seconds
[10848] 30 Nov 12:38:02.790 * The server is now ready to accept connections on port 6379

集成 Redis

添加依赖

在项目的 pom.xml 文件中添加如下依赖:

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

配置 Redis

在 resources/application.yml 文件中添加 Redis 配置,配置信息如下:

spring:
  # Redis配置
  redis:
    # Redis数据库索引(默认为0)
    database: 0
    # Redis主机地址
    host: 127.0.0.1
    # redis端口
    port: 6379

创建 RedisTemplate

使用 @Configuration 注解创建一个 RedisTemplate 实例,代码如下:

import org.springframework.cache.annotation.EnableCaching;
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.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
@EnableCaching
public class RedisTemplateConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        // 配置 Redis Template 序列化方式
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(redisSerializer);
        template.setValueSerializer(redisSerializer);
        template.setHashKeySerializer(redisSerializer);
        template.setHashValueSerializer(redisSerializer);
        template.afterPropertiesSet();
        return template;
    }
}

使用 RedisTemplate 进行对象存储时,需要使存储对象实现 Serializable 接口,这样才能够成功将对象进行序列化。

spring-data-redis 提供了多种 Serializer 策略,这对使用 jedis 的开发者而言,实在是非常便捷。spring-data-redis 提供了4种内置的 Serializer:

  • JdkSerializationRedisSerializer:使用 JDK 的序列化手段 (Serializable 接口,ObjectInputStrean,ObjectOutputStream),数据以字节流存储

  • StringRedisSerializer:字符串编码,数据以 String 存储

  • JacksonJsonRedisSerializer:json 格式存储

  • OxmSerializer:xml 格式存储

由于本实例仅仅用于演示,因此上面的实例将简单将字符串存储到 Redis,序列化对象使用 StringRedisSerializer。

使用 RedisTemplate

由于前面已经创建了 RedisTemplate 实例,可以使用 @Autowired 注解注入 RedisTemplate 实例。代码如下:

import com.huangx.springboot.redis.services.RedisService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
@Service
public class RedisServiceImpl {
    @Autowired
    private RedisTemplate redisTemplate;
    // 向 Redis 写入一个 KEY/VALUE
    @Override
    public void setValue(String key, String value) {
        if (StringUtils.isBlank(key) || StringUtils.isBlank(value)) {
            throw new IllegalArgumentException("key或value不能为空");
        }
        ValueOperations<String, String> operations = redisTemplate.opsForValue();
        operations.set(key, value);
    }
    // 从 Redis 获取指定 KEY 的值
    @Override
    public String getValue(String key) {
        if (StringUtils.isBlank(key)) {
            throw new IllegalArgumentException("key不能为空");
        }
        ValueOperations<String, String> operations = redisTemplate.opsForValue();
        return operations.get(key);
    }
}

到这里,Spring Boot 集成 Redis 完成了。

总结

Spring Boot 集成 Redis 步骤如下:

(1)启动 Redis 服务

(2)创建一个 Spring Boot 项目,引入 Spring Boot Redis 依赖

(3)在 Spring Boot 中配置 Redis,如:Redis 主机地址、端口、密码等

(4)使用 @Configuration 注解创建 RedisTemplate 的实例

(5)使用 @Autowired 注解注入 RedisTemplate 的实例

(6)使用 RedisTemplate 实例向 Redis 写入/获取数据

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号