使用nosql數據庫:php
如redis,mongodb,memcachehtml
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)只保證最終數據一致性,適用於微博粉絲,秒殺,搶紅包等場景,微博粉絲數量,一下子加一減一的,要是這麼微量但高頻率的變化,每次都要寫到數據庫裏,那數據庫的負擔就過重啦~
yum install mysql-server -y
mysql>grant select on test.* to redis@'172.25.88.%' identified by 'miao';
mysql <test.sql 導入測試數據,可用select查看
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
快速搭建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
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測試頁~~~
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
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中讀取了.
這樣讀取數據存在隱患,當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)
查看客戶端的變化