how-缓存加速
使用nosql数据库:
如redis,mongodb,memcache
what-redis
redis 是一个高性能的 key-value 数据库。
1) redis 的出现,很大程度弥补了memcached 这类 key-value 存储的不足(只能存入内存).
2)它支持的数据类型比memcache多,包括了 Python,Ruby,Erlang,PHP 客户端...
3)Redis 的所有数据都是保存在内存中,两种同步模式
A>半持久化模式:RDB(全量同步)
i>RDB是Redis默认同步方式
ii>不定期的通过异步方式保存到磁盘上,快照最终结果( 快照二进制文件为dump.rdb)
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 [email protected]‘172.25.88.%‘ identified by ‘miao‘; mysql <test.sql 导入测试数据,可用select查看
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.
[[email protected] 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:* [[email protected] 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
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.zipcd phpredis-masteryum install gcc -y yum install php-devel-5.3.3-38.el6.x86_64.rpmphpize 生成预编译环境./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中旧数据,所以需要考虑触发更新机制,如果想了解可以移步.......
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)
查看客户端的变化