@@ -46,27 +46,45 @@ Redis是REmote DIctionary Server的缩写,它是一个用ANSI C编写的高性
46
46
47
47
#### Redis的安装和配置
48
48
49
- 可以使用Linux系统的包管理工具(如yum)来安装Redis,也可以通过在Redis的[ 官方网站] ( https://redis.io/ ) 下载Redis的源代码,解压缩解归档之后通过make工具对源代码进行构建并安装,在更新这篇文档时,Redis官方提供的最新稳定版本是[ Redis 5.0.4 ] ( http ://download.redis.io/releases/redis-5.0.4 .tar.gz) 。
49
+ 可以使用Linux系统的包管理工具(如yum)来安装Redis,也可以通过在Redis的[ 官方网站] ( https://redis.io/ ) 下载Redis的源代码,解压缩解归档之后通过make工具对源代码进行构建并安装,在更新这篇文档时,Redis官方提供的最新稳定版本是[ Redis 5.0.10 ] ( https ://download.redis.io/releases/redis-5.0.10 .tar.gz) 。
50
50
51
- ``` Shell
52
- wget http://download.redis.io/releases/redis-5.0.4.tar.gz
53
- gunzip redis-5.0.4.tar.gz
54
- tar -xvf redis-5.0.4.tar
55
- cd redis-5.0.4
51
+ 下载:
52
+
53
+ ``` Bash
54
+ wget https://download.redis.io/releases/redis-5.0.10.tar.gz
55
+ ```
56
+
57
+ 解压缩和解归档:
58
+
59
+ ``` Bash
60
+ tar -zxf redis-5.0.10.tar.gz
61
+ ```
62
+
63
+ 进入Redis源代码目录:
64
+
65
+ ``` Bash
66
+ cd redis-5.0.10
67
+ ```
68
+
69
+ 构建和安装:
70
+
71
+ ``` Bash
56
72
make && make install
57
73
```
58
74
59
75
在redis源代码目录下有一个名为redis.conf的配置文件,我们可以先查看一下该文件。
60
76
61
- ``` Shell
77
+ ``` Bash
62
78
vim redis.conf
63
79
```
64
80
65
- 配置将Redis服务绑定到指定的IP地址和端口。
81
+ 下面我们对Redis的配置文件进行一个扼要的介绍。
82
+
83
+ 配置Redis服务的IP地址和端口:
66
84
67
85
![ ] ( ./res/redis-bind-and-port.png )
68
86
69
- 配置底层有多少个数据库。
87
+ 配置底层有多少个数据库:
70
88
71
89
![ ] ( ./res/redis-databases.png )
72
90
@@ -76,19 +94,19 @@ vim redis.conf
76
94
77
95
![ ] ( ./res/redis-rdb-3.png )
78
96
79
- 配置Redis的持久化机制 - AOF。
97
+ 配置Redis的持久化机制 - AOF:
80
98
81
99
![ ] ( ./res/redis-aof.png )
82
100
83
- 配置访问Redis服务器的验证口令。
101
+ 配置访问Redis服务器的口令:
84
102
85
103
![ ] ( ./res/redis-security.png )
86
104
87
- 配置Redis的主从复制, 通过主从复制可以实现读写分离。
105
+ 配置Redis的主从复制( 通过主从复制可以实现读写分离):
88
106
89
107
![ ] ( ./res/redis-replication.png )
90
108
91
- 配置慢查询。
109
+ 配置慢查询:
92
110
93
111
![ ] ( ./res/redis-slow-logs.png )
94
112
@@ -98,41 +116,46 @@ vim redis.conf
98
116
99
117
接下来启动Redis服务器,下面的方式将以默认的配置启动Redis服务。
100
118
101
- ``` Shell
119
+ ``` Bash
102
120
redis-server
103
121
```
104
122
105
123
如果希望修改Redis的配置(如端口、认证口令、持久化方式等),可以通过下面两种方式。
106
124
107
- 方式一:通过参数指定认证口令和AOF持久化方式。
125
+ ** 方式一** :通过参数指定认证口令和AOF持久化方式。
108
126
109
- ``` Shell
127
+ ``` Bash
110
128
redis-server --requirepass yourpass --appendonly yes
111
129
```
112
130
113
- 方式二:通过指定的配置文件来修改Redis的配置。
131
+ ** 方式二** :通过指定的配置文件来修改Redis的配置。
114
132
115
- ``` Shell
116
- redis-server /root/redis-5.0.4 /redis.conf
133
+ ``` Bash
134
+ redis-server /root/redis-5.0.10 /redis.conf
117
135
```
118
136
119
137
下面我们使用第一种方式来启动Redis并将其置于后台运行,将Redis产生的输出重定向到名为redis.log的文件中。
120
138
121
- ``` Shell
139
+ ``` Bash
122
140
redis-server --requirepass yourpass > redis.log &
123
141
```
124
142
125
- 可以通过ps或者netstat来检查Redis服务器是否启动成功 。
143
+ 可以通过 ` ps ` 或者 ` netstat ` 来检查Redis服务器是否启动成功 。
126
144
127
- ``` Shell
145
+ ``` Bash
128
146
ps -ef | grep redis-server
129
147
netstat -nap | grep redis-server
130
148
```
131
149
132
- 接下来,我们尝试用Redis客户端去连接服务器 。
150
+ 接下来,我们尝试用Redis命令行工具 ` redis-cli ` 去连接服务器,该工具默认连接本机的 ` 6379 ` 端口,如果需要指定Redis服务器和端口,可以使用 ` -h ` 和 ` -p ` 参数分别进行指定 。
133
151
134
- ``` Shell
152
+ ``` Bash
135
153
redis-cli
154
+ ```
155
+
156
+ 进入命令行工具后,就可以通过Redis的命令来操作Redis服务器,如下所示。
157
+
158
+ ``` Bash
136
159
127.0.0.1:6379> auth yourpass
137
160
OK
138
161
127.0.0.1:6379> ping
@@ -144,9 +167,9 @@ Redis有着非常丰富的数据类型,也有很多的命令来操作这些数
144
167
145
168
![ ] ( ./res/redis-data-types.png )
146
169
147
- > ** 说明** :上面的插图来自付磊和张益军先生编著的 《Redis开发与运维》一书。
170
+ > ** 说明** :上面的插图来自付磊和张益军编著的 《Redis开发与运维》一书。
148
171
149
- ``` Shell
172
+ ``` Bash
150
173
127.0.0.1:6379> set username admin
151
174
OK
152
175
127.0.0.1:6379> get username
251
274
2) " xuezq"
252
275
3) " zhoujl"
253
276
4) " chenyx"
254
- 127.0.0.1:6379> geoadd pois 116.39738549206541 39.90862689286386 tiananmen 116.27172936413572 39.99
255
- 135172904494 yiheyuan 117.27766503308104 40.65332064313784 gubeishuizhen
256
- (integer) 3
277
+ 127.0.0.1:6379> zrevrank topsinger zhoujl
278
+ (integer) 2
279
+ 127.0.0.1:6379> geoadd pois 116.39738549206541 39.90862689286386 tiananmen
280
+ (integer) 1
281
+ 127.0.0.1:6379> geoadd pois 116.27172936413572 39.99135172904494 yiheyuan
282
+ (integer) 1
283
+ 127.0.0.1:6379> geoadd pois 117.27766503308104 40.65332064313784 gubeishuizhen
284
+ (integer) 1
257
285
127.0.0.1:6379> geodist pois tiananmen gubeishuizhen km
258
286
" 111.5333"
259
287
127.0.0.1:6379> geodist pois tiananmen yiheyuan km
265
293
266
294
#### 在Python程序中使用Redis
267
295
268
- 可以使用pip安装redis模块。redis模块的核心是名为Redis的类,该类的对象代表一个Redis客户端, 通过该客户端可以向Redis服务器发送命令并获取执行的结果。上面我们在Redis客户端中使用的命令基本上就是Redis对象可以接收的消息 ,所以如果了解了Redis的命令就可以在Python中玩转Redis。
296
+ 可以使用pip安装名为 ` redis ` 的三方库,该三方库的核心是一个名为 ` Redis ` 的类, ` Redis ` 对象代表一个Redis客户端, 通过该客户端可以向Redis服务器发送命令并获取执行的结果。上面我们在Redis客户端中使用的命令基本上就是 ` Redis ` 对象可以接收的消息 ,所以如果了解了Redis的命令就可以在Python中玩转Redis。
269
297
270
- ``` Shell
298
+ ``` Bash
271
299
pip3 install redis
272
- python3
273
300
```
274
301
275
- ``` Python
302
+ 进入Python交互式环境,使用` redis ` 三方库来操作Redis。
303
+
304
+ ``` Bash
276
305
>>> import redis
277
- >> > client = redis.Redis(host = ' 1.2.3.4' , port = 6379 , password = ' yourpass' )
306
+ >>>
307
+ >>> client = redis.Redis(host=' 127.0.0.1' , port=6379, password=' yourpass' )
308
+ >>>
278
309
>>> client.set(' username' , ' admin' )
279
310
True
280
- >> > client.hset(' student' , ' name' , ' hao ' )
311
+ >>> client.hset(' student' , ' name' , ' luohao ' )
281
312
1
282
- >> > client.hset(' student' , ' age' , 38 )
313
+ >>> client.hset(' student' , ' age' , 40 )
283
314
1
284
315
>>> client.keys(' *' )
285
316
[b' username' , b' student' ]
286
317
>>> client.get(' username' )
287
318
b' admin'
288
319
>>> client.hgetall(' student' )
289
- {b ' name' : b ' hao ' , b ' age' : b ' 38 ' }
320
+ {b' name' : b' luohao ' , b' age' : b' 40 ' }
290
321
```
291
322
292
323
### MongoDB概述
@@ -299,53 +330,60 @@ MongoDB将数据存储为一个文档,一个文档由一系列的“键值对
299
330
300
331
目前,MongoDB已经提供了对Windows、macOS、Linux、Solaris等多个平台的支持,而且也提供了多种开发语言的驱动程序,Python当然是其中之一。
301
332
302
- #### MongoDB的安装和配置
333
+ #### MongoDB的安装和启动
303
334
304
- 可以从MongoDB的[ 官方下载链接] ( https://www.mongodb.com/download-center# community ) 下载MongoDB,官方为Windows系统提供了一个Installer程序,而Linux和MacOS则提供了压缩文件。下面简单说一下Linux系统如何安装和配置MongoDB 。
335
+ 可以从MongoDB的[ 官方下载链接] ( https://www.mongodb.com/try/ download/ community ) 下载MongoDB,官方提供了Windows、macOS和多种Linux版本的安装包。下面以CentOS为例,简单说一下如何安装和启动MongoDB 。
305
336
306
- ``` Shell
307
- wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-3.6.5.tgz
308
- gunzip mongodb-linux-x86_64-amazon-3.6.5.tgz
309
- mkdir mongodb-3.6.5
310
- tar -xvf mongodb-linux-x86_64-amazon-3.6.5.tar --strip-components 1 -C mongodb-3.6.5/
311
- export PATH=$PATH :~ /mongodb-3.6.5/bin
337
+ 下载服务器和命令行的RPM安装包。
338
+
339
+ ``` Bash
340
+ wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.4/x86_64/RPMS/mongodb-org-server-4.4.2-1.el7.x86_64.rpm
341
+ rpm -ivh mongodb-org-server-4.4.2-1.el7.x86_64.rpm
342
+ wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.4/x86_64/RPMS/mongodb-org-shell-4.4.2-1.el7.x86_64.rpm
343
+ rpm -ivh mongodb-org-shell-4.4.2-1.el7.x86_64.rpm
344
+ ```
345
+
346
+ 启动MongoDB服务器,需要先创建保存数据的文件夹。
347
+
348
+ ``` Bash
312
349
mkdir -p /data/db
313
- mongod --bind_ip 172.18.61.250
314
-
315
- 2018-06-03T18:03:28.232+0800 I CONTROL [initandlisten] MongoDB starting : pid=1163 port=27017 dbpath=/data/db 64-bit host=iZwz97tbgo9lkabnat2lo8Z
316
- 2018-06-03T18:03:28.232+0800 I CONTROL [initandlisten] db version v3.6.5
317
- 2018-06-03T18:03:28.232+0800 I CONTROL [initandlisten] git version: a20ecd3e3a174162052ff99913bc2ca9a839d618
318
- 2018-06-03T18:03:28.232+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.0-fips29 Mar 2010
319
- ...
320
- 2018-06-03T18:03:28.945+0800 I NETWORK [initandlisten] waiting for connections on port 27017
321
350
```
322
351
323
- > ** 说明** :上面的操作中,export命令是设置PATH环境变量,这样可以在任意路径下执行mongod来启动MongoDB服务器。MongoDB默认保存数据的路径是/data/db目录,为此要提前创建该目录。此外,在使用mongod启动MongoDB服务器时,--bind_ip参数用来将服务绑定到指定的IP地址,也可以用--port参数来指定端口,默认端口为27017。
352
+ 修改MongoDB的配置文件,将其中` bindIp ` 选项的值修改为本机IP地址而不是默认的` 127.0.0.1 ` ,本机IP地址可以通过` ifconfig ` 命令进行查看。
353
+
354
+ ``` Bash
355
+ vim /etc/mongod.conf
356
+ ```
357
+
358
+ 使用` systemctl ` 命令启动服务。
359
+
360
+ ``` Bash
361
+ systemctl start mongod
362
+ ```
324
363
325
364
#### MongoDB基本概念
326
365
327
- 我们通过与关系型数据库进行对照的方式来说明MongoDB中的一些概念 。
366
+ 我们通过与关系型数据库的比较来说明MongoDB中的一些概念 。
328
367
329
- | SQL | MongoDB | 解释(SQL/ MongoDB) |
330
- | ----------- | ----------- | ---- ------------------ |
331
- | database | database | 数据库/数据库 |
332
- | table | collection | 二维表/集合 |
333
- | row | document | 记录(行)/文档 |
334
- | column | field | 字段(列)/域 |
335
- | index | index | 索引/索引 |
336
- | table joins | --- | 表连接/ 嵌套文档 |
337
- | primary key | primary key | 主键/主键( ` _id ` 字段) |
368
+ | SQL | MongoDB |
369
+ | --------------------- | ------------------ |
370
+ | database | database |
371
+ | table(表) | collection(集合) |
372
+ | row(行) | document(文档) |
373
+ | column(列) | field(字段) |
374
+ | index | index |
375
+ | table joins(表连接) | ( 嵌套文档) |
376
+ | primary key | primary key |
338
377
339
378
#### 通过Shell操作MongoDB
340
379
341
- 启动服务器后可以使用交互式环境跟服务器通信,如下所示 。
380
+ 0 . 启动命令行工具,进入交互式环境 。
342
381
343
- ``` shell
344
- mongo --host 172.18.61.250
382
+ ``` Bash
383
+ mongo
384
+ ```
345
385
346
- MongoDB shell version v3.6.5
347
- connecting to: mongodb://172.18.61.250:27017/
348
- ```
386
+ > ** 说明** :
349
387
350
388
1. 查看、创建和删除数据库。
351
389
@@ -361,7 +399,6 @@ connecting to: mongodb://172.18.61.250:27017/
361
399
> // 删除当前数据库
362
400
> db.dropDatabase ()
363
401
{ " ok" : 1 }
364
- >
365
402
` ` `
366
403
367
404
2. 创建、删除和查看集合。
@@ -383,16 +420,15 @@ connecting to: mongodb://172.18.61.250:27017/
383
420
> // 删除colleges集合
384
421
> db.colleges.drop ()
385
422
true
386
- >
387
423
` ` `
388
424
389
- > 说明 :在MongoDB中插入文档时如果集合不存在会自动创建集合,所以也可以按照下面的方式通过创建文档来创建集合 。
425
+ > ** 说明 ** :在MongoDB中插入文档时如果集合不存在会自动创建集合,所以也可以按照下面的方式通过插入文档来创建集合 。
390
426
391
427
3. 文档的CRUD操作。
392
428
393
429
` ` ` JavaScript
394
430
> // 向students集合插入文档
395
- > db .students .insert ({stuid: 1001 , name: ' 骆昊' , age: 38 })
431
+ > db.students.insert({stuid: 1001, name: ' 骆昊' , age: 40 })
396
432
WriteResult({ " nInserted" : 1 })
397
433
> // 向students集合插入文档
398
434
> db.students.save({stuid: 1002, name: ' 王大锤' , tel: ' 13012345678' , gender: ' 男' })
@@ -482,22 +518,23 @@ connecting to: mongodb://172.18.61.250:27017/
482
518
" numIndexesAfter" : 2,
483
519
" ok" : 1
484
520
}
485
- >
486
521
` ` `
487
522
488
523
使用MongoDB可以非常方便的配置数据复制,通过冗余数据来实现数据的高可用以及灾难恢复,也可以通过数据分片来应对数据量迅速增长的需求。关于MongoDB更多的操作可以查阅[官方文档](https://mongodb-documentation.readthedocs.io/en/latest/) ,同时推荐大家阅读Kristina Chodorow写的[《MongoDB权威指南》](http://www.ituring.com.cn/book/1172)。
489
524
490
525
# ### 在Python程序中操作MongoDB
491
526
492
- 可以通过pip安装pymongo来实现对MongoDB的操作 。
527
+ 可以通过pip安装 ` pymongo ` 来实现对MongoDB的操作 。
493
528
494
529
` ` ` Shell
495
- pip3 install pymongo
496
- python3
530
+ pip install pymongo
497
531
` ` `
498
532
533
+ 进入Python交互式环境,就可以执行以下的操作。
534
+
499
535
` ` ` Python
500
536
>>> from pymongo import MongoClient
537
+ >>>
501
538
>>> client = MongoClient(' mongodb://127.0.0.1:27017' )
502
539
>>> db = client.school
503
540
>>> for student in db.students.find ():
@@ -520,8 +557,9 @@ python3
520
557
{' n' : 3, ' ok' : 1.0}
521
558
>>> db.students.find().count ()
522
559
0
523
- >> > coll = db.students
524
560
>>> from pymongo import ASCENDING
561
+ >>>
562
+ >>> coll = db.students
525
563
>>> coll.create_index([(' name' , ASCENDING)], unique=True)
526
564
' name_1'
527
565
>>> coll.insert_one({' stuid' : int(1001), ' name' : ' 骆昊' , ' gender' : True})
@@ -539,7 +577,6 @@ python3
539
577
学号: 1003
540
578
姓名: 白元芳
541
579
性别: 男
542
- >> >
543
580
` ` `
544
581
545
- 关于PyMongo更多的知识可以通过它的 [ 官方文档 ] ( https://api.mongodb.com/python/current/tutorial.html ) 进行了解 ,也可以使用[ MongoEngine] ( < https://pypi.org/project/mongoengine/ > ) 这样的库来简化Python程序对MongoDB的操作,除此之外,还有以异步I/O方式访问MongoDB的三方库[ motor] ( < https://pypi.org/project/motor/ > ) 都是不错的选择。
582
+ 关于[ ` pymongo ` ](https://api.mongodb.com/python/current/tutorial.html)更多的知识可以通过它的官方文档进行了解 ,也可以使用[` MongoEngine` ](< https://pypi.org/project/mongoengine/> )这样的库来简化Python程序对MongoDB的操作,除此之外,还有以异步I/O方式访问MongoDB的三方库[` motor` ](< https://pypi.org/project/motor/> )都是不错的选择。
0 commit comments