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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论