Spring Boot使用Redis提升天气预报应用的并发访问能力

redis 大总结 什么是redis 1.Redis 是用C语言开发的一个开源的高性能键值对( key-value )内存数据库,它是一种NoSQL 数据库。 2.它是【单进程单线程】的内存数据库,所以说不存在线程安全问题。(ps:6.x版本为io多线程,工作线程单线程) 3.它可以支持并发 10W QPS,所以说性能非常优秀。因为底层采用了【IO多路复用(NIO思想)】 4.相比于同类产品memcache,更优秀的读写性能,及丰富的数据类型。 5.五种数据类型来存储【值】:字符串类型(string)、散列类型(ha 阅读详情

有时,为了提升整个网站的性能,我们会将经常需要访问数据缓存起来,这样,在下次查询的时候,能快速的找到这些数据。
缓存的使用与系统的时效性有着非常大的关系。当我们的系统时效性要求不高时,则选择使用缓存是极好的。当系统要求的时效性比较高时,则并不适合用缓存。
本文,我们将演示如何通过集成 Redis 服务器来进行数据的缓存,以提高微服务的并发访问能力。

为啥我们需要缓存

在之前的文章中,我们已经介绍了如何使用 Spring Boot 来快速实现一个天气预报服务应用micro-weather-basic(见 https://www.imooc.com/article/20253)。通过该应用,能实现简单的天气查询。

天气数据接口,本身时效性不是很高,而且又因为是 Web 服务,在调用过程中,本身是存在延时的。所以,采用缓存,一方面可以有效减轻访问天气接口服务带来的延时问题,另一方面,也可以减轻天气接口的负担,提高并发访问量。

特别地,我们是使用的第三方免费的天气 API,这些 API 往往对用户的调用次数及频率有一定的限制。所以为了减轻天气 API 提供方的负荷,我们并不需要实时去调用其第三方接口。

在micro-weather-basic的基础上,我们构建了一个micro-weather-redis项目,作为示例。

开发环境

为了演示本例子,需要采用如下开发环境:

  • JDK 8
  • Gradle 4.0
  • Spring Boot Web Starter 2.0.0.M4
  • Apache HttpClient 4.5.3
  • Spring Boot Data Redis Starter 2.0.0.M4
  • Redis 3.2.100
项目配置

Spring Boot Data Redis 提供了 Spring Boot 对 Redis 的开箱即用的功能。在原有的依赖的基础上,添加 Spring Boot Data Redis Starter 的依赖。

// 依赖关系
dependencies {
    //...

    // 添加 Spring Boot Data Redis Starter 依赖
    compile('org.springframework.boot:spring-boot-starter-data-redis')

    //...
}
下载安装、运行 Redis

在 Linux 平台上安装 Redis 比较简单,可以参考官方文档来即可,详见https://github.com/antirez/redis。

而在 Windows 平台,微软特别为 Redis 制作了安装包,下载地址见 https://github.com/MicrosoftArchive/redis/releases。本书所使用的案例,也是基于该安装包来进行的。双击 redis-server.exe 文件,就能快速启动 Redis 服务器了。

安装后,Redis 默认运行在 <localhost:6379> 地址端口

修改 WeatherDataServiceImpl

修改 WeatherDataServiceImpl,增加了 StringRedisTemplate 用于操作 Redis。

@Service
public class WeatherDataServiceImpl implements WeatherDataService {

    private final static Logger logger = LoggerFactory.getLogger(WeatherDataServiceImpl.class);  

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    private final String WEATHER_API = "http://wthrcdn.etouch.cn/weather_mini";

    private final Long TIME_OUT = 1800L; // 缓存超时时间

    @Override
    public WeatherResponse getDataByCityId(String cityId) {
        String uri = WEATHER_API + "?citykey=" + cityId;
        return this.doGetWeatherData(uri);
    }

    @Override
    public WeatherResponse getDataByCityName(String cityName) {
        String uri = WEATHER_API + "?city=" + cityName;
        return this.doGetWeatherData(uri);
    }

    private WeatherResponse doGetWeatherData(String uri) {
        ValueOperations<String, String> ops = this.stringRedisTemplate.opsForValue();
        String key = uri; // 将调用的 URI 作为缓存的key
        String strBody = null;

        // 先查缓存,没有再查服务
        if (!this.stringRedisTemplate.hasKey(key)) {
            logger.info("未找到 key " + key);

            ResponseEntity<String> response = restTemplate.getForEntity(uri, String.class);

            if (response.getStatusCodeValue() == 200) {
                strBody = response.getBody();
            }

            ops.set(key, strBody, TIME_OUT, TimeUnit.SECONDS);
        } else {
            logger.info("找到 key " + key + ", value=" + ops.get(key));

            strBody = ops.get(key);
        }

        ObjectMapper mapper = new ObjectMapper();
        WeatherResponse weather = null;

        try {
            weather = mapper.readValue(strBody, WeatherResponse.class);
        } catch (IOException e) {
            logger.error("JSON反序列化异常!",e);
        }

        return weather;
    }

}

修改了 doGetWeatherData 方法,增加了 Redis 数据的判断:

  • 当存在某个key(天气接口的URI,是唯一代表某个地区的天气数据)时,我们就从 Redis 里面拿缓存数据;
  • 当不存在某个key(没有初始化数据或者数据过期了),从去天气接口里面去取最新的数据,并初始化到 Redis 中;
  • 由于天气数据更新频率的特点(基本上一个小时或者半个小时更新一次),所以,我们在 Redis 里面设置了30分钟的超时时间。

其中,当然 StringRedisTemplate 跟 RedisTemplate 功能类似,都是封装了对 Redis 的一些常用的操作。区别在于,StringRedisTemplate 更加专注于基于字符串的操作,毕竟,在目前咱们的天气预报应用中,数据的格式主要是 JSON 字符串。

ValueOperations 接口,封装了大部分的简单的 K-V 操作。

同时,我们也使用了日志框架,用来记录运行过程,及日常的信息。

测试、运行

首先,在进行测试前,需要将 Redis 服务器启动起来。

我们可以通过在一个时间段内,多次访问同一个个天气接口来测试效果,比如,接口 http://localhost:8080/weather/cityId/101280601。为了缩短测试的时间,我们可以将 Redis 的超时时间缩短一点,比如10秒。这样,你就不用苦等30分钟才能验证数据是否过期了。

2017-10-18 23:51:41.762  INFO 15220 --- [nio-8080-exec-6] c.w.s.c.w.s.WeatherDataServiceImpl       : 未找到 key http://wthrcdn.etouch.cn/weather_mini?citykey=101280601
2017-10-18 23:51:43.649  INFO 15220 --- [nio-8080-exec-5] c.w.s.c.w.s.WeatherDataServiceImpl       : 找到 key http://wthrcdn.etouch.cn/weather_mini?citykey=101280601, value={"data":{"yesterday":{"date":"17日星期二","high":"高温 29℃","fx":"无持续风向","low":"低温 22℃","fl":"<![CDATA[<3级]]>","type":"多云"},"city":"深圳","aqi":"35","forecast":[{"date":"18日星期三","high":"高温 29℃","fengli":"<![CDATA[<3级]]>","low":"低温 23℃","fengxiang":"无持续风向","type":"多云"},{"date":"19日星期四","high":"高温 29℃","fengli":"<![CDATA[<3级]]>","low":"低温 23℃","fengxiang":"无持续风向","type":"多云"},{"date":"20日星期五","high":"高温 30℃","fengli":"<![CDATA[<3级]]>","low":"低温 22℃","fengxiang":"无持续风向","type":"多云"},{"date":"21日星期六","high":"高温 29℃","fengli":"<![CDATA[<3级]]>","low":"低温 21℃","fengxiang":"无持续风向","type":"多云"},{"date":"22日星期天","high":"高温 28℃","fengli":"<![CDATA[<3级]]>","low":"低温 21℃","fengxiang":"无持续风向","type":"多云"}],"ganmao":"各项气象条件适宜,无明显降温过程,发生感冒机率较低。","wendu":"25"},"status":1000,"desc":"OK"}
2017-10-18 23:51:46.700  INFO 15220 --- [nio-8080-exec-7] c.w.s.c.w.s.WeatherDataServiceImpl       : 找到 key http://wthrcdn.etouch.cn/weather_mini?citykey=101280601, value={"data":{"yesterday":{"date":"17日星期二","high":"高温 29℃","fx":"无持续风向","low":"低温 22℃","fl":"<![CDATA[<3级]]>","type":"多云"},"city":"深圳","aqi":"35","forecast":[{"date":"18日星期三","high":"高温 29℃","fengli":"<![CDATA[<3级]]>","low":"低温 23℃","fengxiang":"无持续风向","type":"多云"},{"date":"19日星期四","high":"高温 29℃","fengli":"<![CDATA[<3级]]>","low":"低温 23℃","fengxiang":"无持续风向","type":"多云"},{"date":"20日星期五","high":"高温 30℃","fengli":"<![CDATA[<3级]]>","low":"低温 22℃","fengxiang":"无持续风向","type":"多云"},{"date":"21日星期六","high":"高温 29℃","fengli":"<![CDATA[<3级]]>","low":"低温 21℃","fengxiang":"无持续风向","type":"多云"},{"date":"22日星期天","high":"高温 28℃","fengli":"<![CDATA[<3级]]>","low":"低温 21℃","fengxiang":"无持续风向","type":"多云"}],"ganmao":"各项气象条件适宜,无明显降温过程,发生感冒机率较低。","wendu":"25"},"status":1000,"desc":"OK"}
2017-10-18 23:51:50.513  INFO 15220 --- [nio-8080-exec-8] c.w.s.c.w.s.WeatherDataServiceImpl       : 找到 key http://wthrcdn.etouch.cn/weather_mini?citykey=101280601, value={"data":{"yesterday":{"date":"17日星期二","high":"高温 29℃","fx":"无持续风向","low":"低温 22℃","fl":"<![CDATA[<3级]]>","type":"多云"},"city":"深圳","aqi":"35","forecast":[{"date":"18日星期三","high":"高温 29℃","fengli":"<![CDATA[<3级]]>","low":"低温 23℃","fengxiang":"无持续风向","type":"多云"},{"date":"19日星期四","high":"高温 29℃","fengli":"<![CDATA[<3级]]>","low":"低温 23℃","fengxiang":"无持续风向","type":"多云"},{"date":"20日星期五","high":"高温 30℃","fengli":"<![CDATA[<3级]]>","low":"低温 22℃","fengxiang":"无持续风向","type":"多云"},{"date":"21日星期六","high":"高温 29℃","fengli":"<![CDATA[<3级]]>","low":"低温 21℃","fengxiang":"无持续风向","type":"多云"},{"date":"22日星期天","high":"高温 28℃","fengli":"<![CDATA[<3级]]>","low":"低温 21℃","fengxiang":"无持续风向","type":"多云"}],"ganmao":"各项气象条件适宜,无明显降温过程,发生感冒机率较低。","wendu":"25"},"status":1000,"desc":"OK"}
2017-10-18 23:51:53.140  INFO 15220 --- [nio-8080-exec-9] c.w.s.c.w.s.WeatherDataServiceImpl       : 未找到 key http://wthrcdn.etouch.cn/weather_mini?citykey=101280601

从上述日志可以看到,第一次(23:51:41)访问接口时,没有找到 Redis 里面的数据,所以,就初始化了数据。
后面几次访问,都是访问 Redis 里面的数据。最后一次(23:51:53),由于超时了,所以 Redis 里面又没有数据了,所以又会拿天气接口的数据。

源码

本章节的源码,见 https://github.com/waylau/spring-cloud-tutorial/ samples目录下的 micro-weather-redis目录下。

参考资料
作者: 老卫 
链接:https://www.imooc.com/article/23435
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作
VASP从头算分子动力学(AIMD)参数设置与实战避坑指南 从头算分子动力学(AIMD)基于密度泛函理论实时计算原子间受力,无需经验势函数即可模拟化学键断裂与电荷转移,是研究材料有限温性质的核心方法。其技术价值在于第一性原理精度下的动力学采样,广泛应用于扩散系数计算、热膨胀系数预测及亚稳相稳定性评估等场景。在VASP中实现AIMD需正确配置MDALGO、POTIM、TEBEG/TEEND等关键参数,并合理选择NVE、NVT、NPT系综。时间步长与温度控制策略直接影响模拟稳定性,含氢体系通常需0.5 fs步长,而Nose-Hoover与Langevin恒温器的分阶段使 阅读详情

相关推荐

2026年Java开发首选:Spring Boot核心原理与工程实践

Spring Boot作为Java生态中事实标准的工程化框架,其本质是通过‘约定优于配置’和条件化自动装配机制,大幅降低企业级应用的基础设施复杂度。它将Servlet容器、数据访问、JSON序列化等能力封装为可插拔Starter,使开发者聚焦业务逻辑而非环境适配。在云原生与快速交付成为主流的2026年,Spring Boot凭借开箱即用的生产就绪特性(如Actuator监控、Profile多环境管理、GraalVM原生支持)持续巩固其不可替代地位。本文深入解析自动装配源码机制、Starter设计范式及app

weixin_33698823的博客 349

Spring Boot 使用 Redis 提升天气预报应用的并发访问能力

有时,为了提升整个网站的性能,我们会将经常需要访问数据缓存起来,这...

weixin_34209406的博客 243

Spring AI Alibaba 2.0与MCP协议深度集成实战指南

MCP(Model Context Protocol)作为AI与工具生态交互的标准化协议,通过统一接口规范解决了传统AI应用中工具对接的碎片化问题。其核心原理是建立标准化的服务端与客户端架构,使开发者能够以一致的方式调用各类工具和服务。在Java生态中,Spring AI Alibaba 2.0框架深度集成了MCP协议,为开发者提供了高效的智能体应用开发能力。该技术价值在于显著降低了AI应用开发的复杂度,特别是在企业级AI应用和智能体系统构建场景中表现突出。通过MCP协议,开发者可以快速集成天气查询、地图服

weixin_34062469的博客 588

【毕业设计】基于Spring Boot框架的天气预报系统的设计与实现

基于Spring Boot的天气预报可视化系统的设计研究背景是在当今信息时代和智能化发展的背景下,人们对实时、准确的天气信息需求日益增长。天气预报系统作为一种重要的信息服务工具,可以帮助用户及时获取天气情况,做出相应的决策和安排。然而,传统的天气预报系统界面简单、功能有限,无法满足用户对数据可视化、个性化定制等需求。因此,本研究旨在基于Spring Boot技术开发一款功能强大、用户友好的天气预报可视化系统,提供丰富的天气数据展示和交互功能,以提高用户体验和满足不同用户群体的需求。

各类程序设计成品、文档、学习资料 2928

Spring Boot项目:使用第三方天气API接口实现天气预报功能 weather.zip

Spring Boot项目:使用第三方天气API接口实现天气预报功能;使用redis缓存数据库进行数据缓存 接口示例:http://t.weather.sojson.com/api/weather/city/101010100

Unity 实现动态网格地图生成与交互组件

本文详细介绍了在Unity中实现动态网格地图生成与交互组件的完整方案。从基础网格单元实现到高级交互功能,涵盖网格生成器核心逻辑、事件驱动架构、性能优化技巧以及六边形网格等特殊实现。特别适合游戏开发者学习如何构建战棋、模拟经营类游戏的可交互地图系统,提升开发效率与用户体验。

weixin_29015483的博客 1072

基于SpringBoot+Vue的天气预报管理系统(源码+文档+部署+讲解)

随着网络科技的不断发展以及人们经济水平的逐步提高,网络技术如今已成为人们生活中不可缺少的一部分,而信息管理系统是通过计算机技术,针对用户需求开发与设计,该技术尤其在各行业领域发挥了巨大的作用,有效地促进了天气预报管理的发展。然而,由于用户量和需求量的增加,信息过载等问题暴露出来,为改善传统线下管理中的不足,本文将提出一天气预报管理系统,计算机技术作为近十年来新发展起来的科技,可运用于众多领域中,尤其在天气预报管理中,可有效地提升其效率。

qq_33638415的博客 1650

BSW: Dcm模块配置--28服务

这个章节讲解下UDS中的28服务(Communcation Control)的配置,顾名思义,对当前ECU的通讯状态进行变更,主要设置应用报文,网络管理报文的收发控制,通常应用在刷写APP软件时,降低总线负载。这里首先要提醒的一点是,28服务几乎不需要手写代码,只有在客户需求要求前置条件不满足时报特定NRC时才需要填充代码。实际配置中主要涉及的模块有DCM,BSWM,ComM,RTE.2.BswM模块的配置。3.ComM模块的配置。1.DCM模块的配置。

Forever_Oct的博客 3088

Springboot获取某个城市当天的天气预报

Springboot获取某个城市当天的天气预报

weixin_49999835的博客 1675

基础篇.ARM架构介绍(1)

ARM公司主要向客户提供处理器IP。ARM体系结构是一种硬件规范,主要用来约定指令集、芯片内部体系结构等。以指令集为例,ARM体系结构并没规定每一条指令在硬件IP中如何实现,只是约定了每条指令的格式、行为规范、参数等。

heshuangzong的博客 7806

RPN 解析

RPN全称是Region Proposal Network,Region Proposal的中文意思是“区域选取”,也就是“提取候选框”的意思,所以RPN就是用来提取候选框的网络; 1. RPN的意义 RPN第一次出现在世人眼中是在Faster RCNN这个结构中,专门用来提取候选框,在RCNN和Fast RCNN等物体检测架构中,用来提取候选框的方法通常是Selective Se

lanran2的博客 10万+

基于Spring Boot的天气预报服务

有时,为了提升整个网站的性能,我们会将经常需要访问数据缓存起来,这样,在下次查询的时候,能快速的找到这些数据。缓存的使用与系统的时效性有着非常大的关系。当我们的系统时效性要求不高时,则选择使用缓存是极好的。当系统要求的时效性比较高时,则并不适合用缓存。本文,我们将演示如何通过集成 Redis 服务器来进行数据的缓存,以提高微服务的并发访问能力。为啥我们需要缓存在之前的文章中,我们已经介绍了如何使用...

devcy的博客 1102

从虚拟机到双系统:手把手教你为Gromacs搭建最强Linux环境(含WSL2、Ubuntu22.04配置)

本文详细指导如何在Windows系统下为Gromacs分子动力学模拟搭建高性能Linux环境,涵盖WSL2和Ubuntu22.04双系统配置。通过对比虚拟机、WSL2和原生Linux的性能数据,提供GPU加速、内存优化等实用技巧,帮助科研人员提升计算效率。

weixin_30861797的博客 271

Spring Cloud学习笔记3——天气预报系统(2)用redis提升应用的并发访问能力

为什么要使用Redis 及时响应:Redis是一个基于内存的缓存系统,查询、响应的速度快 减少服务调用 开发环境 JDK8+ Gradle4+ Redis 3.2.100 Apache HttpClient 4.5.3 Spring Boot Web Starter Spring Boot Data Redis Starter 新建项目 复制之前的micro-weather-basic项目...

Willow的博客 371

4、高级认证解决方案:Active Directory、LDAP、RADIUS和TACACS+深度解析

本文深入解析了多种高级认证解决方案,包括Active Directory、标准LDAP、RADIUS和TACACS+,涵盖其技术优势、配置步骤及适用场景。同时介绍了如何实现通用用户管理,包括使用第三方认证解决方案和ADSI自助用户管理。通过实际案例部署,展示了如何高效、安全地管理大规模用户认证与权限控制,为企业安全架构提供参考。

o4p5q6r7s的博客 308

yolov7目标追踪:基于自定义数据集完成检测

目标追踪包含两个阶段:(1)基于自定义数据集,训练yolo目标检测模型;(2)基于检测模型,将实时检测结果传递到StrongSORT追踪算法中,该算法在OSNet基础上结合运动和外观信息,可以跟踪yolo模型检测到的任何物体。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2307

【开源可商用】高并发智慧校园SaaS平台核心源码:Spring Boot 微服务 + 多终端协同

智慧校园电子班牌系统是基于SpringBoot+Vue2架构开发的综合性管理平台,包含Web管理端、微信小程序和Android定制电子班牌终端。系统采用MySQL+Redis数据库方案,集成JWT认证与数据加密技术,实现校园考勤、教务管理、设备控制等核心功能。电子班牌支持人脸识别、课表展示等场景应用,小程序端覆盖师生家长需求。系统通过统一数据中心实现校园数据标准化管理,包含设备管控、校班务管理等模块,并支持常规教学、考试等多样化场景应用,为教育信息化建设提供智能化解决方案。

baina666的博客 622

PyCharm 2024最新版图文安装教程(python环境搭建+PyCharm安装+运行测试+汉化+背景图设置)

PyCharm 2024新版图文安装教程(python环境搭建+PyCharm安装+运行测试+汉化+背景图设置)

Code_流苏:在代码中寻诗意,在实践中觅真知 4万+

SpringBoot天气管理系统zmkh3

SpringBoot天气管理系统zmkh3本系统(程序源码数据库调试部署开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容。

ck3026的博客 888

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SpringBoot天气管理系统1439l

SpringBoot天气管理系统1439l本系统(程序源码数据库调试部署开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容。

ck3026的博客 1189

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

影院票房预测与排片优化系统技术解析

数据建模与机器学习在影院运营中发挥着越来越重要的作用。通过分析历史票房、实时售票、影片特征等多维度数据,可以构建预测模型准确估算上座率。结合运筹学优化算法,系统能自动生成最优排片方案,显著提升影厅使用效率。典型技术栈采用Spring Boot+MyBatis处理核心业务,Python微服务实现TensorFlow/XGBoost预测模型,Redis缓存保障实时数据处理。这种架构既满足高并发票务查询需求,又能支持算法快速迭代。在实际应用中,系统可将影院上座率提升15-20%,同时通过OR-Tools求解器实现

weixin_33769125的博客 376

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Springboot基于springboot城市智能出行系统1w5hj(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

项目功能:用户,公告类型,线路类型,线路信息,购票订单,公告信息。

atongmudangdang的博客 1024

AI Agent企业级实战:从零构建智能体到RAG系统与Spring AI集成

AI Agent(智能体)作为能够感知环境、进行决策并执行行动的自治程序,其核心原理在于结合大语言模型(LLM)的推理能力与外部工具(Tools)的执行功能,通过规划、行动、观察的循环来达成复杂目标。这一技术为企业带来了显著的自动化与智能化价值,尤其在处理非结构化任务和动态工作流方面。其典型应用场景包括智能客服、数据分析报告生成、内部知识库问答(RAG)以及自动化运维(AIOps)等。本文聚焦于**AI Agent**的**企业级实战项目**开发,通过具体代码示例,系统讲解如何从环境搭建、核心工具栈选型开始

weixin_30673611的博客 447

基于SpringBoot3+Vue3的旅游信息服务系统

本系统是一个基于的综合性旅游信息服务平台,集景点推荐、旅游攻略、门票预订、住宿管理、评论互动、天气查询等功能于一体,旨在为用户提供智能化、便捷化的旅游出行体验。系统采用前后端分离架构,结合Redis 缓存RabbitMQ 消息队列提升性能与并发能力,同时通过实现安全认证与权限控制,支持邮箱验证码登录与邮件通知。

2401_85205269的博客 440

企业级气象服务构建:伏羲模型与Java微服务的高可用集成方案

本文介绍了如何在星图GPU平台上自动化部署“伏羲天气预报:伏羲中期气象大模型”镜像,构建企业级高可用气象服务。该方案通过Java微服务架构,将AI气象预测能力无缝集成至企业内部系统,典型应用场景包括为物流、能源等行业提供精准的、定制化的未来天气预测,以驱动智能调度与风险预警。

weixin_36012152的博客 170
上一篇: 基于Spring Boot的天气预报服务
下一篇: Hive(上)-介绍及部署
程序员椰子橙
博客等级 码龄9年 46粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值