当前位置: 代码网 > it编程>编程语言>Java > Springboot整合RedisStack的实现示例

Springboot整合RedisStack的实现示例

2026年07月28日 Java 我要评论
1.pom依赖<dependency><groupid>org.springframework.boot</groupid><artifactid>sp

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com