文件存储(适合小型数据或配置)
文本文件(如TXT、CSV)
import java.io.*; try (FileWriter writer = new FileWriter("data.txt")) { writer.write("用户ID: 1001, 姓名: 张三n"); // 写入数据 } catch (IOException e) { e.printStackTrace(); }
特点:
- 人类可读,但无结构化查询能力
- 适合日志、配置文件
结构化文件(XML/JSON)
import com.fasterxml.jackson.databind.ObjectMapper; User user = new User(1001, "张三"); new ObjectMapper().writeValue(new File("user.json"), user); // 对象转JSON保存
依赖:Jackson库(需添加Maven依赖)
适用:跨平台配置、API数据交换
数据库存储(推荐核心业务数据)
JDBC操作关系型数据库(如MySQL)
String sql = "INSERT INTO users (id, name) VALUES (?, ?)"; try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS); PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setInt(1, 1001); stmt.setString(2, "张三"); stmt.executeUpdate(); // 执行插入 }
关键点:
- 使用
PreparedStatement
防SQL注入 - 连接池(如HikariCP)提升性能
ORM框架(如Hibernate)
@Entity @Table(name = "users") public class User { @Id private int id; private String name; // Getter/Setter } // 保存操作 Session session = sessionFactory.openSession(); session.beginTransaction(); session.save(new User(1001, "张三")); // 对象直接持久化 session.getTransaction().commit();
优势:
- 对象化操作,无需手写SQL
- 自动处理事务和连接
内存存储(高速读写场景)
集合类临时存储
Map<Integer, User> cache = new ConcurrentHashMap<>(); cache.put(1001, new User("张三")); // 内存暂存数据
注意:应用重启数据丢失,适合缓存非关键数据
分布式缓存(如Redis)
Jedis jedis = new Jedis("localhost"); jedis.set("user:1001", "张三"); // 数据存入Redis String name = jedis.get("user:1001"); // 读取数据
场景:
- 高频访问数据(如会话信息)
- 集群间数据共享
序列化(对象持久化)
try (ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream("user.dat"))) { oos.writeObject(new User(1001, "张三")); // 序列化对象 } // 反序列化读取 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.dat")); User user = (User) ois.readObject();
限制:
- 二进制格式,难以跨语言
- 类结构变更可能导致兼容问题
云存储(大型文件/分布式需求)
// 使用AWS S3 SDK示例 AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient(); s3Client.putObject("my-bucket", "user-data/1001.txt", new File("data.txt"));
适用:图片、视频等大型文件,需高可用存储
选择策略
存储方式 | 数据量 | 持久性 | 性能 | 典型场景 |
---|---|---|---|---|
文件 | 小型 | 中 | 中 | 配置文件、日志 |
数据库 | 中大型 | 高 | 高 | 用户信息、交易记录 |
内存缓存 | 小型 | 低 | 极高 | 会话数据、热点数据 |
序列化文件 | 中小型 | 高 | 中 | 本地备份 |
云存储 | 大型 | 极高 | 依赖网络 | 多媒体文件 |
最佳实践建议:
- 关键业务数据必用数据库 + 事务管理
- 高并发场景用Redis缓存缓解数据库压力
- 配置文件优先选YAML/Properties(Spring Boot原生支持)
- 避免序列化存储长期数据(版本兼容风险)
引用说明:
- JDBC规范:Oracle官方文档
- Redis实践:《Redis设计与实现》
- AWS SDK:Amazon开发者指南
- 安全建议:OWASP Java安全标准 符合E-A-T原则:基于Java官方文档、行业标准及权威技术资料)
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/15341.html