java - 如何避免文件操作中的并发操作(保存/删除)
问题描述
我遇到了一个问题,需要帮助。
我正在设计一个简单的文件服务(Http),用户可以使用它上传/下载文件,以及删除文件服务器中的文件。
文件服务将文件存储在单个 linux 计算机的父文件夹(例如/data/fileserver/
)下。上传的文件(例如xxx.mp4
)可以保存在计算机中的路径,如/data/fileserver/demo/1/xxx.mp4
.
问题是: 如何避免此文件服务中的并发操作(保存/删除)?
例如
用户 A 正在上传文件 xxx.mp4 并且文件服务正在使用 path 保存(尚未完成)它/data/fileserver/demo/1/xxx.mp4
。
同时,用户B调用delete api
该文件服务删除文件夹/data/fileserver/demo
。此删除操作会影响用户 A 的保存操作。
我希望在这种情况下用户 B 的删除操作会失败。
该模型似乎锁定了树枝,但我不知道如何处理。
文件服务器基于java语言。
谢谢。
解决方案
由于 HTTP 可能是异步的,因此我将使用设计模式方法。
例如,您可以实现一个单例来处理确定路径上的操作。
假设您不希望在完成任何类型的操作之前对“文件服务器”文件夹进行任何更改。
实现一个映射,键为文件夹名,值为真或假(表示是否操作)
似乎是一个简单的解决方案。
推荐阅读
- java - 双向链表没有导入
- kubernetes - 气流没有名为“kubernetes”的模块
- javascript - 使用 ffmpeg node.js 的控制台日志流信息
- javascript - onchange 事件函数显示未定义(Javascript-HTML-DOM)
- python-3.x - Jupyter Lab - 内核保持“重新连接”
- python - 创建仅包含最大公共组对的字典
- enums - 派生特定变体的特征
- ruby-on-rails - Active Record 什么都不做
- kubernetes - 使用 helm 安装后如何更改 Spinnaker 配置?
- node.js - Linux中分散脚本的全局需求