热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB详细教程,这一篇就够啦

文章目录1. 简介2. 特点3. 应用场景4. 安装(docker)5. 核心概念5.1 库5.2 集合5.3 文档6. 基本操作6.1 库6.1.1 增6.1.2 删6.

文章目录

  • 1. 简介
  • 2. 特点
  • 3. 应用场景
  • 4. 安装(docker)
  • 5. 核心概念
    • 5.1 库
    • 5.2 集合
    • 5.3 文档
  • 6. 基本操作
    • 6.1 库
      • 6.1.1 增
      • 6.1.2 删
      • 6.1.3 改
      • 6.1.4 查
    • 6.2 集合
      • 6.2.1 增
      • 6.2.2 删
      • 6.2.3 改
      • 6.2.4 查
    • 6.3. 文档
      • 6.3.1 增
      • 6.3.2 删
      • 6.3.3 改
      • 6.3.4 查
        • 1. 语法
        • 2. 对比语法
        • 3. AND
        • 4. OR
        • 5. AND & OR
        • 6. 数组数据查询
        • 7. 模糊查询(正则表达式)
        • 8. 排序
        • 9. 分页
        • 10. 总条数
        • 11. 去重
        • 12. 指定返回字段
  • 7. $type
  • 8. 索引
    • 8.1 说明
    • 8.2 使用
  • 9. 聚合
    • 9.1 说明
    • 9.2 使用
  • 10. 整合 SpringBoot
    • 10.1 pom
    • 10.2 yml
    • 10.3 coding
  • 11. 副本集
  • 12. 分片集群


前置要求 :

  • RDBMS 关系型数据库
  • Linux
  • SpringBoot


1. 简介

MongoDB 是一个 基于分布式文件存储 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个 介于关系数据库和非关系数据库之间 的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

它支持的数据结构非常松散,是类似 jsonbson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

MongoDB服务端可运行在Linux、Windows平台,支持32位和64位应用,默认端口为27017

推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。


2. 特点
  • 面向集合存储,易存储对象类型的数据
  • 支持查询,以及动态查询
  • 支持 RUBY, PYTHON, JAVA, C++, PHP, C# 等多种语言
  • 文件存储格式为 BSON (对 JSON 的扩展)
  • 支持复制和故障恢复和分片
  • 支持事务
  • 索引 - 提高查询效率
  • 聚合
  • 关联查询

3. 应用场景
  • 游戏应用 : 使用云数据库MongoDB作为游戏服务器的数据库存储用户信息。用户的游戏装备、积分等直接以内嵌文档的形式存储,方便进行查询与更新。
  • 物流应用 : 使用云数据库MongoDB存储订单信息,订单状态在运送过程中会不断更新,以云数据库MongoDB内嵌数组的形式来存储,-次查询就能将订单所有的变更读取出来,方便快捷且一目了然。
  • 社交应用 : 使用云数据库MongoDB存储用户信息以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。并且,云数据库MongDB非常适合用来存储聊天记录,因为它提供了非常丰富的查询,并在写入和读取方面都相对较快。
  • 视频直播 : 使用云数据库MongoDB存储用户信息、礼物信息等。
  • 大数据应用 : 使用云数据库MongoDB作为大数据的云存储系统,随时进行数据提取分析,掌握行业动态。

4. 安装(docker)

# 拉取镜像
docker pull mongo
# 创建容器
docker run --name mongodb -d -p 27017:27017 mongo:latest --auth
# 查看所有容器
docker ps -a
# 进入容器
docker exec -it d96de8c77c72(CONTAINER ID) bash
# 连接 mongo 客户端(前提: 在容器内)
mongo
# 设置 root 权限
use admin;
db.createUser({user: 'nuo',pwd: 'xiaonuo123..+',roles: ['root']
});
# 认证
db.auth("nuo", "xiaonuo123..+");
# 查看数据库信息(前提: 进入 mongo 客户端)
show dbs;
# 退出 mongo 客户端
exit
# 再次 exit, 退出容器
exit
# 停止容器
docker stop d96de8c77c72(CONTAINER ID)
# 启动已有容器
docker start d96de8c77c72(CONTAINER ID)

5. 核心概念

关系型数据库 VS mongodb

5.1 库


mongodb 中的库就类似于传统关系型数据库中库的概念,用来通过不同库隔离不同应用数据。mongodb中可以建立多个数据库, 每一个库都有自己的集合和权限,不同的数据库也放置在不同的文件中。

默认的数据库为 “test” , 数据库存储在启动指定的data目录中。


5.2 集合


集合就是MongoDB 文档组, 类似于 RDBMS (关系数据库管理系统: Relational Database Management System)中的 '表' 的概念.集合存在于数据库中,一个库中可以创建多个集合。每个集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。


5.3 文档


文档集合中一条条记录,是一组键值( key-value )对(即 BSON ).MongoDB 的文档不需要设置
相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也
是 MongoDB 非常突出的特点。


6. 基本操作

# 清屏
cls;

6.1 库


保留库说明 :

  • admin : 从权限的角度来看,这是"oot"数据库。要是将一 个用户添加到这个数据
    库,这个用户自动继承所有数据库的权限。-些特定的服务器端命令也只能从这个数
    据库运行,比如列出所有的数据库或者关闭服务器。
  • local : 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  • config : 当Mongo用于分片设置时,config数据库 在内部使用,用于保存分片的相关
    信息。


6.1.1 增

# 创建并使用
use xxx;

6.1.2 删

# 默认删除当前库, 但删除后其实还在当前库里边, 只是数据没了
db.dropDatabase();

6.1.3 改

没有直接的操作

# 方案一: 拷贝数据库后,删除原来的数据库
db.copyDatabase('old_name', 'new_name');
use old_name;
db.dropDatabase();
# 方案二: 利用renameCollection命令, 如果有多个集合,循环处理就好了
db.adminCommand({renameCollection: "db1.test1", to: "db2.test2"})

6.1.4 查

# 查看当前使用的数据库
db;
# 查看所有数据库(如果没有数据默认是不显示的)
show databases;
# or
show dbs;

6.2 集合


6.2.1 增

# 1. 显式创建
db.createCollection('collection', [options]);
# 'collection': 集合名称
# [options] : 可选参数(不填则为默认)
# eg.
db.createCollection('user');
db.createCollection('user', {capped: true, size: 5000, max: 100});
2. 隐式创建-向不存在的集合插入数据
db.user.insert({"name": "nuo"});

[options]: 可选参数

6.2.2 删

# user: 集合名称
db.user.drop();

6.2.3 改

db.adminCommand({renameCollection: "demo.test", to: "demo.user"})

6.2.4 查

# 获取数据库中所有集合(表)
show collections;
# or
show tables;

6.3. 文档


6.3.1 增

# 1. 单条文档(数据)
db.user.insert({"name": "nuo"});
# bson 格式, key 可以不写 "",eg.
db.user.insert({name: "nuo"});# 2. 多条文档(数据)批量插入
db.user.insertMany([{name: "abc", _id:2},{name: "123"}],writeConcern: 1, # 写入策略, 默认 1, 即要求确认写操作, 0 是不要求ordered: true # 指定是否按顺序写入, 默认 true
);
db.user.insert([{name: "abc", _id:1},{name: "123"}]
);
# 3. 脚本插入
for (let i &#61; 0; i < 10; i &#43;&#43;) {db.user.insert({userId: i});
}

注意 &#xff1a;在 mongodb 中&#xff0c;每个文档都有一个 ‘_id’ 作为唯一标识&#xff0c;‘_id’ 默认会自动生成&#xff0c;如果手动指定则将使用手动指定的指作为 ‘_id’ 的值。


6.3.2 删

db.collection.remove (<query>,{justOne: <boolean>,writeConcern: <document>}
}

参数说明 :

  • query : 可选删除的文档的条件。
  • justOne : 可选如果设为 true 或 1 &#xff0c;则只删除一个文档&#xff0c;如果不设置该参数&#xff0c;或使用默认值false&#xff0c;则删除所有匹配条件的文档。
  • writeConcern : 可选抛出异常的级别&#xff0c;一般不用管。

eg.

# 删个别
db.user.remove({name:&#39;nuo1&#39;}, {justOne:false});
# 删除所有
db.collection.remove({});

6.3.3 改

db.collection.update(<query>,<update>,{upsert: <boolean>,multi: <boolean>,writeConcern: <document>}
);

参数说明:

  • query : update的查询条件&#xff0c; 类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(她.,i.n…). 等&#xff0c;也可以理解为sql
    update查询内set后面的
  • upsert: 可选&#xff0c;这个参数的意思是&#xff0c;如果不存在update的记录&#xff0c; 是否插入objNew,true
    为插入&#xff0c;默认是false,不插入。
  • multi: 可选&#xff0c;mongodb默认是false,只更新找到的第一 条记录&#xff0c;如果这个参数为true,
    就把按条件查出来多条记录全部更新。
  • writeConcern :可选&#xff0c;抛出异常的级别。

eg.

# 将符合条件的全部更新成后面的文档&#xff0c;相当于先删除在更新
db.user.update({name: &#39;nuo2&#39;}, {name: &#39;nuo1&#39;, bir: new Date()});# 保留原来数据更新&#xff0c;但是只更新符合条件的第一条数据
db.user.update({name: &#39;nuo1&#39;}, {$set: {name: &#39;nuo3&#39;});# 保留原来数据更新&#xff0c;更新符合条件的所有数据
db.user.update({name: &#39;nuo1&#39;}, {$set: {name: &#39;nuo3&#39;},{multi:true});# 保留原来数据更新&#xff0c;更新符合条件的所有数据没有条件符合时插入数据(saveOrUpdate)
db.user.update({name: &#39;nuo1&#39;}, {$set: {name: &#39;nuo3&#39;}, {multi: true, upsert: true});

6.3.4 查


1. 语法

db.collection.find(query, projection);

参数描述 :

  • query : 可选&#xff0c;使用查询操作符指定查询条件
  • projection : 可选&#xff0c;使用投影操作符指定返回的键。查询时返回文档中所有键值&#xff0c;只需省略该参数即可(默认省略) 。

MongoDB 查询文档使用find() 方法。find() 方法以非结构化的方式来显示所有文档&#xff0c;如果你需要以易读的方式来读取数据&#xff0c;可以使用 pretty() 方法以格式化的方式来显示所有文档&#xff0c;语法格式如下 :

db.collection.find().pretty();

2. 对比语法

如果你熟悉常规的SQL数据&#xff0c;通过下表可以更好的理解MongoDB的条件语句查询:
对比语法

3. AND

db.collection.find({k1: v1, k2: v2, ...}).pretty();

类似于WHERE 语句: WHERE key1&#61;value1 AND key2&#61;value2

4. OR

MongoDB OR条件语句使用了关键字$or,语法格式如下:

db.collection.find($or: [{k1: v1}, {k2: v2}]
).pretty();

类似于WHERE语句: WHERE k1&#61;v1 or k2&#61;v2

5. AND & OR

类似SQL语句为: &#39; where age <18 AND (name &#61; &#39; nuo1’ OR name &#61; &#39; nuo2&#39; )

db.user.find({"age": {$lt: 18}, $or: [{name: &#39;nuo1&#39;}, {name: &#39;nuo2&#39;}]
}).pretty();

6. 数组数据查询

# 测试数据
db.user.insert({"age": 3,"like": ["看电视","读书"],"name": "nuo11"
});
--执行数组查询
> db.user.find({like: "看电视"})

7. 模糊查询(正则表达式)

db.user.find( {name:/nuo/});

类似SQL中为&#39;where name like &#39;%name% &#39;

8. 排序


1 : 升序
-1: 降序

db.collection.find().sort( {name:1, age:1}),

类似SQL语句为: &#39;order by name, age &#39;

9. 分页


db.collection.find().sort( {条件}) .skip(start).limit( rows);
类似于SQL语句为: &#39; limit start, rows&#39;


10. 总条数

db.collection.count();
db.collection.find({"name": "nuo1"}).count();

类似于SQL 语句为: &#39;select count(id) from

11. 去重

db.collection.distinct(&#39;字段&#39;)

12. 指定返回字段

db.collection.find({query}, {name: 1, age: 1})

1 : 返回
0 : 不返回
注意:1和0不能同时使用


7. $type

$type 操作符是基于 BSON 类型来检索集合中匹配的数据类型&#xff0c;并返回结果
$type

db.col.find({title: {$type : 2}}). pretty();
# or
db.col. find({"title" : {$type: &#39;string&#39; }}). pretty();

8. 索引

8.1 说明


索引通常能够极大的提高查询的效率&#xff0c;如果没有索引&#xff0c;MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的&#xff0c;特别在处理大量的数据时&#xff0c;查询可以要花费几十秒甚至几分钟&#xff0c;这对网站的性能是非常致命的。索引是特殊的数据结构&#xff0c;索引存储在一个易于遍历读取的数据集合中&#xff0c; 索引是对数据库表中一列或多列的值进行排序的一种结构。

索引从根本上说&#xff0c;MongoDB中的索引与 其他数据库系统中的索引类似。MongoDB在集合层面上定义了索引&#xff0c;并支持对MongoDB集合中的任何字段或文档的子字段进行索引。

8.2 使用

# db.collection.createIndex(keys, options);
# 1 : 升序
# -1: 降序
db.test.createIndex( {"title" : 1, "description" : -1});

说明 : 语法中Key 值为你要创建的索引字段&#xff0c;1为指定 按升序创建索引&#xff0c;如果你想按降序来创建索引指定为 -1 即可。
options

# 1. 查看集合索引
db.collection.getIndexes();
# 2. 查看集合索引大小
db.collection.totalIndexSize();
# 3. 删除集合所有索引
db.collection.dropIndexes();
# 4. 删除集合指定索引
db.collection.dropIndex("索引名称);

复合索引

  • 说明 : 一个索引的值是由多个key进行维护的索引的称之为复合索引
  • 注意 : mongoDB 中复合索引和传统关系型数据库一致都是左前缀原则

db.collection.createIndex( {"title": 1, "description": -1})

复合索引
复合索引

9. 聚合

9.1 说明


MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值&#xff0c;求和等)&#xff0c;并返回计算后的数据结果。有点类似 SQL 语句中的 count(*)。


9.2 使用

{title: &#39;MongoDB Overview&#39;, description: &#39;MongoDB is no sql database&#39;,by_user: &#39;runoob.com&#39;,url: &#39;http://www.runoob.com&#39;,tags: [&#39;mongodb&#39;, &#39;database&#39;, &#39;NoSQL&#39;],likes: 100
},
{title: &#39;NoSQL Overview&#39;, description: &#39;No sql database is very fast&#39;,by_user: &#39;runoob.com&#39;,url: &#39;http://www.runoob.com&#39;,tags: [&#39;mongodb&#39;, &#39;database&#39;, &#39;NoSQL&#39;],likes: 10
},
{title: &#39;Neo4j Overview&#39;, description: &#39;Neo4j is no sql database&#39;,by_user: &#39;Neo4j&#39;,url: &#39;http://www.neo4j.com&#39;,tags: [&#39;neo4j&#39;, &#39;database&#39;, &#39;NoSQL&#39;],likes: 750
}

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

聚合表达式

10. 整合 SpringBoot

10.1 pom

<dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-data-mongodbartifactId>
dependency>

10.2 yml

spring:data:mongodb:host: localhostport: 27017database: demousername: nuopassword: xiaonuo123..&#43;

10.3 coding

相关注解

查

&#64;SpringBootTest
class MongodbApplicationTests {&#64;Autowiredprivate MongoTemplate mongoTemplate;&#64;Testvoid contextLoads() {}/** * TODO: 创建集合*/ &#64;Testvoid creatCollection() {System.out.println(mongoTemplate.createCollection("nuo"));}/*** TODO: 删除集合*/&#64;Testvoid dropCollection() {mongoTemplate.dropCollection("nuo");}/*** TODO: 增* - 插入重复数据时 :* insert: 报 DuplicateKeyException 提示主键重复;* save : 对已存在的数据进行更新.* - 批处理操作时:* insert: 可以一次性插入整个数据, 效率较高;* save : 需遍历整个数据, 一次插入或更新, 效率较低.*/&#64;Testvoid add() {mongoTemplate.save(new User(100, "nuo", "123"));mongoTemplate.insert(new User(101, "nuo", "123"));}/*** TODO: 删*/&#64;Testvoid del() {mongoTemplate.remove(Query.query(Criteria.where("username").is("test")), User.class);}/*** TODO: 改*/&#64;Testvoid put() {mongoTemplate.updateMulti(Query.query(Criteria.where("username").is("nuo")), Update.update("username", "test"), User.class);}/*** TODO: 查*/&#64;Testvoid query() {}}

11. 副本集

mongodb的复制至少需要两个节点。其中一个是主节点&#xff0c;负责处理客户端请求&#xff0c;其余的都是从节点&#xff0c;负责复制主节点上的数据。

mongodb各个节点常见的搭配方式为&#xff1a;一主一从、一主多从。

主节点记录在其上的所有操作oplog&#xff0c;从节点定期轮询主节点获取这些操作&#xff0c;然后对自己的数据副本执行这些操作&#xff0c;从而保证从节点的数据与主节点一致。
MongoDB复制结构图


副本集特征&#xff1a;

  • N 个节点的集群
  • 任何节点可作为主节点
  • 所有写入操作都在主节点上
  • 自动故障转移
  • 自动恢复


12. 分片集群

在Mongodb里面存在另一种集群&#xff0c;就是分片技术,可以满足MongoDB数据量大量增长的需求。

当MongoDB存储海量的数据时&#xff0c;一台机器可能不足以存储数据&#xff0c;也可能不足以提供可接受的读写吞吐量。这时&#xff0c;我们就可以通过在多台机器上分割数据&#xff0c;使得数据库系统能存储和处理更多的数据。

为什么使用分片?
\

  • 复制所有的写入操作到主节点
  • 延迟的敏感数据会在主节点查询
  • 单个副本集限制在12个节点
  • 当请求量巨大时会出现内存不足。
  • 本地磁盘不足
  • 垂直扩展价格昂贵

分片构建图

Shard :

  • 用于存储实际的数据块&#xff0c;实际生产环境中一个shard server角色可由几台机器组个一个replica set承担&#xff0c;防止主机单点故障

Config Server :

  • mongod实例&#xff0c;存储了整个 ClusterMetadata&#xff0c;其中包括 chunk信息。

Query Routers :

  • 前端路由&#xff0c;客户端由此接入&#xff0c;且让整个集群看上去像单一数据库&#xff0c;前端应用可以透明使用。


推荐阅读
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在Docker容器技术中限制容器对CPU的使用的方法,包括使用-c参数设置容器的内存限额,以及通过设置工作线程数量来充分利用CPU资源。同时,还介绍了容器权重分配的情况,以及如何通过top命令查看容器在CPU资源紧张情况下的使用情况。 ... [详细]
author-avatar
帕格迪奥
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有