Spring Boot 集成 Redis

1、环境配置

添加依赖

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

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
</dependency>

配置 application.properties 文件,注意根据自己的 Spring Boot 版本进行更改

# 数据库索引
spring.redis.database=0
# 服务器地址
spring.redis.host=localhost
# 端口号
spring.redis.port=6379
# 连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(负值表示无限制)
spring.redis.jedis.pool.max-active=8
# 连接池最长阻塞时间(负值表示无限制)
spring.redis.jedis.pool.max-wait=-1ms
# 连接池最大连接数
spring.redis.jedis.pool.max-idle=8
# 连接池最小连接数
spring.redis.jedis.pool.min-idle=8
# 连接超时时间(毫秒)
spring.redis.timeout=5000

# 若SpringBoot版本较低,部分参数应更改如下
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0

2、集成测试

使用内置的 StringRedisTemplate 执行简单的操作,测试是否集成成功。

   @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    public void test(){
        stringRedisTemplate.opsForValue().set("111", "aaa");
        stringRedisTemplate.opsForValue().set("222", "bbb");
    }

接着打开 redis-cli,查询相关 key,查看是否成功:

127.0.0.1:6379> get 111
"aaa"
127.0.0.1:6379> get 222
"ddd"

3、StringRedisTemplate 相关操作

StringRedisTemplate 是 Spring Boot 内置的操作 Redis 的 API,其假定所有的数据类型都是字符类型。

3.1、 opsForxxx

  • opsForValue,用来设置普通的 Key-Value
  • opsForList,用来操作 List
  • opsForHash,用来操作Hash

3.2、boundxxxOps

opsForxxx 需要输入 Key,如果需要对一个 Key 进行多次操作,可以使用 boundxxxOps 指定 Key,返回 BoundXXXOperations

  • boundValueOps 返回 BoundValueOperations,用来操作Value
  • boundListOps 返回 BoundListOperations,用来操作List
  • boundHashOps 返回 BoundHashOperations,用来操作Hash
  • boundSetOps 返回 BoundSetOperations,用来操作Set
  • boundZSetOps 返回 BoundZSetOperations,用来操作Sorted Set
  • boundGeoOps 返回 BoundGeoOperations,Geo、地理信息相关操作

4、序列化策略

StringRedisTemplate 提供了对字符串的序列化,RedisTemplate 使用了 JDK 的序列化策略。

创建可序列化对象:

public class User implements Serializable {

    private int id;
    private  String name;
    Date date = new Date();

    public static User getSampleUser(){
        User user = new User();
        user.setId(123);
        user.setName("abc");
        return user;
    }
    
    //省略 Getter 和 Setter 方法
}

必须实现 Seriallizable 接口,不然会出现 SerializationException 错误

   @Autowired
    @Qualifier("redisTemplate")
    private RedisTemplate redisTemplate;

    @Test
    public void test(){
        redisTemplate.opsForValue().set("key1", "aaa");
        redisTemplate.opsForValue().set("key2", User.getSampleUser());
    }

因为是通过序列化存储的,所以需要通过以下命令找到 Key:

127.0.0.1:6379> keys *key1
1) "\xac\xed\x00\x05t\x00\x04key1"
127.0.0.1:6379> get "\xac\xed\x00\x05t\x00\x04key1"
"\xac\xed\x00\x05t\x00\x05hello"

"\xac\xed\x00\x05t\x00\x05" 就是序列化后的对象的描述信息,hello 是对象的数据内容。

我们可以用以下方法获取值:

String value = (String) redisTemplate.opsForValue().get("key1");
User user = (User) redisTemplate.opsForValue().get("key2");

Redis 还支持自定义序列化,先挖个坑,有空填上。

  • 用支付宝打我
  • 用微信打我

Long may the sunshine

一条回应:“Spring Boot 集成 Redis”

  1. vultr说道:

    完全看不懂 路过

vultr进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注

召唤蕾姆