您的位置:首页 > 科技 > IT业 > 手机百度怎么解除禁止访问网站_公众号创建好了怎么在微信里搜索_免费广告推广软件_免费发广告的平台有哪些

手机百度怎么解除禁止访问网站_公众号创建好了怎么在微信里搜索_免费广告推广软件_免费发广告的平台有哪些

2025/4/21 22:15:25 来源:https://blog.csdn.net/qq_50570154/article/details/146940572  浏览:    关键词:手机百度怎么解除禁止访问网站_公众号创建好了怎么在微信里搜索_免费广告推广软件_免费发广告的平台有哪些
手机百度怎么解除禁止访问网站_公众号创建好了怎么在微信里搜索_免费广告推广软件_免费发广告的平台有哪些

一、为什么需要NoSQL?

在传统SQL数据库中,数据必须严格遵循预定义的表结构,就像把所有物品整齐摆放在固定尺寸的货架上。而NoSQL(Not Only SQL)数据库则像一个灵活的储物间,允许存储各种类型的数据,无需提前规划结构。

NoSQL的核心特点:

  • 非关系型:无需预定义表结构
  • 分布式:天然支持水平扩展
  • 高性能:适合处理海量数据
  • 灵活存储:支持键值、文档、列族等多种格式

二、Redis:内存中的超级储物柜

1. 核心特性

  • 数据类型丰富:支持字符串、哈希、列表、集合、有序集合等
  • 内存存储:读写速度极快(10万+操作/秒)
  • 持久化:支持RDB快照和AOF日志

2. Java操作示例

添加依赖(Maven)
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.1</version>
</dependency>
基本操作代码
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;public class RedisExample {public static void main(String[] args) {try (Jedis jedis = new Jedis("localhost", 6379)) {// 存储用户信息jedis.set("user:1001", "{\"name\":\"张三\",\"age\":25}");// 存储哈希数据jedis.hset("user:1001:profile", "email", "zhangsan@example.com");jedis.hset("user:1001:profile", "phone", "13812345678");// 自增计数器jedis.incr("post:view:100");  // 阅读量+1// 有序集合存储排行榜jedis.zadd("rank:score", 95, "李四");jedis.zadd("rank:score", 88, "王五");// 事务操作Transaction transaction = jedis.multi();transaction.incr("counter");transaction.exec();}}
}

3. 典型应用场景

  • 缓存系统:存储高频访问数据
  • 会话管理:存储用户会话信息
  • 计数器:统计文章阅读量、点赞数
  • 实时消息:使用Pub/Sub功能实现消息队列

三、MongoDB:灵活的文档数据库

1. 核心特性

  • 文档存储:使用BSON格式存储半结构化数据
  • 动态模式:无需预定义字段
  • 水平扩展:支持分片集群
  • 强大查询:支持复杂的聚合操作

2. Java操作示例

添加依赖(Maven)
<dependency><groupId>org.mongodb</groupId><artifactId>mongodb-driver-sync</artifactId><version>4.6.0</version>
</dependency>
基本操作代码
import com.mongodb.MongoClientSettings;
import com.mongodb.client.*;
import org.bson.Document;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;import java.util.Arrays;import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;public class MongoDBExample {public static void main(String[] args) {// 配置POJO映射CodecRegistry pojoCodecRegistry = fromProviders(PojoCodecProvider.builder().automatic(true).build());CodecRegistry codecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), pojoCodecRegistry);// 连接MongoDBtry (MongoClient mongoClient = MongoClients.create(MongoClientSettings.builder().codecRegistry(codecRegistry).applyToClusterSettings(builder ->builder.hosts(Arrays.asList(new ServerAddress("localhost", 27017)))).build())) {MongoDatabase database = mongoClient.getDatabase("mydatabase");MongoCollection<User> collection = database.getCollection("users", User.class);// 插入文档User user = new User("张三", 25, "zhangsan@example.com", new Address("长安街1号", "北京"));collection.insertOne(user);// 查询文档FindIterable<User> results = collection.find(Filters.eq("name", "张三"));for (User u : results) {System.out.println(u);}// 更新文档collection.updateOne(Filters.eq("name", "张三"),Updates.set("age", 26));// 聚合查询AggregateIterable<Document> aggregate = collection.aggregate(Arrays.asList(Aggregates.match(Filters.gte("age", 18)),Aggregates.group("$address.city", Accumulators.sum("count", 1))));for (Document doc : aggregate) {System.out.println(doc);}}}
}// 定义实体类
class User {private String name;private int age;private String email;private Address address;// 构造方法、getter/setter省略
}class Address {private String street;private String city;// 构造方法、getter/setter省略
}

3. 典型应用场景

  • 日志记录:存储非结构化日志数据
  • 内容管理:存储文章、评论等
  • 电商订单:存储包含复杂属性的订单
  • 实时分析:使用聚合框架处理海量数据

四、Redis vs MongoDB:如何选择?

特性RedisMongoDB
数据模型键值对(支持丰富数据结构)文档型(BSON格式)
存储位置内存优先磁盘存储
查询能力简单查询复杂查询+聚合
扩展性主从复制+哨兵分片集群
适用场景缓存、计数器、实时消息日志、内容管理、实时分析

五、总结

NoSQL数据库为现代应用提供了更灵活的数据存储方式:

  • Redis适合需要高性能读写的场景
  • MongoDB适合处理半结构化数据和复杂查询
  • 传统SQL适合需要事务支持的场景

建议根据具体业务需求选择合适的工具,必要时可以混合使用多种数据库。

六、推荐学习资源

  1. Redis Java客户端文档
  2. MongoDB Java驱动文档
  3. 《Redis实战》
  4. 《MongoDB权威指南》

现在就动手用Java操作Redis和MongoDB,体验NoSQL的灵活性吧!🚀

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com