Springboot整合RedisStack的实现示例
更新时间:2026年07月28日 09:28:30 作者:Listen·Rain
本文介绍了SpringBoot整合RedisStack的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
1.pom依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.28.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
2.application.properties
spring.application.name=demo-redisstack server.port: 8088 spring.data.redis.host: localhost spring.data.redis.port: 6379
3.RedisStackService
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 saveUser(User user) {
JsonBucketOptions<Object> codec = JsonBucketOptions
.name(KEY_PREFIX + user.getId()).codec(new JacksonCodec<>(Object.class));
RJsonBucket<Object> jsonBucket = redissonClient.getJsonBucket(codec);
jsonBucket.set(user);
}
// 2. 获取 JSON 数据
public Object getUser(String id) {
JsonBucketOptions<Object> codec = JsonBucketOptions
.name(KEY_PREFIX + id).codec(new JacksonCodec<>(Object.class));
RJsonBucket<Object> bucket = redissonClient.getJsonBucket(codec);
return bucket.get();
}
// 3. 执行搜索 (例如:搜索名字包含 keyword 且年龄大于 minAge 的用户)
public SearchResult searchUsers(String keyword, int minAge) {
// 构建查询语句:名字模糊匹配 AND 年龄范围查询
// @name:keyword 表示全文检索包含 keyword
// @age:[minAge +inf] 表示 age >= minAge
String query = String.format("@name:%s @age:[%d +inf]", keyword, minAge);
return redissonClient.getSearch(StringCodec.INSTANCE).search(INDEX_NAME, query, QueryOptions.defaults());
}
}
4.TestController
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 java.util.List;
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private RedisStackService redisStackService;
// 测试存入数据
@GetMapping("/save")
public String save() {
User user = new User();
user.setId("1001");
user.setName("Alice Developer");
user.setAge(30);
user.setTags(List.of("developer", "docker"));
redisStackService.saveUser(user);
return "User Saved";
}
// 测试获取数据
@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);
}
}
5.测试结果
1.存入数据

2.获取数据

3.搜索功能

到此这篇关于Springboot整合RedisStack的实现示例的文章就介绍到这了,更多相关Springboot整合RedisStack内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Springboot自动配置原理及DataSource的应用方式
这篇文章主要介绍了Springboot自动配置原理及DataSource的应用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-07-07
解决Maven parent.relativePath带给我的坑
在Linux环境下使用Maven进行项目打包时,可能会遇到“当前目录没有pom文件”的错误,需要确认在包含pom.xml文件的项目目录下执行Maven命令,另外,如果遇到“parent.relativePath points at wrong local POM”错误,可能是父模块依赖问题2024-09-09
详解mybatis-plus实体类中字段和数据库中字段名不对应解决办法
这篇文章主要介绍了详解mybatis-plus实体类中字段和数据库中字段名不对应解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-03-03
Java字符串分解技术substring、tokenizing和trimming方法的使用
这篇文章主要介绍了Java字符串分解技术substring、tokenizing和trimming方法的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2025-05-05


最新评论