服务器关机时怎样将程序中的数据写入到硬盘中

ylqmf 2011-07-22 02:18:55
java程序 linux服务器
...全文
214 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼 2011-07-28
  • 打赏
  • 举报
回复
要看你的程序如何退出了

正常退出的话,有很多办法,在程序退出之前做清理工作,这不用多说

而如果是掉电或当机的话,可就没办法了,因为程序不可能知道服务器什么时候掉电。不过,为了保证程序业务的正确性,可以去参考一下数据库的事务处理机制。数据库不保证掉电的时候会把数据写入到磁盘,但是它的事务机制可以保证对数据库的一次事务操作(一系列的insert, update, delete)操作是完整的。
coooliang 2011-07-28
  • 打赏
  • 举报
回复
我不懂,就不乱说了。
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ylqmf 的回复:]

恩,提示我了,应当搞两个服务器,一台运行,另一台监控,一旦发现另一台掉线,监控机立刻启动.
传输上使用tcp连接,运行的那台,不断把状态传到监控的那台去.
只要tcp一断,监控机立刻启动,充当运行机
[/Quote]


建议你去了解一下集群吧
xiaoding0 2011-07-25
  • 打赏
  • 举报
回复
可以考虑双机热备和定时备份。建议使用两个服务器,如果实在不想增加开支也可以使用本机本地路径备份。相对而言如果只使用一台服务器的话当它宕机时就不能业务继续了。国产软件优备可以实现秒级回滚机能,几乎随时保存数据
zqfddqr 2011-07-24
  • 打赏
  • 举报
回复
这个只能定时备份吧减小数据损失...
ylqmf 2011-07-22
  • 打赏
  • 举报
回复
再看看吧,有没有其他的解决方案
ylqmf 2011-07-22
  • 打赏
  • 举报
回复
恩,提示我了,应当搞两个服务器,一台运行,另一台监控,一旦发现另一台掉线,监控机立刻启动.
传输上使用tcp连接,运行的那台,不断把状态传到监控的那台去.
只要tcp一断,监控机立刻启动,充当运行机
北京-李大鹏 2011-07-22
  • 打赏
  • 举报
回复
呵呵,如果掉电或宕机了,服务器系统都不运行了,程序怎么还能运行呢。
所以才需要做多机热备、分布式啥的嘛。
ylqmf 2011-07-22
  • 打赏
  • 举报
回复
如果是突然掉电宕机之类的呢?
北京-李大鹏 2011-07-22
  • 打赏
  • 举报
回复
这个问题要看你的程序如何处理退出了,正常退出可以使用信号量。

package core.test;

import org.apache.log4j.Logger;

import sun.misc.Signal;
import sun.misc.SignalHandler;

public class SignalHandlerTest {
public static void main(String... args) throws Exception {
final Logger log = Logger.getLogger(SignalHandlerTest.class);
SignalHandler handler = new SignalHandler() {
public void handle(Signal signal) {
log.info(signal.getName());
System.exit(-1);
}
};
Signal.handle(new Signal("TERM"), handler);//相当于kill -15
Signal.handle(new Signal("INT"), handler);//相当于Ctrl+C
for (;;) {
Thread.sleep(1000);
}
}
}


PS: 这段代码是从网站搜索来的,没测试过哈。

当系统关机的时候也会给进程发送信号量,所以这个处理是相同的。
但是如果使用Kill -9这种方式退出的话,是会有一些问题的,上面的代码不会执行回调函数的。

ylqmf 2011-07-22
  • 打赏
  • 举报
回复
是我表述的不清楚,还是这根本就不是一个问题?
db服务器连接mysql+redis高可用高性能框架干货1、使用c++语言,vs2019开发垮平台[windows和linux]连接MySql和redis框架。2、使用MySql持久化玩家数据,redis做玩家数据缓存层,redis不做数据持久化。mysql搭配redis工作效率非常高效,就好比男女搭配干活不累,没有redis,mysql也能独立很好的完成用户读写请求。有了redis,用户访问数据的效率更高,时间更短,快速的完成请求。3、讲解如何保持mysql和redis数据强一致性策略,并在代码里实现。每次启动redis,使用管道技术,从mysql批量导入活跃用户数据到redis,并设置过期时间.4、教程使用线程池技术,每个线程拥有自己独立的数据,线程绑定类。每一个实例就包含一个线程每个线程数据里包含:mysql连接器、redis连接器、内存回收池、安全的串行队列、条件变量、互斥量保证线程内的数据安全。5、工作原理:没有请求时,各个工作线程处于休眠状态。有读写请求时,从线程池获取一个线程,添加读写请求,把数据推送到线程工作队列。然后工作线程获取队列的数据,进行串行工作任务安排,进行mysql数据库读写操作,以及redis读写数据操作,当完成工作任务时,执行下一个工作任务,同时把处理结果推送到逻辑线程,把数据给用户。6、用户读数据策略:用户获取数据首先是先从redis查找数据,redis命,返回数据给玩家,redis命失败,mysql查找数据,然后写入数据到redis,返回数据给用户。7、用户写数据策略:用户先从redis删除数据,然后写数据到mysql,最后再把数据写入到redis,保持数据一致性。8、教程是一个干货教程,不是新手教程,mysql基础语法讲解的少,redis有讲解基础系列。教程讲解的是如何搭建一个支持高并发,高性能的读写数据库框架,使用mysql+redis搭配的高可用、高性能框架。该套框架在多个项目使用过,也在棋牌类项目里面使用过。

62,610

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧