基於redis緩存數據庫實現lnmp架構高速訪問

how-緩存加速


使用nosql數據庫:php

    如redis,mongodb,memcachehtml


what-redis

redis 是一個高性能的 key-value 數據庫。mysql

1) redis 的出現,很大程度彌補了memcached 這類 key-value 存儲的不足(只能存入內存).nginx

2)它支持的數據類型比memcache多,包括了 Python,Ruby,Erlang,PHP 客戶端...redis

3)Redis 的全部數據都是保存在內存中,兩種同步模式sql

        A>半持久化模式:RDB(全量同步)mongodb

                i>RDB是Redis默認同步方式數據庫

                ii>不按期的經過異步方式保存到磁盤上,快照最終結果( 快照二進制文件爲dump.rdb)vim

                iii>在恢復大數據集時的速度比 AOF 的恢復速度要快。瀏覽器

        B>全持久化模式:(增量同步)

                i>把每一次數據變化都寫入到一個 append only file(aof)裏面.

                ii>沒有RDB同步的快,但採用了高併發機制,對系統內存要求高.

                iii>使用方式

                    #appendfsync always實時同步

                    appendfsync everysec每秒同步(推薦使用)

                    # appendfsync no

        通常兩種模式結合使用.

4)只保證最終數據一致性,適用於微博粉絲,秒殺,搶紅包等場景,微博粉絲數量,一下子加一減一的,要是這麼微量但高頻率的變化,每次都要寫到數據庫裏,那數據庫的負擔就過重啦~





基於redis實現lnmp架構高速訪問

sever11:

 yum install mysql-server -y

mysql>grant select on test.* to redis@'172.25.88.%' identified by 'miao';

mysql <test.sql 導入測試數據,可用select查看

wKiom1jkx2bTywA6AABgTzkdpNQ172.png


server13:


tar zxf redis-3.2.5.tar.gz 

yum install gcc -y make && make install

cd utils/ ./install_server.sh

vim /etc/redis/6379.conf


62 bind 127.0.0.1 172.25.4.13  主redis的標準配置

/etc/init.d/redis_6379 restart


redis 端口打開,進入redis.

[root@server13 redis]# netstat -antlp 
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 172.25.4.13:6379 0.0.0.0:*

[root@server13 redis]# redis-cli
127.0.0.1:6379> del 1 (integer) 1

server12:

快速搭建lnmp架構

rpm -ivh php-5.3.3-38.el6.x86_64.rpm php-cli-5.3.3-38.el6.x86_64.rpm php-fpm-5.3.3-38.el6.x86_64.rpm php-cli-5.3.3-38.el6.x86_64.rpm php-pdo-5.3.3-38.el6.x86_64.rpm php-common-5.3.3-38.el6.x86_64.rpm php-mysql-5.3.3-38.el6.x86_64.rpm

/etc/init.d/php-fpm restart

wKiom1jkx2bxa_nlAABK2CNP8XE648.png


cd /etc/php-fpm.d/

 vim www.conf

39 user = nginx 41 group = nginx

vim /etc/nginx/conf.d/default.conf

 10         index  index.php index.html index.htm;

30     location ~ \.php$ {
31         root           html;
32         fastcgi_pass   127.0.0.1:9000;
33         fastcgi_index  index.php;
34         fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html/$fastcgi_script_name;
35         include        fastcgi_params;
36     }

nginx -s reload

cd /usr/share/nginx/html/

 vim index.php 

php<?

phpinfo()

?>

檢測:lnp是否搭建成功

出現php測試頁~~~



php裝載redis模塊

server12:


yum install -y unzip 
cd redis/
unzip phpredis-master.zip
cd phpredis-master
yum install gcc -y yum install php-devel-5.3.3-38.el6.x86_64.rpm
phpize     生成預編譯環境
./configure make && make install


在 /usr/lib64/php/modules/ 出現redis模塊


cd /etc/php.d cp mysql.ini redis.ini            仿照mysql模塊定義redis插件


vim redis.ini

2 extension=redis.so

/etc/init.d/php-fpm reload

php -m |grep re

wKioL1jkx2ahwixJAAAbaWmUWQA287.png

cp /mnt/redis/test.php index.php

vim index.php

3 $redis->connect('172.25.4.13',6379) or die ("could net connect redis server");

10$connect = mysql_connect('172.25.4.11','redis','westos');


檢驗


在宿主機瀏覽器訪問,http://172.25.88.12/

第一次讀取數據是從mysql庫中讀取,後來讀取數據就從redis中讀取了.


wKioL1jkx2ei-ufyAACAo0d6CRA308.png                           wKiom1jkx2fCrcitAABOLNmW--s919.png        


這樣讀取數據存在隱患,當mysql中的數據發生變化時,用戶讀取仍是redis中舊數據,因此須要考慮觸發更新機制,若是想了解能夠移步.......


                                    經過 mysql 觸發器+gearman+實現redis數據同步



server11: 

mysql> update test.test set name='lalala' where id=1;


serve13:

除非在更新數據庫的同時,手動刪除redis的數據,讓redis再去mysql取一次數據(不推薦這種方式....)


redis-cli 

127.0.0.1:6379> get 1
"test1"
127.0.0.1:6379> get 2
"test2"
127.0.0.1:6379> del 1             刪除1,讓redis再去數據庫拿一次
(integer) 1
127.0.0.1:6379> get 1
(nil)


查看客戶端的變化



wKioL1jkx2ewdindAAAoy3NjKy8043.png

相關文章
相關標籤/搜索