Redis Java 集成到 Spring Boot

Redis Java 集成到 Spring Boot
Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~
🌱🌱个人主页:奋斗的明志
🌱🌱所属专栏:Redis
📚本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。

Redis Java 集成到 Spring Boot

一、使用 Spring Boot 连接 Redis 单机

1.创建Spring Boot 项目

在这里插入图片描述

2.勾选相关依赖(Dependencies)

  • NoSQL 中的 Spring Data Redis
  • 把 Web 中的 Spring Web 也勾选⼀下.
  • 方便写接口进行后续测试.
在这里插入图片描述

在这里插入图片描述

3.界面显示

在这里插入图片描述

二、配置 Redis 服务地址

1.在 application.yml 中配置

spring: data: redis: host:127.0.0.1 # 地址 port:8888 # 映射的端口号 
补充:
Spring Boot 1.x 和 Spring Boot 2.x 中,spring.redis.host 用于配置 Redis 连接属性。
Spring Boot 3.x 中,spring.redis.host 已经弃用。
从 Spring Boot 2.x 开始,引入了 spring.data.redis 作为配置 Redis 连接的方式,并且在 Spring Boot 3.x 中也可以使用 spring.data.redis 进行配置。

2.映射端口号

  • 用Shell8 进行配置,需要一个公网ip
在这里插入图片描述

三、创建 Controller 类

1.创建一个 MyController

由于当前只是写简单的测试代码, 我们就不进⾏分层了. 就只创建个简单的 Controller 即可.
@RestControllerpublicclassMyController{@AutowiredprivateStringRedisTemplate redisTemplate;}
StringRedisTemplate 用来处理文本数据的
继承于RedisTemplate
RedisTemplate 可以处理文本数据也可以处理二进制数据
在这里插入图片描述

2.使用 String

@GetMapping("/testString")@ResponseBodypublicStringtestString(){//先清除之前的数据库 redisTemplate.execute((RedisConnection connection)->{ connection.flushAll();returnnull;});//对原生 redis 又做了进一步封装 redisTemplate.opsForValue().set("key","111"); redisTemplate.opsForValue().set("key2","222"); redisTemplate.opsForValue().set("key3","333");String value = redisTemplate.opsForValue().get("key");System.out.println("value:"+ value);return"OK";}
  1. 该代码片段是一个 Spring Boot 控制器方法,通过 RedisTemplate 与 Redis 进行交互,并进行一些基本的操作
  2. redisTemplate.execute((RedisConnection connection) -> { ... }):这行代码调用了 RedisTemplateexecute 方法,执行一个 Redis 操作。具体来说,connection.flushAll() 会清空 Redis 中的所有数据(即调用 FLUSHALL 命令)。execute 方法通过 Lambda 表达式传递了一个 Redis 连接对象,用来执行 Redis 命令。执行完 flushAll 后,Redis 中的所有数据会被删除。
  3. redisTemplate.opsForValue() 相当于对命令进行进一步的封装,用它可以调用相关方法。
  • 客户端发送请求(返回OK)表明已经成功
在这里插入图片描述

  • 打印日志
在这里插入图片描述

3.使用 List

@GetMapping("/testList")@ResponseBodypublicStringtestList(){//先清除之前的数据库 redisTemplate.execute((RedisConnection connection)->{ connection.flushAll();returnnull;}); redisTemplate.opsForList().leftPush("key","111"); redisTemplate.opsForList().leftPush("key","222"); redisTemplate.opsForList().leftPush("key","333");String value = redisTemplate.opsForList().leftPop("key");System.out.println("value: "+ value); value = redisTemplate.opsForList().leftPop("key");System.out.println("value: "+ value); value = redisTemplate.opsForList().leftPop("key");System.out.println("value: "+ value);return"OK";}
  • 客户端发送请求(返回OK)表明已经成功
在这里插入图片描述

  • 打印日志
在这里插入图片描述

4.使用 Set

@GetMapping("/testSet")@ResponseBodypublicStringtestSet(){//先清除之前的数据库 redisTemplate.execute((RedisConnection connection)->{ connection.flushAll();returnnull;}); redisTemplate.opsForSet().add("key","111","222","333");Set<String> result = redisTemplate.opsForSet().members("key");System.out.println("result: "+ result);Boolean exists = redisTemplate.opsForSet().isMember("key","111");System.out.println("existe: "+ exists);Long count = redisTemplate.opsForSet().size("key");System.out.println("count: "+ count); redisTemplate.opsForSet().remove("key","111","222"); result = redisTemplate.opsForSet().members("key");System.out.println("result: "+ result);return"OK";}
  • 客户端发送请求(返回OK)表明已经成功
在这里插入图片描述

  • 打印日志
在这里插入图片描述

5.使用 Hash

@GetMapping("/testHash")@ResponseBodypublicStringtestHash(){//先清除之前的数据库 redisTemplate.execute((RedisConnection connection)->{ connection.flushAll();returnnull;}); redisTemplate.opsForHash().put("key","f1","111");Map<String,String> map =newHashMap<>(); map.put("f2","222"); map.put("f3","333"); redisTemplate.opsForHash().putAll("key", map);String value =(String) redisTemplate.opsForHash().get("key","f1");System.out.println("value: "+ value);Boolean exists = redisTemplate.opsForHash().hasKey("key","f1");System.out.println("exists: "+ exists); redisTemplate.opsForHash().delete("key","f1","f2");Long len = redisTemplate.opsForHash().size("key");System.out.println("len: "+ len);return"OK";}
  • 客户端发送请求(返回OK)表明已经成功
在这里插入图片描述

  • 打印日志
在这里插入图片描述

6.使用 ZSet

@GetMapping("/testZSet")@ResponseBodypublicStringtestZSet(){//先清除之前的数据库 redisTemplate.execute((RedisConnection connection)->{ connection.flushAll();returnnull;}); redisTemplate.opsForZSet().add("key","zhangsan",10); redisTemplate.opsForZSet().add("key","lisi",20); redisTemplate.opsForZSet().add("key","wangwu",30);Set<String> members = redisTemplate.opsForZSet().range("key",0,-1);System.out.println("members: "+ members);Set<ZSetOperations.TypedTuple<String>> membersWithScores = redisTemplate.opsForZSet().rangeWithScores("key",0,-1);System.out.println("membersWithScores: "+ membersWithScores);Double score = redisTemplate.opsForZSet().score("key","zhangsan");System.out.println("score: "+ score); redisTemplate.opsForZSet().remove("key","zhangsan");Long size = redisTemplate.opsForZSet().size("key");System.out.println("size: "+ size);Long rank = redisTemplate.opsForZSet().rank("key","lisi");System.out.println("rank: "+ rank);return"OK";}
  • 客户端发送请求(返回OK)表明已经成功
在这里插入图片描述

  • 打印日志
在这里插入图片描述

四、小结

  • 对于 Jedis 来说, 各个方法和 Redis 的命令基本是一致的.
  • 而集成到 Spring Boot 之后, 接口上和原始 Redis命令存在部分差别, 但是使用起来也并不困难, 只要大家熟悉 Redis 的基本操作, 还是很容易可以通过方法名字理解用法的.
在这里插入图片描述

Read more

MCP客户端与服务端初使用——让deepseek调用查询天气的mcp来查询天气

MCP客户端与服务端初使用——让deepseek调用查询天气的mcp来查询天气

本系列主要通过调用天气的mcp server查询天气这个例子来学习什么是mcp,以及怎么设计mcp。话不多说,我们开始吧。主要参考的是B站的老哥做的一个教程,我把链接放到这里,大家如果有什么不懂的也可以去看一下。 https://www.bilibili.com/video/BV1NLXCYTEbj?spm_id_from=333.788.videopod.episodes&vd_source=32148098d54c83926572ec0bab6a3b1d https://blog.ZEEKLOG.net/fufan_LLM/article/details/146377471 最终的效果:让deepseek-v3使用天气查询的工具来查询指定地方的天气情况 技术介绍 MCP,即Model Context Protocol(模型上下文协议),是由Claude的母公司Anthropic在2024年底推出的一项创新技术协议。在它刚问世时,并未引起太多关注,反响较为平淡。然而,随着今年智能体Agent领域的迅猛发展,MCP逐渐进入大众视野并受到广泛关注。今年2月,

By Ne0inhk
可以在命令行通过大模型使用上下文协议(MCP)与外部工具交互的软件:小巧的MCPHost

可以在命令行通过大模型使用上下文协议(MCP)与外部工具交互的软件:小巧的MCPHost

小巧的MCPHost MCPHost 可以在命令行下使用,使大型语言模型(LLM)能够通过模型上下文协议(MCP)与外部工具进行交互。目前支持Claude 3.5 Sonnet和Ollama等。本次实践使用自己架设的Deepseek v3模型,跑通了Time MCP服务。  官网:GitHub - mark3labs/mcphost: A CLI host application that enables Large Language Models (LLMs) to interact with external tools through the Model Context Protocol (MCP). 下载安装 使用非常方便,直接下载解压即可使用。官网提供Windows、Linux和MacOS三个系统的压缩包: https://github.com/

By Ne0inhk
实战篇:Python开发monogod数据库mcp server看完你就会了

实战篇:Python开发monogod数据库mcp server看完你就会了

原创不易,请关注公众号:【爬虫与大模型开发】,大模型的应用开发之路,整理了大模型在现在的企业级应用的实操及大家需要注意的一些AI开发的知识点!持续输出爬虫与大模型的相关文章。 前言 目前mcp协议是给deepseek大模型插上工具链的翅膀,让大模型不仅拥有超高的推理和文本生成能力,还能具备执行大脑意识的工具能力! 如何开发一个mcp? mcp是一种协议,指的是模型上下文协议 (Model Context Protocol)。 官方结成的mcp https://github.com/modelcontextprotocol/python-sdk mcp库 pip install mcp from mcp.server.fastmcp import FastMCP 我们先来做一个简单的案例 from mcp.server.fastmcp import FastMCP import requests mcp = FastMCP("spider") @mcp.tool() def crawl(

By Ne0inhk
【大模型实战篇】基于Claude MCP协议的智能体落地示例

【大模型实战篇】基于Claude MCP协议的智能体落地示例

1. 背景         之前我们在《MCP(Model Context Protocol) 大模型智能体第一个开源标准协议》一文中,介绍了MCP的概念,虽然了解了其概念、架构、解决的问题,但还缺少具体的示例,来帮助进一步理解整套MCP框架如何落地。         今天我们基于claude的官方例子--获取天气预报【1】,来理解MCP落地的整条链路。 2. MCP示例         该案例是构建一个简单的MCP天气预报服务器,并将其连接到主机,即Claude for Desktop。从基本设置开始,然后逐步发展到更复杂的使用场景。         大模型虽然能力非常强,但其弊端就是内容是过时的,这里的过时不是说内容很旧,只是表达内容具有非实时性。比如没有获取天气预报和严重天气警报的能力。因此我们将使用MCP来解决这一问题。         构建一个服务器,该服务器提供两个工具:获取警报(get-alerts)和获取预报(get-forecast)。然后,将该服务器连接到MCP主机(在本例中为Claude for Desktop)。         首先我们配置下环

By Ne0inhk