发布于2026-07-28 阅读(0)
扫一扫,手机访问
最近在折腾 Spring Boot 整合 Redis Stack 做 JSON 搜索,发现 Redisson 的客户端封装得相当顺手。这里把完整的实现步骤拆开来讲,从依赖配置到服务编写再到测试验证,一条线走通。
首先,引入必要的依赖。这里用到了 Spring Boot 的 Redis Starter、Redisson 的 Spring Boot Starter,以及 Web 和 Lombok。注意 Redisson 的版本我们指定了 3.28.0,这是目前比较稳定的一个版本。
org.springframework.boot spring-boot-starter-data-redis org.redisson redisson-spring-boot-starter 3.28.0 org.springframework.boot spring-boot-starter-web org.projectlombok lombok true
配置方面很简单,就指定一下应用名、端口,以及 Redis 的连接地址。本地测试就按默认的 localhost:6379 来写。
spring.application.name=demo-redisstack server.port: 8088 spring.data.redis.host: localhost spring.data.redis.port: 6379
核心服务类,负责创建索引、保存 JSON 数据、获取数据以及执行搜索。这里用到了 Redisson 的 RJsonBucket 和搜索 API,代码量不大但功能完整。
package com.example.demoredisstack.service;
import com.example.demoredisstack.entity.User;
import jakarta.annotation.PostConstruct;
import org.redisson.api.RJsonBucket;
import org.redisson.api.RedissonClient;
import org.redisson.api.options.JsonBucketOptions;
import org.redisson.api.search.index.FieldIndex;
import org.redisson.api.search.index.IndexOptions;
import org.redisson.api.search.index.IndexType;
import org.redisson.api.search.query.QueryOptions;
import org.redisson.api.search.query.SearchResult;
import org.redisson.client.codec.StringCodec;
import org.redisson.codec.JacksonCodec;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class RedisStackService {
@Autowired
private RedissonClient redissonClient;
private static final String INDEX_NAME = "idx:users";
private static final String KEY_PREFIX = "user:";
// 项目启动时自动创建索引
@PostConstruct
public void initIndex() {
try {
redissonClient.getSearch().createIndex(INDEX_NAME,
IndexOptions.defaults()
.on(IndexType.JSON)
.prefix(KEY_PREFIX),
FieldIndex.text("$.name").as("name"),
FieldIndex.numeric("$.age").as("age"),
FieldIndex.tag("$.tags").as("tags")
);
} catch (Exception e) {
System.out.println("索引可能已存在或创建失败: " + e.getMessage());
}
}
// 1. 保存 JSON 数据
public void sa veUser(User user) {
JsonBucketOptions
这里有几个关键点值得留意:
@PostConstruct 中自动执行,首次启动时创建,如果索引已存在会捕获异常并打印提示,不影响后续使用。JacksonCodec 将 Ja va 对象序列化为 JSON 存入 Redis,读取时同样反序列化回来。@name:keyword 表示对 name 字段进行模糊匹配,@age:[minAge +inf] 表示年龄大于等于 minAge。测试控制器,提供三个简单的 REST 接口:保存用户、根据 ID 获取用户、按名字和最小年龄搜索。
package com.example.demoredisstack.controller;
import com.example.demoredisstack.entity.User;
import com.example.demoredisstack.service.RedisStackService;
import org.redisson.api.search.query.SearchResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import ja va.util.List;
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private RedisStackService redisStackService;
// 测试存入数据
@GetMapping("/sa ve")
public String sa ve() {
User user = new User();
user.setId("1001");
user.setName("Alice Developer");
user.setAge(30);
user.setTags(List.of("developer", "docker"));
redisStackService.sa veUser(user);
return "User Sa ved";
}
// 测试获取数据
@GetMapping("/get/{id}")
public Object get(@PathVariable String id) {
return redisStackService.getUser(id);
}
// 测试搜索功能
@GetMapping("/search")
public SearchResult search(@RequestParam String name, @RequestParam(defaultValue = "0") int minAge) {
return redisStackService.searchUsers(name, minAge);
}
}
为了方便测试,我们直接硬编码了一个用户 Alice,并提供了搜索接口。注意搜索时 name 参数可以只传部分关键字,比如 "Alice" 就能匹配到 "Alice Developer"。
启动应用,依次访问三个接口,验证功能是否正常。
1. 存入数据

2. 获取数据

3. 搜索功能

从测试结果可以看到,搜索功能成功地根据名字关键字和年龄条件返回了匹配的用户数据。整个过程下来,Redisson 对 Redis Stack 的封装确实很友好,代码量少,配置简单,值得在生产环境中尝试。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8