LNMP架构之静态缓存(nginx+php+mysql+memcache)

本文详细介绍了LNMP(Linux, Nginx, MySQL, PHP)的基本架构、编译安装过程,并重点讲解了如何添加和配置Memcache作为PHP的缓存,通过外压测试验证了使用Memcache提升系统效率。" 116342998,10543887,Oracle 11gR2数据库卸载指南,"['数据库管理', 'Oracle数据库', '系统维护', '卸载教程']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.LNMP基本架构

1.L(linux)N(nginx)M(mysql)P(php)
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql是一个小型关系型数据库管理系统。
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。

这里写图片描述

2.编译顺序
Mysql ->php ->nginx 
由于编译的时候比较浪费磁盘内存,所以把虚拟机的内存尽量放大,使得编译的时候提升速度,我这里的虚拟机大小为2G

在这里插入图片描述

二.lnmp架构的优点

作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。
作为负载均衡服务器:Nginx 既可以在内部直接支持Rails和PHP,也可以支持作为 HTTP代理服务器对外进行服务。Nginx 用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好的多。
作为邮件代理服务器:Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last/fm 描述了成功并且美妙的使用经验。
Nginx 安装非常的简单,配置文件非常简洁(还能够支持perl语法)。Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。

三.实现mysql,php,nginx的源码编译

1.mysql源码编译( 注意版本问题)
[root@server1 ~]# ls   # 先获取软件包
cmake-2.8.12.2-4.el6.x86_64.rpm  # cmake是编译器
mysql-boost-5.7.17.tar.gz
[root@server1 ~]# tar zxf mysql-boost-5.7.17.tar.gz 
[root@server1 ~]# ls
cmake-2.8.12.2-4.el6.x86_64.rpm  
mysql-5.7.17  mysql-boost-5.7.17.tar.gz
[root@server1 ~]# yum install -y cmake-2.8.12.2-4.el6.x86_64.rpm 
[root@server1 ~]# yum install -y gcc gcc-c++ ncurses-devel bison
[root@server1 ~]# mkdir /usr/local/lnmp
[root@server1 ~]# cd mysql-5.7.17/
[root@server1 mysql-5.7.17]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \
 -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data \
 -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \
 -DWITH_MYISAM_STORAGE_ENGINE=1 \
 -DWITH_INNOBASE_STORAGE_ENGINE=1 \
 -DDEFAULT_CHARSET=utf8 \
 -DDEFAULT_COLLATION=utf8_general_ci \
 -DEXTRA_CHARSETS=all \
 -DWITH_BOOST=boost/boost_1_59_0/ 

在这里插入图片描述

[root@server1 mysql-5.7.17]# rm -fr CMakeCache.txt  # 在编译过程中如果解决依赖性,再重新编译时,需要清除缓存
[root@server1 mysql-5.7.17]# make && make install
[root@server1 mysql-5.7.17]# cd /usr/local/lnmp/mysql/
[root@server1 mysql]# ls
bin  COPYING  docs  include  lib  man  mysql-test  README  share  support-files
[root@server1 mysql]# cd support-files/
[root@server1 support-files]# cp my-default.cnf /etc/my.cnf 
cp: overwrite `/etc/my.cnf'? Y
[root@server1 support-files]# vim /etc/my.cnf  
 basedir =/usr/local/lnmp/mysql 
 datadir =/usr/local/lnmp/mysql/data 
 port =3306 
 # server_id = ..... 
 socket =/usr/local/lnmp/mysql/data/mysql.sock	

在这里插入图片描述

[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld
[root@server1 mysql]# cd /etc/init.d/
[root@server1 init.d]# chmod +x mysqld
[root@server1 init.d]# cd  /usr/local/lnmp/mysql	
#在真机中可以看到mysql的默认uid和gid都是27

这里写图片描述

[root@server1 mysql]# groupadd -g 27 mysql
[root@server1 mysql]# useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/data -s /sbin/nologin mysql   # 添加mysql用户,-u,指定用户uid,-g,指定用户组,-d,指定用户家目录,-M,禁止自主创建用户家目录
[root@server1 mysql]# pwd
/usr/local/lnmp/mysql
[root@server1 mysql]# chown -R mysql.mysql  /usr/local/lnmp/mysql   # 修改用户名和组名
[root@server1 mysql]# vim ~/.bash_profile   # 设置环境变量,方便登陆
10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin

在这里插入图片描述

[root@server1 mysql]# source /root/.bash_profile     # 检测语法
[root@server1 mysql]# mysql   # 输入mysql,然后按tab键,可以加载出来,说明,文件已经生效

在这里插入图片描述

[root@server1 mysql]# mysqld --initialize --user=mysql    # 初始化,生成临时登陆密码

在这里插入图片描述

[root@server1 mysql]# chown root.mysql /usr/local/lnmp/mysql -R 
[root@server1 mysql]# chown mysql /usr/local/lnmp/mysql/data -R 
[root@server1 mysql]# ll

在这里插入图片描述

[root@server1 mysql]# /etc/init.d/mysqld start 

在这里插入图片描述

[root@server1 mysql]# mysql_secure_installation  #初始化环境,设置密码

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

[root@server1 mysql]# mysql -uroot -p  # 登陆成功说明mysql搭建成功 
Enter password:

在这里插入图片描述

2.源码编译php
# 此安装包自行获取
[root@server1 ~]# ls
libmcrypt-2.5.8-9.el6.x86_64.rpm        
libmcrypt-devel-2.5.8-9.el6.x86_64.rpm 
php-5.6.35.tar.bz2
[root@server1 ~]# tar jxf php-5.6.35.tar.bz2 
[root@server1 ~]# yum install re2c-0.13.5-1.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm libmcrypt-devel-2.5.8-9.el6.x86_64.rpm gd-devel-2.0.35-11.el6.x86_64.rpm -y

# 下载php的依赖性安装包
[root@server1 ~]# yum install gmp-devel zlib-devel libxml2-devel curl-devel net-snmp-devel -y
[root@server1 ~]# cd php-5.6.35 

# 开始进行源码编译,选择自己需要的模块进行编译
[root@server1 php-5.6.35]# ./configure --prefix=/usr/local/lnmp/php \
 --with-config-file-path=/usr/local/lnmp/php/etc \
 --with-mysql=mysqlnd \
 --enable-mysqlnd  \
 --with-mysqli=mysqlnd  \
 --with-pdo-mysql=mysqlnd \
 --with-openssl \
 --with-snmp \
 --with-gd \
 --with-zlib \
 --with-curl \
 --with-libxml-dir \
 --with-png-dir \
 --with-jpeg-dir \
 --with-freetype-dir \
 --without-pear \
 --with-gettext \
 --with-gmp \
 --enable-inline-optimization \
 --enable-soap \
 --enable-ftp \
 --enable-sockets \
 --enable-mbstring \
 --enable-fpm \
 --with-fpm-user=nginx \
 --with-fpm-group=nginx \
 --with-mcrypt \
 --with-mhash

在这里插入图片描述

# 这些都是编译过程中需要的安装包
[root@server1 php-5.6.35]# yum install -y libxml2-devel-2.7.6-14.el6.x86_64
[root@server1 php-5.6.35]# yum install -y openssl-devel
[root@server1 php-5.6.35]# yum install -y libcurl-devel
[root@server1 php-5.6.35]# yum install -y libjpeg-turbo-devel-1.2.1-1.el6.x86_64
[root@server1 php-5.6.35]# yum install -y 2:libpng-devel-1.2.49-1.el6_2.x86_64
[root@server1 php-5.6.35]# yum install -y freetype-devel-2.3.11-14.el6_3.1.x86_64
[root@server1 php-5.6.35]# yum install -y gmp-devel-4.3.1-7.el6_2.2.x86_64
[root@server1 php-5.6.35]# yum install -y 1:net-snmp-devel-5.5-49.el6.x86_64
[root@server1 ~]#./configure --prefix=/usr/local/lnmp/php 
--with-config-file-path=/usr/local/lnmp/php/etc --with-mysql=mysqlnd 
--enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 
--with-openssl --with-snmp --with-gd --with-zlib --with-curl 
--with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir 
--without-pear --with-gettext --with-gmp --enable-inline-optimization
--enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm 
--with-fpm-user=nginx --with-fpm-group=nginx  --with-mcrypt --with-mhash   # 再次重新编译
[root@server1 php-5.6.35]# make   &&  make install 
[root@server1 php-5.6.35]# cd
[root@server1 ~]# cat /etc/passwd | grep nginx   # 我们编译的时候,是以nginx用户和nginx组编译php的
[root@server1 ~]# id nginx   #没有nginx用户,只有用户创建了才能起来服务
id: nginx: No such user 
[root@server1 ~]# useradd nginx      # 建立nginx用户
[root@server1 ~]# id nginx
uid=500(nginx) gid=500(nginx) groups=500(nginx)
[root@server1 ~]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# ls
php-fpm.conf.default  php.ini
[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf
[root@server1 etc]# vim php-fpm.conf   # 这是php的主配置文件 ,注意,文件里不能写以#开头的注释
pid = run/php-fpm.pid     # 打开pid,服务才能运行

这里写图片描述

[root@server1 etc]# cd /root/php-5.6.35
[root@server1 php-5.6.35]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
[root@server1 php-5.6.35]# cd sapi/fpm/
[root@server1 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm
[root@server1 fpm]# ll  /etc/init.d/php-fpm    # 这是启动脚本
-rw-r--r-- 1 root root 2359 Feb 18 09:32 /etc/init.d/php-fpm
[root@server1 fpm]# chmod +x /etc/init.d/php-fpm   # 给启动脚本添加可执行权限
[root@server1 fpm]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# lsp
hp-fpm.conf  php-fpm.conf.default  php.ini
[root@server1 etc]# vim php-fpm.conf
[root@server1 etc]# vim php.ini 
936 date.timezone =Asia/Shanghai   # 修改时区
[root@server1 etc]# /etc/init.d/php-fpm start   # 开启服务
[root@server1 etc]# netstat -antlp

在这里插入图片描述

# 如果出现以下报错
[root@server1 fpm]# /etc/init.d/php-fpm start
Starting php-fpm [06-Aug-2018 02:08:50] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
[06-Aug-2018 02:08:50] ERROR: FPM initialization failed
 Failed
解决方案:
<1>查看/usr/local/lnmp/php/etc/php-fpm.conf此配置文件是否有错误,注意,文件里不能写以#开头的注释
<2>[root@server5 etc]# netstat -lntup | grep php   #查看php进程,有进程,就杀死进程
	tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      2490/php-fpm       
<3>killall php-fpm   #杀死进程
3.源码编译nginx
[root@server1 ~]# tar zxf nginx-1.14.0.tar.gz [
root@server1 ~]# cd nginx-1.14.0
[root@server1 nginx-1.14.0]# cd src/core/
[root@server1 core]# vim nginx.h1
4 #define NGINX_VER          "nginx/"
[root@server1 core]# cd -
/root/nginx-1.14.0
[root@server1 nginx-1.14.0]# vim auto/cc/gcc    # 关闭debug日志
171 # debug
172 #CFLAGS="$CFLAGS -g"

在这里插入图片描述

[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/lnmp/nginx \
> --without-http_ssi_module \
> --with-http_stub_status_module \
> --user=nginx --group=nginx \
> --with-threads \
> --with-file-aio   #根据报错下载相应的软件,解决依赖性

在这里插入图片描述

[root@server1 nginx-1.14.0]# yum install -y pcre-devel
[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/lnmp/nginx --without-http_ssi_module --with-http_stub_status_module --user=nginx --group=nginx --with-threads --with-file-aio   # 继续编译
[root@server1 nginx-1.14.0]# make && make install
[root@server1 nginx-1.14.0]# cd /usr/local/lnmp/nginx/
[root@server1 nginx]# ls
conf  html  logs  sbin
[root@server1 nginx]# vim conf/nginx.conf	 
          location / { 
              root   html; 
              index  index.php index.html index.htm;  # 把index.php 设置为默认发布目录,如果不改可能会出现403的访问禁止报错 
          }
          
          # 把php与nginx建立联系 
          location ~ \.php$ { 
              root           html; 
              fastcgi_pass   127.0.0.1:9000; 
              fastcgi_index  index.php; 
             # fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name; 
              include        fastcgi.conf; 
          }

在这里插入图片描述

在这里插入图片描述

[root@server1 nginx]# cd sbin/
[root@server1 sbin]# ls
nginx
[root@server1 sbin]# pwd
/usr/local/lnmp/nginx/sbin
[root@server1 sbin]# ln -s /usr/local/lnmp/nginx/sbin/nginx  /usr/local/sbin/
[root@server1 sbin]# nginx -t

在这里插入图片描述

[root@server1 sbin]# nginx   # 开启nginx
[root@server1 sbin]# netstat -antlp | grep nginx

在这里插入图片描述

# 访问测试

在这里插入图片描述

[root@server1 sbin]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# vim index.php  # 编写php界面
<?php
phpinfo()
?>

在这里插入图片描述

# 再次访问

在这里插入图片描述

四.论坛搭建(整合mysql,php,nginx)

[root@server1 ~]# ls
Discuz_X3.2_SC_UTF8.zip
[root@server1 ~]# yum install -y unzip  # 没有这个命令,就要先下载
[root@server1 ~]# unzip Discuz_X3.2_SC_UTF8.zip  -d /usr/local/lnmp/nginx/html/
[root@server1 ~]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# ls
50x.html  index.html  index.php  readme  upload  utility
[root@server1 html]# mv upload/ bbs
# 浏览器访问

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

[root@server1 bbs]# chmod 777 config/ -R
[root@server1 bbs]# chmod 777 data/ -R
[root@server1 bbs]# chmod 777 uc_*  -R
# 刷新网页

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

[root@server1 bbs]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# vim php.ini 
1013 pdo_mysql.default_socket=/usr/local/lnmp/mysql/data/mysql.sock
1162 mysql.default_socket =/usr/local/lnmp/mysql/data/mysql.sock
1221 mysqli.default_socket = /usr/local/lnmp/mysql/data/mysql.sock
[root@server1 etc]# /etc/init.d/php-fpm reload
[root@server1 etc]# cd /usr/local/lnmp/mysql/
[root@server1 mysql]# chmod 755 data/
[root@server1 mysql]# /etc/init.d/mysqld   restart
# 刷新网页

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@server1 ~]# cd /usr/local/lnmp/nginx/html/bbs/install/
[root@server1 install]# ls
data  images  include  index.php
[root@server1 install]# rm -fr index.php 
[root@server1 install]# nginx -s reload
# 刷新网页

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

# 查看添加的用户
[root@server1 install]# mysql -uroot -p
Enter password: 
mysql> show databases;

在这里插入图片描述

mysql> use discuz;   # 进入数据库
mysql> select * from pre_ucenter_pm_members  # 查看用户

在这里插入图片描述
注:以上操作必须在php服务开启的条件下才能操作

五.添加memcache缓存模块(给php增添缓存):

memcached 是什么?
  memcached  是以 LiveJournal  旗下 Danga Interactive  公司的 Brad Fitzpatric  
为首开发的一款软件。现在已成为 mixi、hatena、Facebook、Vox、LiveJournal 等众多服务
中提高 Web 应用扩展性的重要因素。许多 Web 应用都将数据保存到 RDBMS 中,应用服务器从中
读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现 RDBMS 的负担加重、
数据库响应恶化、网站显示延迟等重大影响。这时就该 memcached 大显身手了。memcached 是
高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次
数,以提高动态 Web 应用的速度、提高可扩展性。

  Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的
hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单
的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

[root@server1 ~]# ls  # 先获取安装包
memcache-2.2.5.tgz
[root@server1 ~]# tar zxf memcache-2.2.5.tgz
[root@server1 ~]# vim /root/.bash_profile # 添加环境变量
10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin

在这里插入图片描述

[root@server1 ~]# source /root/.bash_profile  # 刷新 
[root@server1 ~]# cd memcache-2.2.5
[root@server1 memcache-2.2.5]# phpize  # 初始化
[root@server1 memcache-2.2.5]# ls

在这里插入图片描述

[root@server1 memcache-2.2.5]# ./configure
[root@server1 memcache-2.2.5]# make && make install
[root@server1 memcache-2.2.5]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# ls
php-fpm.conf  php-fpm.conf.default  php.ini
[root@server1 etc]# vim php.ini  # 给php添加扩展模块memcache 
873 extension=memcache.so
[root@server1 etc]# /etc/init.d/php-fpm reload
[root@server1 etc]# php -m  #  查看所有模块

在这里插入图片描述

[root@server1 etc]# yum install -y memcached
[root@server1 etc]# vim /etc/sysconfig/memcached

在这里插入图片描述

 [root@server1 etc]# /etc/init.d/memcached start
 [root@server1 etc]# netstat -antlp 

在这里插入图片描述

[root@server1 etc]# yum install -y telnet  # 如果没有这个命令,就下载
[root@server1 etc]# telinit localhost 11211 # 测试memcache

在这里插入图片描述

[root@server1 etc]# cd
[root@server1 ~]# cd memcache-2.2.5
[root@server1 memcache-2.2.5]# cp memcache.php example.php /usr/local/lnmp/nginx/html/
[root@server1 memcache-2.2.5]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# vim memcache.php  
23 define('ADMIN_PASSWORD','westos');      // Admin Password  # 修改密码
28 $MEMCACHE_SERVERS[] = '172.25.78.1:11211'; // add more as an array 
29 #$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array     # 注释掉这一行
# 浏览器查看

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

# 外压测试缓存效率
[root@foundation78 Desktop]# ab -c 10 -n 5000 http://172.25.78.1/index.php # 10各个并发,5000各请求,从服务器里请求

在这里插入图片描述

[root@foundation78 Desktop]# ab -c 10 -n 5000 http://172.25.78.1/example.php   # 直接从memcache里请求

在这里插入图片描述

由此可见,用memcache进行缓存,效率比从服务器上要高而且没有失败请求

六.给nginx添加memcache缓存

[root@server1 ~]# ls   # 获取软件包
openresty-1.13.6.1.tar.gz
[root@server1 ~]# nginx -s stop   # 因为openresty里自带nginx
[root@server1 ~]# tar zxf openresty-1.13.6.1.tar.gz 
[root@server1 ~]# cd openresty-1.13.6.1
[root@server1 openresty-1.13.6.1]# ./configure 
[root@server1 openresty-1.13.6.1]# gmake && gmake install
[root@server1 openresty-1.13.6.1]# cd /usr/local/openresty/
[root@server1 openresty]# cd nginx/

# 这两个文件用来做外压测试 
[root@server1 nginx]# cp /usr/local/lnmp/nginx/html/index.php /usr/local/openresty/nginx/html 
[root@server1 nginx]# cp /usr/local/lnmp/nginx/html/example.php /usr/local/openresty/nginx/html

[root@server1 nginx]# cd conf/
[root@server1 conf]# vim nginx.conf
 17 http { 
 18     upstream  memcache{ 
 19         server localhost:11211; 
 20         keepalive  512;  # 最大保持512个不立即关闭的连接用于提升性能 
 21     } 
 54         location /memc { 
 55             internal;  # 只接受内部访问,不接收外部http请求 
 56             memc_connect_timeout 100ms; 
 57             memc_send_timeout 100ms; 
 58             memc_read_timeout 100ms; 
 59             set $memc_key $query_string;   # 使用Nginx内置的$query_string来作为key 
 60             set $memc_exptime 300;   # 缓存失效时间 
 61             memc_pass memcache; 
 62         } 
 81         location ~ \.php$ { 
 82             set    $key  $uri$args; 
 83             srcache_fetch GET  /memc   $key; 
 84             srcache_store PUT  /memc   $key; 
 85             root           html; 
 86             fastcgi_pass   127.0.0.1:9000; 
 87             fastcgi_index  index.php; 
 88      #   fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name; 
 89             include        fastcgi.conf; 
 90         }   

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

[root@server1 conf]# cd ../sbin/
[root@server1 sbin]# ./nginx -t  # 检测语法 
[root@server1 sbin]# ./nginx     # 启动nginx
[root@server1 sbin]# netstat -antlp 

在这里插入图片描述

# 浏览器访问测试(能访问到页面,说明脚本配置没有问题)

在这里插入图片描述

# 外压测试
[root@foundation78 Desktop]# ab -c 10 -n 5000 http://172.25.78.1/index.php

在这里插入图片描述

[root@foundation78 Desktop]# ab -c 10 -n 5000 http://172.25.78.1/example.php

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值