SpringBoot+Redis完成应用程序内存数据现场恢复

springboot第八课:Redis持久化、集群 一、Redis的持久化 1 什么是持久化? 把内存中的数据持久化到磁盘。这个过程就是持久化。 当redis启动时会从磁盘上读取数据并加载到内存。 Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。 Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上 阅读详情

应用场景

最近工作中碰到了一个业务场景,在一条条产生数据,并对数据进行处理的时候,需要对比当前批次和上一批数据,然后进行一些处理。但是碰到代码更新需要手动停止项目,或者程序异常退出等情况,内存中用作对比的上一批次的历史数据会丢失。这样会导致再重新启动项目时,又是新的开始,会导致数据不准确,所以需要对停止前的数据进行落地,在程序重新启动的时候,再次加载到内存中。

涉及知识点

  • ShutDownHook,Java提供的钩子,可以接收信号,在程序停止时,启动指定的线程。
  • Spring 对集合,构造函数的注入,以及注入顺序
  • 如何在静态方法中进行注入
  • 如何在项目初始化的时候执行操作
  • 如何将json字符串解析为复杂格式数据

下面我们针对上述知识点进行简单的讲解

ShutDownHook

定义

Java 提供名为ShutdownHook 的钩子,能够允许你在程序正常退出前执行特定代码。 一般用于清理资源、输出日志、保护当前正在执行的任务的执行。ShutdownHook 是一个不立刻执行的Thread,当程序正常退出时它被执行,可以同时存在多个ShutdownHook。

触发条件

  1. 程序正常退出
  2. 使用System.exit()
  3. 终端使用Ctrl+C触发的中断
  4. 系统关闭
  5. 使用Kill pid命令干掉进程,其中kill -9 不会触发,针对windows taskkill -pid xxx -F 也不会触发

使用示例

//使用addShutdownHook()方法来注册
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            RedisService redisService = DemoApplication.context.getBean(RedisService.class);
            redisService.insertData();
        }));

使用addShutDownHook() 方法来注册,添加一个线程,执行你需要做的操作,这里我们是执行数据插入到Redis的操作。

应用

在SpringBoot的源码中有大量用到shutDownHook的地方,比如释放数据库连接,回收系统资源等。

Spring的自动注入

相信大家对自动注入应该很熟悉了,我们常用的写法就是在某个需要引用到的地方,对被引用的类加上@Service注解,在引用处声明一个对象,加上@AutoWired注解,Spring就会自动帮我们创建并注入我们需要的Bean。

对集合进行注入

但是还有另外一种使用场景,Spring会自动对集合对象,如Set,Map,List进行注入。例如:

@Service
public class RedisService {
    
SpringBoot与Redis整合实战教程 SpringBoot是由Pivotal团队提供的全新框架,旨在简化新Spring应用的初始搭建以及开发过程。它使用“约定优于配置”的原则,帮助开发者快速启动和运行Spring应用。在SpringBoot配置类中,可以创建一个RedisTemplate Bean,对其序列化策略进行自定义。@Bean// 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值// 设置value的序列化规则和反序列化规则。 阅读详情

相关推荐

手把手教学|用飞书+扣子工作流实现自动化批量图片生成,效率提升99%!体验完整操作流程

在先前的文章中,我们已经深入探讨了扣子智能体的多种应用场景,以及如何创建和使用工作流进行高效管理。本文将引领大家通过一个具体案例,将扣子的工作流功能嵌入飞书应用中,实现操作的自动化与高效化。

weixin_66485800的博客 6028

ESP32水墨屏日历实战:低功耗自动更新与HTTPS数据解析

本文详细介绍了ESP32水墨屏日历项目的开发实践,重点讲解了低功耗自动更新与HTTPS数据解析的实现方法。通过ESP32的自动休眠功能和水墨屏的零功耗特性,结合HTTPS请求安全获取网络数据,实现了高效节能的桌面日历应用。项目代码开源,适合物联网开发者参考。

xx56789的博客 777

Python实战:3分钟搞定A股K线数据抓取(附东方财富/腾讯API完整代码)

本文为量化交易初学者提供了一份快速获取A股K线数据的实战指南。通过对比东方财富与腾讯财经两大免费API的优劣,并附上可直接运行的完整Python代码,帮助读者在3分钟内搭建起自己的数据抓取管道,为构建量化交易系统奠定坚实的数据基础。

weixin_29062255的博客 2909

5分钟搞定Unity+Visual Studio开发环境配置(含C#游戏开发工作负载)

本文提供了一份详细的Unity与Visual Studio开发环境配置指南,帮助开发者在5分钟内完成C#游戏开发工作负载的设置。从Unity Hub安装到Visual Studio关键组件选择,再到常见问题排查,全面覆盖环境搭建的各个环节,显著提升游戏开发效率。

weixin_29014237的博客 248

从KVM虚拟化到Openstack云化架构综述

目录 摘要 OpenStack的虚拟化技术 OpenStack架构介绍 Nova Swift KeyStone Neutron Glance Cinder Ceilometer Heat 摘要 这两年的工作中,接触到公有云和私有云的项目还不少。起初对于Openstack的了解,仅停留在其几大组件的交互上,如Nova、Neutron、Glance等,以及对各大云厂商功能点上...

liyunpeng229的博客 2051

Multisim电路仿真与实验:包含连续时间系统的模拟、周期信号频谱分析、组合逻辑电路:竞争冒险、数字锁

这些实际系统可以是电的或非电的物理量系统,也可以是经济、军事等非物理量系统。矩形周期信号的幅度和周期保持不变,随着占空比的增加(即脉宽加大),主峰高度越高,主峰宽度越窄,各谱线间隔越窄,主峰包含的谱线数量越少,有效频带宽度越窄,主峰内高次谐波分量越少。输入信号所经路径不同而引起的冒险现象,按短暂尖峰极性的不同,可将冒险分为“0-1-0”型险象(也称“1”型)和“1-0-1”型险象(也称“0”型)理想的正弦波的幅度谱包含1条谱线,证明其只有基频分量,而无谐波分量,如果能测出谐波分量,说明该正弦波已有失真。

Jumpingtigger_35的博客 1万+

《UDS协议从入门到精通》系列——图解0x34:请求下载

上传下载类服务之0x34-请求下载,图解请求+响应格式,直观易懂,快速上手!!

车载系统攻城狮 4927

详解AUTOSAR:DaVinci Configurator导入ARXML配置(拓展篇—2)

DaVinci Configurator导入ARXML配置。

不脱发的程序猿 3331

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: SpringBoot在静态方法中使用注入Bean
下一篇: consul异地多数据中心以及集群部署方案
徐光耀
博客等级 码龄12年 19粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值