memcache缓存服务器(nginx php memcache mysql)

环境:

192.168.1.23  nginx+php

192.168.1.28  memcache

192.168.1.27  mysql

一、安装 nginx (192.168.1.23)

1、解压 zlib 和pcre 不需要编译,只需要解压就行。

[root@localhost ~]# tar zxf zlib-1.2.8.tar.gz

[root@localhost ~]# tar zxf pcre-8.39.tar.gz

2、安装依赖包

[root@localhost ~]#yum -y install gcc gcc-c++ make libtool openssl openssl-devel

3、解压源码包

①下载 nginx 的源码包: http://nginx.org/download

[root@localhost ~]# tar zxf nginx-1.14.0.tar.gz

[root@localhost ~]# cd nginx-1.14.0/

[root@localhost nginx-1.14.0]# groupadd www

[root@localhost nginx-1.14.0]# useradd -g www www -s /sbin/nologin

[root@localhost nginx-1.14.0]#./configure --prefix=/usr/local/nginx1.14 \

--with-http_dav_module --with-http_stub_status_module \

--with-http_addition_module --with-http_sub_module \

--with-http_flv_module --with-http_mp4_module \

--with-pcre=/root/pcre-8.39 --with-zlib=/root/zlib-1.2.8 \

--with-http_ssl_module --with-http_gzip_static_module --user=www \

--group=www

[root@localhost nginx-1.14.0]# make && make install

[root@localhost nginx-1.14.0]# ln -s /usr/local/nginx1.14/sbin/nginx /usr/local/sbin/

[root@localhost nginx-1.14.0]# nginx -t

nginx: the configuration file /usr/local/nginx1.14/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx1.14/conf/nginx.conf test is successful

[root@localhost nginx-1.14.0]# nginx

[root@localhost nginx-1.14.0]# netstat -anpt | grep nginx

4、关闭防火墙或者开启端口

[root@localhost nginx-1.14.0]# systemctl stop firewalld.service

5、安装 php

①安装 libmcrypt

[root@localhost ~]# tar zxf libmcrypt-2.5.7.tar.gz

[root@localhost ~]# cd libmcrypt-2.5.7/

[root@localhost libmcrypt-2.5.7]#  ./configure --prefix=/usr/local/libmcrypt && make && make install

②安装依赖包

[root@localhost libmcrypt-2.5.7]# yum -y install libxml2-devel libcurl-devel openssl-devel bzip2-devel

[root@localhost ~]# tar zxf php-5.6.27.tar.gz

[root@localhost ~]# cd php-5.6.27/

[root@localhost php-5.6.27]#./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd \

--with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets \

--enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib \

--with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt \

--with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 \

--enable-maintainer-zts

[root@localhost php-5.6.27]#make && make install

[root@localhost php-5.6.27]# cp php.ini-production /etc/php.ini

③修改/etc/php.ini 文件,将 short_open_tag 修改为 on

[root@localhost php-5.6.27]#vim /etc/php.ini

;short_open_tag   改成  short_open_tag=0         //第151行(支持 php 短标签 )

④创建 php-fpm 服务启动脚本:

[root@localhost php-5.6.27]#  cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

[root@localhost php-5.6.27]#  chmod +x /etc/init.d/php-fpm

[root@localhost php-5.6.27]# chkconfig --add php-fpm

[root@localhost php-5.6.27]#  chkconfig php-fpm on

⑤提供 php-fpm 配置文件并编辑

[root@localhost php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf

[root@localhost php-5.6.27]#vim /usr/local/php5.6/etc/php-fpm.conf

第25行去掉;    pid = run/php-fpm.pid

第164行         listen =127.0.0.1:9000

第235行         pm.max_children = 300

第240行         pm.start_servers = 10

第245行   pm.min_spare_servers = 10

第250行         pm.max_spare_servers =50

⑥启动 php-fpm 服务

[root@localhost php-5.6.27]#  service php-fpm start

Starting php-fpm  done

[root@localhost php-5.6.27]# netstat -anpt | grep php-fpm

tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      52269/php-fpm: mast

二、安装MySQL省略(192.168.1.27)

三、安装 memcached 服务端 (192.168.1.28)

1、首先先安装 memcached 依赖库 libevent

[root@localhost ~]# tar zxf libevent-2.0.22-stable.tar.gz

[root@localhost ~]# cd libevent-2.0.22-stable/

[root@localhost libevent-2.0.22-stable]# ./configure

[root@localhost libevent-2.0.22-stable]# make && make install

①安装 memcached

[root@localhost ~]# tar zxf memcached-1.4.33.tar.gz

[root@localhost ~]# cd memcached-1.4.33/

[root@localhost memcached-1.4.33]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local

[root@localhost memcached-1.4.33]# make && make install

②检测是否成功安装

[root@localhost memcached-1.4.33]#  ls /usr/local/memcached/bin/memcached

/usr/local/memcached/bin/memcached

③为系统环境变量 LD_LIBRARY_PATH 增加新的目录

[root@localhost memcached-1.4.33]# vim ~/.bash_profile

添加:

MEMCACHED_HOME=/usr/local/memcached

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MEMCACHED_HOME/lib

[root@localhost ~]# systemctl stop firewalld.service

[root@localhost ~]#  /usr/local/memcached/bin/memcached -d -m 2048 -l 192.168.1.28 -p 11211 -u root -c 10240 -P /usr/local/memcached/memcached.pid

[root@localhost ~]#  netstat -anpt |grep memcached

tcp        0      0 192.168.1.28:11211      0.0.0.0:*               LISTEN      64362/memcached

④刷新用户环境变量:

[root@localhost ~]# source ~/.bash_profile

⑤编写 memcached 服务启停脚本

[root@localhost memcached-1.4.33]#vi /etc/init.d/memcached

添加:

#!/bin/sh

#

# pidfile: /usr/local/memcached/memcached.pid

# memcached_home: /usr/local/memcached

# chkconfig: 35 21 79

# description: Start and stop memcached Service

# Source function library

. /etc/rc.d/init.d/functions

RETVAL=0

prog="memcached"

basedir=/usr/local/memcached

cmd=${basedir}/bin/memcached

pidfile="$basedir/${prog}.pid"

#interface to listen on (default: INADDR_ANY, all addresses)

ipaddr="192.168.1.28"

#listen port

port=11211

#username for memcached

username="root"

#max memory for memcached,default is 64M

max_memory=2048

#max connections for memcached

max_simul_conn=10240

start() {

echo -n $"Starting service: $prog"

$cmd -d -m $max_memory -u $username -l $ipaddr -p $port -c $max_simul_conn -P $pidfile

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog

}

stop() {

echo -n $"Stopping service: $prog "

run_user=$(whoami)

pidlist=$(ps -ef | grep $run_user | grep memcached | grep -v grep | awk '{print($2)}')

for pid in $pidlist

do

kill -9 $pidif [ $? -ne 0 ]; then

return 1

fi

done

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog

}

# See how we were called.

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

stop

start

;;

*)

echo "Usage: $0 {start|stop|restart|status}"

exit 1

esac

exit $RETVAL

[root@localhost ~]#  chmod +x /etc/init.d/memcached

[root@localhost ~]#  chkconfig --add memcached

[root@localhost ~]#  chkconfig memcached on

2、配置 nginx.conf 文件(在 nginx 主机操作)

①修改配置文件

[root@localhost ~]# vi /usr/local/nginx1.14/conf/nginx.conf

全删掉然后添加:

user www www;

worker_processes 2;

worker_cpu_affinity 01 10;

error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;pid logs/nginx.pid;

events {

use epoll;

worker_connections 65535;

multi_accept on;

}

http {

include mime.types;

default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '

# '$status $body_bytes_sent "$http_referer" '

# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;

tcp_nopush on;

keepalive_timeout 65;

tcp_nodelay on;

client_header_buffer_size 4k;

open_file_cache max=102400 inactive=20s;

open_file_cache_valid 30s;

open_file_cache_min_uses 1;

client_header_timeout 15;

client_body_timeout 15;

reset_timedout_connection on;

send_timeout 15;

server_tokens off;

client_max_body_size 10m;

fastcgi_connect_timeout 600;

fastcgi_send_timeout 600;

fastcgi_read_timeout 600;

fastcgi_buffer_size 64k;

fastcgi_buffers 4 64k;

fastcgi_busy_buffers_size 128k;

fastcgi_temp_file_write_size 128k;

fastcgi_temp_path /usr/local/nginx1.14/nginx_tmp;

fastcgi_intercept_errors on;

fastcgi_cache_path /usr/local/nginx1.14/fastcgi_cache levels=1:2 keys_zone=cache_fastcgi:128m inactive=1d max_size=10g;

gzip on;

gzip_min_length 2k;

gzip_buffers 4 32k;

gzip_http_version 1.1;

gzip_comp_level 6;

gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;

gzip_vary on;

gzip_proxied any;

server {

listen 80;

server_name www.benet.com;

#charset koi8-r;

#access_log logs/host.access.log main;

location ~* ^.+\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {

valid_referers none blocked www.benet.com benet.com;

if ($invalid_referer) {

#return 302 http://www.benet.com/img/nolink.jpg;

return 404;

break;

}

access_log off;

}

location / {

root html;

index index.php index.html index.htm;

}

location ~* \.(ico|jpe?g|gif|png|bmp|swf|flv)$ {

expires 30d;

#log_not_found off;

access_log off;

}

location ~* \.(js|css)$ {

expires 7d;

log_not_found off;

access_log off;

}location = /(favicon.ico|roboots.txt) {

access_log off;

log_not_found off;

}

location /status {

stub_status on;

}

location ~ .*\.(php|php5)?$ {

root html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

include fastcgi.conf;

fastcgi_cache cache_fastcgi;

fastcgi_cache_valid 200 302 1h;

fastcgi_cache_valid 301 1d;

fastcgi_cache_valid any 1m;

fastcgi_cache_min_uses 1;

fastcgi_cache_use_stale error timeout invalid_header http_500;

fastcgi_cache_key http://$host$request_uri;

}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

}

②重启 nginx 服务

[root@localhost php-5.6.27]# nginx -s  reload

[root@localhost php-5.6.27]# netstat -anpt | grep nginx

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      15512/nginx: worker

③生成一个 php 测试页

[root@localhost ~]# cd /usr/local/nginx1.14/html/

[root@localhost html]# vim test1.php

添加:

<?php

phpinfo();

?>

3、memcache 客户端(在 nginx、php 服务器操作)

①安装memcache客户端

[root@localhost ~]# tar zxf memcache-3.0.8.tgz

[root@localhost ~]# cd memcache-3.0.8/

[root@localhost memcache-3.0.8]# /usr/local/php5.6/bin/phpize

[root@localhost memcache-3.0.8]#./configure --enable-memcache --with-php-config=/usr/local/php5.6/bin/php-config

[root@localhost memcache-3.0.8]#  make && make install

②安装完后会有类似这样的提示:

Installing shared extensions:

/usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/

③把这个记住,然后修改 php.ini

[root@localhost memcache-3.0.8]# vim /etc/php.ini

添加:

extension=/usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/memcache.so

④重启 php-fpm 服务

[root@localhost memcache-3.0.8]# service php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm  done

4、测试:

①检查 php 扩展是否正确安装  查询结果中是否有 memcache 项

②创建 phpinfo()页面,查询 session 项下面的 Registered save handlers 值中是否有 memcache

③浏览器访问 test1.php

④测试代码:

[root@localhost memcache-3.0.8]# cd /usr/local/nginx1.14/html/

[root@localhost html]# vim test2.php

添加:

<?php

$memcache = new Memcache;

$memcache->connect('192.168.1.28', 11211) or die ("Could not connect");

$version = $memcache->getVersion();echo "Server's version: ".$version."<br/>";

$tmp_object = new stdClass;

$tmp_object->str_attr = 'test';

$tmp_object->int_attr = 123;

$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");

echo "Store data in the cache (data will expire in 10 seconds)<br/>";

$get_result = $memcache->get('key');

echo "Data from the cache:<br/>";

var_dump($get_result);

?>

⑤浏览器访问 test2.ph

5、使用 memcache 实现 session 共享

①编辑php.ini

[root@localhost html]# vim /etc/php.ini

第1394行    session.save_handler = memcache

第1423行    session.save_path = "tcp://192.168.1.28:11211?persistent=1&weight=1&timeout=1&retry_interval=15"

②重启 php-fpm 服务

[root@localhost memcache-3.0.8]# service php-fpm restart

③测试 memcache 可用性

在 nginx(php) 服务器上新建//usr/local/nginx1.10/html/memcache.php 文件

[root@localhost html]# vim memcache.php

<?php

session_start();

if (!isset($_SESSION['session_time']))

{

$_SESSION['session_time'] = time();

}

echo "session_time:".$_SESSION['session_time']."<br />";

echo "now_time:".time()."<br />";echo "session_id:".session_id()."<br />";

?>

④访问网址 查看 session_time 是否都是为 memcache

中的 Session,同时可以在不同的服务器上修改不同的标识查看是否为不同的服务器

可以直接用 sessionid 去 memcached 里查询一下:

⑤没安装telnet可以yum安装

[root@localhost html]# yum -y install telnet

[root@localhost html]# telnet 192.168.1.28 11211

Trying 192.168.1.28...

Connected to 192.168.1.28.

Escape character is '^]'.

get r9k2ude5o7q92tb0772vlopee5

VALUE r9k2ude5o7q92tb0772vlopee5 0 26

session_time|i:1527087585;

END

得到 session_time|i:1527087585;这样的结果,说明 session 正常工作

默认 memcache 会监听 11221 端口,如果想清空服务器上 memecache 的缓存,一般使用:

Trying 192.168.1.28...

Connected to 192.168.1.28.

Escape character is '^]'.

flush_all

OK

6、测试 memcache 缓存数据库数据

①在 Mysql 服务器上创建测试表

[root@localhost ~]# mysql -uroot -p123456

mysql> create database testdb1;

Query OK, 1 row affected (0.07 sec)

mysql> use testdb1;

Database changed

mysql> create table test1(id int not null auto_increment,name varchar(20) default null,primarykey (id)) engine=innodb auto_increment=1 default charset=utf8;

Query OK, 0 rows affected (0.20 sec)

mysql>  insert into test1(name) values ('tom1'),('tom2'),('tom3'),('tom4'),('tom5');

Query OK, 5 rows affected (0.09 sec)

Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from test1;

+----+------+

| id | name |

+----+------+

|  1 | tom1 |

|  2 | tom2 |

|  3 | tom3 |

|  4 | tom4 |

|  5 | tom5 |

+----+------+

5 rows in set (0.00 sec)

②测试

创建php测试脚本  用于测试 memcache 是否缓存数据成功  需要为这个脚本添加一个只读的数据库用户

mysql> grant select on testdb1.* to user@'%' identified by '123456';

Query OK, 0 rows affected, 1 warning (0.08 sec)

③在 nginx(php) 服务器上创建测试脚本内容

[root@localhost html]# vim test_db.php

添加:

<?php

$memcachehost = '192.168.1.28';

$memcacheport = 11211;

$memcachelife = 60;

$memcache = new Memcache;

$memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");

$query="select * from test1 limit 10";

$key=md5($query);

if(!$memcache->get($key))

{

$conn=mysql_connect("192.168.1.27","user","123456");

mysql_select_db(testdb1);

$result=mysql_query($query);

while ($row=mysql_fetch_assoc($result))

{

$arr[]=$row;

}

$f = 'mysql';

$memcache->add($key,serialize($arr),0,30);

$data = $arr ;

}

else{$f = 'memcache';

$data_mem=$memcache->get($key);

$data = unserialize($data_mem);

}

echo $f;

echo "<br>";

echo "$key";

echo "<br>";

//print_r($data);

foreach($data as $a)

{

echo "number is <b><font color=#FF0000>$a[id]</font></b>";

echo "<br>";

echo "name is <b><font color=#FF0000>$a[name]</font></b>";

echo "<br>";

}

?>

④访问页面测试

如果出现 mysql 表示 memcached 中没有内容,需要 memcached 从数据库中取得

再刷新页面, 如果有 memcache 标志表示这次的数据是从 memcached 中取得的。

memcached 有个缓存时间默认是 1 分钟,过了一分钟后, memcached 需要重新从数据库中

取得数据

⑤查看 Memcached 缓存情况

[root@localhost ~]# telnet 192.168.1.28 11211

Trying 192.168.1.28...

Connected to 192.168.1.28.

Escape character is '^]'.

stats

STAT pid 53181                 //Memcached 进程的 ID

STAT uptime 3170               //进程运行时间

STAT time 1527088278           //当前时间

STAT version 1.4.33            // Memcached 版本

STAT libevent 2.0.22-stable

STAT pointer_size 64

STAT rusage_user 0.904999

STAT rusage_system 1.218613

STAT curr_connections 15

STAT total_connections 34

STAT connection_structures 16

STAT reserved_fds 20

STAT cmd_get 34                 //总共获取数据的次数(等于 get_hits + get_misses )

STAT cmd_set 53                 //总共设置数据的次数

STAT cmd_flush 1

STAT cmd_touch 0

STAT get_hits 27                //命中了多少次数据,也就是从 Memcached 缓存中成功获取数据的次数

STAT get_misses 7              //没有命中的次数

STAT get_expired 1

STAT get_flushed 0

STAT delete_misses 0

STAT delete_hits 0

STAT incr_misses 1

STAT incr_hits 12

STAT decr_misses 0

STAT decr_hits 0

STAT cas_misses 0

STAT cas_hits 0

STAT cas_badval 0

STAT touch_hits 0

STAT touch_misses 0

STAT auth_cmds 0

STAT auth_errors 0

STAT bytes_read 5521

STAT bytes_written 3502

STAT limit_maxbytes 2147483648            //总的存储大小,默认为 64M

STAT accepting_conns 1

STAT listen_disabled_num 0

STAT time_in_listen_disabled_us 0

STAT threads 4

STAT conn_yields 0

STAT hash_power_level 16

STAT hash_bytes 524288

STAT hash_is_expanding 0

STAT malloc_fails 0

STAT log_worker_dropped 0

STAT log_worker_written 0

STAT log_watcher_skipped 0

STAT log_watcher_sent 0

STAT bytes 702                        //当前所用存储大小

STAT curr_items 4

STAT total_items 41

STAT expired_unfetched 0

STAT evicted_unfetched 0

STAT evictions 0

STAT reclaimed 1

STAT crawler_reclaimed 0

STAT crawler_items_checked 0

STAT lrutail_reflocked 0

END

命中率= get_hits/ cmd_get

转载于:https://blog.51cto.com/13765404/2120019

memcache缓存服务器(nginx php memcache mysql)相关推荐

  1. php无法加载Memcache缓存模块问题及Memcache的安装

    今天早上去迁移网站发现打开网站报错 然后我去phpinfo.php看了一下,果然我的测试页里面有加载到Memcache这个模块,如下图: 这时候,既然发现了问题的所在我们就要去排查问题,当前这个问题呢 ...

  2. 虚拟机玩转缓存服务器,Nginx服务器中浏览器本地缓存和虚拟机的相关设置

    自动列出目录配置: 下载过开源软件的都知道,一个很简单的页面列出了所有版本的源码包,这就是开启了自动列出目录 如下配置,在虚拟主机location / {--}目录控制中配置自动列出目录: locat ...

  3. Nginx做缓存服务器

    Nginx做缓存服务器 Nginx配置 1.主配置/etc/nginx/nginx.conf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...

  4. 使用Memcache缓存mysql数据库操作的原理和缓存过程浅析

    1.首先明确是不是一定要上缓存,当前架构的瓶颈在哪里,若瓶颈真是数据库操作上,再继续往下看. 2.明确memcached和redis的区别,到底要使用哪个.前者终究是个缓存,不可能永久保存数据(LRU ...

  5. MySQL与Redis数据库结合——redis作为mysql的缓存服务器,实现读写分离(nginx+php+redis+mysql)

    文章目录 一.读写分离的背景 二.搭建nginx+php+redis+mysql 实验环境 实验 1.在server1上安装nginx+php 建立php和redis,mysql的连接 2.在serv ...

  6. linux nginx连接memcache和ngx_http_consistent_hash负载均衡算法

    一.打开nginx的配置文件 加入这两行配置 1.set m e m c a c h e d k e y " memcached_key " memcachedk​ey" ...

  7. nginx+tomcat+memcache实现负载均衡、session共享

    实验架构图: Table of Contents 1.配置tomcat 2.安装memcache 3.查看tomcat和memcache是否配置好 4.nginx实现负载均衡: 5.客户端进行测试: ...

  8. 三大缓存框架ehcache、memcache和redis的介绍

    三大缓存框架ehcache.memcache和redis的介绍 2016-04-12 架构说 4964 阅读 最近项目组有用到这三个缓存,去各自的官方看了下,觉得还真的各有千秋!今天特意归纳下各个缓存 ...

  9. Memcache缓存系统

    1. 缓存系统 一.静态web页面: 1.在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request), ...

最新文章

  1. leetcode算法题--仅仅反转字母
  2. Sublime Text 2快捷键大全
  3. 用scikit-learn进行LDA降维(转载+注释)
  4. 经典 HTML5 Javascript 俄罗斯方块游戏
  5. 从 Google Code 迁移代码到 GitHub 上
  6. jquery2.1.1 checkbox
  7. dev控件ASPxComboBox设置ReadOnly=true后
  8. sqlalchemy入门记录
  9. 小白的web优化之路 一、使用redis来缓存信息
  10. 复习,网课,视频回放,太慢怎么办,试试倍速播放吧 (无需下载)
  11. 斐波那契数列(入门c语言)
  12. Balsamiq Mockups完全手册
  13. HRBUST1151-魔女
  14. Linux运维常用知识(1)
  15. 已损坏打不开您应该推出磁盘映像
  16. 五种JavaScript富文本编辑器,总有一款适合你
  17. Pointer being freed was not allocated
  18. java 内存模型面试_Java面试- JVM 内存模型讲解
  19. 9款红包封面来了,定好闹钟领取!
  20. 解决使用plt.savefig保存图片时一片空白

热门文章

  1. 27年安全技术老兵无奈“一摔成名”,谭晓生自述一年创业进展
  2. 高清还原破损视频,参数和训练时间减少三分之二,台大这项研究登上了BMVC 2019...
  3. MVP架构设计 初探
  4. 省时省事省力 巧用阿里ECS D1构建大数据处理平台
  5. 浮点数为何不能进行相等性比较
  6. python 字符串分割和拼接_python分割和拼接字符串
  7. 设计模式 — 创建型模式 — 单例模式
  8. AWS — AWS Local Zone
  9. Go 语言编程 — make 和 new
  10. VMware 接入 Openstack — 使用 Openstack 创建 vCenter 虚拟机