- 一、memcache簡介
- 特征
- 支持的語言
- Memcached 運行
- 二、安裝memcache示例
- 1.解壓相關軟體包
- 2.編譯安裝memcache
- 3.建立軟連接,便于系統識別
- 4.啟動memcache
- 三、memcache基本操作
- 1.安裝telnet工具連接資料庫
- 2.基本操作命令演示
- 四、客戶端訪問memcache
- 安裝LAMP架構
- 1.安裝Apache
- 2.安裝MySQL
- 3.安裝PHP
- 4.測驗mysql的連通性
- 5.安裝memcache客戶端工具
一、memcache簡介
- Memcached是一個自由開源的,高性能,分布式記憶體物件快取系統,
- Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric為首開發的一款軟體,現在已成為mixi、hatena、Facebook、Vox、LiveJournal等眾多服務中提高Web應用擴展性的重要因素,
- Memcached是一種基于記憶體的key-value存盤,用來存盤小塊的任意資料(字串、物件),這些資料可以是資料庫呼叫、API呼叫或者是頁面渲染的結果,
- Memcached簡潔而強大,它的簡潔設計便于快速開發,減輕開發難度,解決了大資料量快取的很多問題,它的API兼容大部分流行的開發語言,
- 本質上,它是一個簡潔的key-value存盤系統,
- 一般的使用目的是,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態Web應用的速度、提高可擴展性,
特征
加粗樣式memcached作為高速運行的分布式快取服務器,具有以下的特點,
- 協議簡單
- 基于libevent的事件處理
- 內置記憶體存盤方式
- memcached不互相通信的分布式
支持的語言
許多語言都實作了連接memcached的客戶端,其中以Perl、PHP為主,僅僅memcached網站上列出的有:
- Perl
- PHP
- Python
- Ruby
- C#
- C/C++
- Lua
Memcached 運行
Memcached命令的運行:
/usr/local/memcached/bin/memcached -h ## 命令幫助
注意:如果使用自動安裝 memcached 命令位于 /usr/local/bin/memcached,
| 啟動選項 | 描述 |
|---|---|
| -d | 啟動一個守護行程; |
| -m | 分配給Memcache使用的記憶體數量,單位是MB; |
| -u | 運行Memcache的用戶; |
| -l | 監聽的服務器IP地址,可以有多個地址; |
| -p | 設定Memcache監聽的埠,,最好是1024以上的埠; |
| -c | 最大運行的并發連接數,默認是1024; |
| -P | 設定保存Memcache的pid檔案, |
二、安裝memcache示例
1.解壓相關軟體包
[root@localhost ~]# tar zxxf memcached-1.5.6.tar.gz -C /opt/
[root@localhost ~]# tar zxxf libevent-2.1.8-stable.tar.gz -C /opt/
2.編譯安裝memcache
[root@localhost ~]# yum -y install gcc gcc-c++ make
[root@localhost ~]# cd /opt/libevent-2.1.8-stable
[root@localhost ~]# ./configure --prefix=/usr/local/libevent
[root@localhost libevent-2.1.8-stable]# make -j3 && make install
[root@localhost ~]# cd /opt/memcached-1.5.6
[root@localhost memcached-1.5.6]# ./configure \
> --prefix=/usr/local/memcached \
> --with-libevent=/usr/local/libevent/ ##加載事件庫的功能,并指明路徑
[root@localhost memcached-1.5.6]# make -j3 && make install
3.建立軟連接,便于系統識別
[root@localhost ~]# ln -s /usr/local/memcached/bin/memcached /usr/local/bin/
4.啟動memcache
[root@localhost ~]# memcached -d -m 32m -p 11211 -u root ## -d指定守護行程,-m指定快取大小,-p指定埠,-u指定用戶
[root@localhost ~]# netstat -anpt | grep memc
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 10573/memcached
tcp6 0 0 :::11211 :::* LISTEN 10573/memcached
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled
三、memcache基本操作
1.安裝telnet工具連接資料庫
[root@localhost ~]# yum -y install telnet
[root@localhost ~]# telnet 127.0.0.1 11211 ##進入資料庫
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
2.基本操作命令演示
- add創建鍵
add name 0 0 7 ## 新增鍵name,第一個0表示不設定序列號,第二個0表示不設定超時時間,最后7指的是位元組長度
zhaoliu ##輸入值"zhaoliu";注意,位元組長度一定要和輸入的鍵的值向匹配,否則會報錯,
STORED ##表示資料輸入成功,error則表示失敗
- get獲取鍵值
get name ##查看name鍵的值,有效期和位元組長度
VALUE name 0 7 ##提示鍵名name,超時時間0,長度7
zhaolou ## 鍵值為zhaolou
END
- gets獲取鍵值和更新因子(每進行一次操作,更新因子加1,同DNS的主從更新)
gets name ## ##會比使用get查看的結果末尾多一個數值,這個數值是更新因子,每對這個鍵執行一次操作(如get、set等等),更新因子都會加1
VALUE name 0 7 1
zhaolou
END
-set對鍵進行修改(鍵可以是已經存在的也可以是不存在的)
set name 0 0 9 ##可以通過set命令更新鍵的屬性和值,若該鍵不存在,可以充當add創建的作用
zhaoliuyu
STORED
get name ## 查看鍵值
VALUE name 0 9
zhaoliuyu
END
- replace修改鍵的屬性和值,不同于set,只能修改已經存在的鍵且值不為空的鍵
replace name 0 0 6 ##修改鍵name的長度為6
yellow
STORED
get name ##查看鍵值
VALUE name 0 6
yellow
END
- 檢查更新,同樣也是修改鍵的屬性和值,但是必須是在更新因子相同時才更新(即最后的數值4要和gets得出的更新因子相同才執行)
gets name ##查看更新因子,現在是3
VALUE name 0 6 3
yellow
END
cas name 0 0 7 4 ##使用cas更新鍵值,但是更新因子不同步
1234
get name ## 查看鍵值,錯誤資料
CLIENT_ERROR bad data chunk
ERROR
gets name ## 重新查看更新因子,還是3
VALUE name 0 6 3
yellow
END
cas name 0 0 4 3 ##同步更新因子,進行資料更新
abcd
STORED
get name ##查看鍵值,資料更新成功
VALUE name 0 4
abcd
END
- append 在原本的值后面追加
get name ##查看原本的值
VALUE name 0 6
yellow
END
append name 0 0 3 ## 追加長度為3 的值RED
RED
STORED
get name ##再次查看,RED追加到原本的值yellow后面
VALUE name 0 9
yellowRED
END
- prepend 在原值前面追加
prepend name 0 0 2 ## 在原值前面追加長度為2 的值GO
GO
STORED
get name ##查看鍵值
VALUE name 0 11
GOyellowRED
END
- delete 洗掉鍵
delete name ##洗掉name鍵
DELETED ##提示洗掉成功
get name ##查看name鍵,已經消失
END
- flush_all,清空所有庫資料
- quit 退出資料庫
四、客戶端訪問memcache
安裝LAMP架構
前面有寫過詳細的安裝,這里就直接放腳本執行,不再多解釋了
1.安裝Apache
[root@localhost ~]# vi apache.sh
#!/bin/bash
echo "正在解壓包……"
P1=$(find / -name httpd*.bz2)
P2=$(find / -name apr-util*tar.gz)
P3=$(find / -name apr-[0-9]*tar.gz)
tar zvxf $P2 -C /opt >/dev/null
tar zvxf $P3 -C /opt >/dev/null
read -p "您的Apache原始碼包名是否為$P1(yes|no)" PAN
if [ $PAN = yes ]
then
echo "正在解壓Apache"
tar jvxf $P1 -C /opt >/dev/null
else
exit
fi
P4=$(find /opt/ -name "apr-[0-9].[0-9]*")
P5=$(find /opt/ -name "apr-util-[0-9].[0-9]*")
P6=$(find /opt/ -name "httpd-[0-9].[0-9]*")
mv $P4 $P6/srclib/apr
mv $P5 $P6/srclib/apr-util
##################
echo "正在安裝環境"
yum -y install \
gcc \
gcc-c++ \
make \
pcre-devel \
expat-devel \
perl >/dev/null
cd $P6
echo "配置Apache"
./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi
echo "###編譯及安裝###"
make && make install
ln -s /usr/local/httpd/conf/httpd.conf /etc/
ln -s /usr/local/httpd/bin/* /usr/local/bin/
echo "
[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid
ExecStart= /usr/local/bin/apachectl $OPTIONS
ExecrReload= /bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target" >/lib/systemd/system/httpd.service
systemctl start httpd.service
systemctl enable httpd.service
systemctl is-enabled httpd.service
2.安裝MySQL
這里使用的是mysql5.6版本安裝
[root@localhost ~]# vi mysql.sh
#!/bin/bash
yum -y install \
ncurses \
ncurses-devel \
bison \
gcc \
gcc-c++ \
expect \
cmake
yum install -y ncurses-devel autoconf
P1=$(find / -name "mysql-[0-9]*.gz")
read -p "核對軟體名稱$P1是否正確(yes|no):" T
if [ $T = yes ]
then
tar zvxf $P1 -C /opt
else
exit
fi
P2=$(find /opt/ -name mysql-[0-9].*[0-9])
cd $P2
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DSYSCONFIDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock
make && make install
cp $P2/support-files/my-default.cnf /etc/my.cnf
cp $P2/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add /etc/init.d/mysqld
chkconfig mysqld --level 235 on
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
echo $PATH
useradd -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql/
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock
sed -ir '46s/$/\/usr\/local\/mysql/' /etc/init.d/mysqld
sed -ir '47s/$/\home\/mysql/' /etc/init.d/mysqld
service mysqld start
STA=$(netstat -anpt | grep 3306 |wc -l)
if [[ $STA -ge 1 ]]
then
echo "mysql啟動正常"
else
echo "mysql啟動失敗"
fi
/usr/bin/expect <<EOF
spawn /usr/local/mysql/bin/mysqladmin -uroot -p password
expect {
"Enter" {send "\r";exp_continue}
"password" {send "abc123\r";exp_continue}
"password" {send "abc123\r"}
}
expect eof
EOF
echo "安裝完成,請執行 source /etc/profile 命令,完成優化,
3.安裝PHP
PHP使用的是5.6版本
[root@localhost ~]# vi php.sh
#!/bin/bash
P1=$(find / -name php*.bz2)
read -p "您的PHP原始碼包名是否為$P1(yes|no)" PAN
if [ $PAN = yes ]
then
echo "正在解壓PHP原始碼包"
tar jvxf $P1 -C /opt >/dev/null
else
exit
fi
yum -y install \
gd \
libpng \
libpng-devel \
pcre \
pcre-devel \
libxml2-devel \
libjpeg-devel
P2=$(find / -name "php-[0-9].[0-9].[0-9][0-9]")
cd $P2
./configure \
--prefix=/usr/local/php5 \
--with-gd \
--with-zlib \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-config-file-path=/usr/local/php5 \
--enable-mbstring
make -j3 && make install
cp $P2/php.ini-development /usr/local/php5/php.ini
ln -s /usr/local/php5/bin/* /usr/local/bin/
ln -s /usr/local/php5/sbin/* /usr/local/sbin/
sed -i '393aAddType application/x-httpd-php\ .php\nAddType application/x-httpd-php-source\ .phps' /usr/local/httpd/conf/httpd.conf
sed -i -r '/DirectoryIndex index.html/s/$/ php.html/' /usr/local/httpd/conf/httpd.conf
echo "<?php
phpinfo();
?> " >/usr/local/httpd/htdocs/index.php
systemctl restart httpd
service httpd restart

4.測驗mysql的連通性
[root@localhost ~]# mysql -u root -p ##進入資料庫授權
mysql> CREATE DATABASE sky;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT all ON sky.* TO 'skyuser'@'%' IDENTIFIED BY 'admin123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> \q
[root@localhost htdocs]# vi index.php
<?php
$link=mysqli_connect('192.168.10.20','skyuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>
[root@localhost htdocs]# systemctl restart httpd

5.安裝memcache客戶端工具
[root@localhost ~]# yum -y install autoconf
[root@localhost ~]# ls
……省略部分
memcache-2.2.7.tgz
[root@localhost ~]# tar zxvf memcache-2.2.7.tgz -C /opt
[root@localhost ~]# cd /opt/memcache-2.2.7/
[root@localhost memcache-2.2.7]# /usr/local/php5/bin/phpize ##增加PHP模塊后生成的對memcache配置的腳本(configure檔案)
Configuring for:
PHP Api Version: 20160303
Zend Module Api No: 20160303
Zend Extension Api No: 320160303
[root@localhost memcache-2.2.7]# ./configure \
> --enable-memcache \
> --with-php-config=/usr/local/php5/bin/php-config
……省略部分
creating libtool
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h ##這里提示創建了config.h檔案,PHP7.0以上版本可能出現不兼容,檔案創建會失敗,最好用5.0版本
[root@localhost memcache-2.2.7]# make && make install
…………省略部分
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-zts-20131226/
## 編譯安裝完成后,會提示生成一個共享擴展檔案目錄,這里需要將這個目錄路徑記錄下來,需要放入組態檔中
[root@localhost ~]# vi /usr/local/php5/php.ini
738行// extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/" ##填寫剛剛記錄下的路徑,找個合適位置插入這兩行配置
739行// extension = memcache.so ##加載擴展模塊,memcache
[root@localhost htdocs]# vim /usr/local/httpd/htdocs/index.php ##撰寫測驗網頁
<?php
$memcache = new Memcache() ;
$memcache->connect('192.168.10.10',11211); ##指向memcache服務器ip和埠
$memcache->set('key','Memcache test Successfull!',0,60);
$result = $memcache->get('key');
unset($memcache);
echo $result;
?>
[root@localhost ~]# systemctl restart httpd
訪問http://192.168.10.20/index.php

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/206130.html
標籤:其他
上一篇:stc8h1k28單片機這個回圈怎么走位的?NTC溫度測量
下一篇:在LIUNX下的檔案定時備份操作
