Redis介绍
在大用户量场景下,WEB系统如果每次都从数据库里获取数据库,将严重影响用户体验,为了提高用户体验,我们可以将用户数据存储在缓存中。
常用的缓存工具有:memcache和redis。
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。
和memcached缓存类似,Redis支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)。
Redis是一种高级key-value数据库,它跟memcached类型,不过Redis的数据可持久化。
名称 |
数据库类型 |
数据存储选项 |
操作类型 |
备注 |
Redis |
内存存储,Nosql数据库 |
支持字符串、列表、集合、散列表、有序集合 |
增、删、修改、更新 |
支持分布式集群、主从同步及高可用、单线程 |
Memcached |
内存缓存数据库,键值对 |
键值之间的映射 |
增、删、修改、更新 |
支持多线程 |
MySQL |
典型关系数据库,RDBMS |
数据库由多表主成,每张表包含多行 |
增、删、修改、更新 |
支持ACID性质 |
PostgreSQL |
典型关系数据库,RDBMS |
数据库由多表主成,每张表包含多行 |
增、删、修改、更新 |
支持ACID性质 |
MongoDB |
硬盘存储,Nosql数据库 |
数据库包含多个表 |
增、删、修改、更新 |
主从复制,分片,副本集、空间索引 |
LAMP+Redis工作机制
用户通过浏览器访问LAMP网站,并以用户名和密码登录到网站,默认Redis缓存中没有改用户名和密码对应列表,PHP程序会读取MYSQL数据库中的用户名和密码,然后将用户名和密码缓存至Redis中,下次用户通过浏览器再次使用同样的用户名和密码登录网站,PHP无需从数据库中读取该用户和密码信息,而是直接优先从Redis缓存中读取并返回,从而减轻MYSQL数据库压力。
Redis除了可以缓存用户名、密码,还可以缓存PHP论坛各种数据,例如帖子、用户状态等。
LAMP+Redis架构流程图
要实现将LAMP PHP网站相关数据存入Redis,需要一台Redis服务器、PHP-redis连接驱动、PHP代码连接修改等。
LAMP+Redis操作案例
LAMP PHP连接Redis,首先要安装Redis服务器,安装连接驱动,然后修改PHP网站配置文件,具体步骤如下:
1、LAMP + Redis环境配置:
LAMP服务器(PHP-Redis驱动):192.168.241.134 Redis主库:192.168.241.133 Redis从库:192.168.241.135 |
3、部署Redis服务
wget -c -P /src http://download.redis.io/releases/redis-2.8.13.tar.gz tar zxvf redis-2.8.13.tar.gz -C /src/ cd /src/redis-2.8.13 make PREFIX=/usr/local/redis install cp /src/redis-2.8.13/redis.conf /usr/local/redis/ |
export PATH=/usr/local/redis/bin:$PATH |
nohup /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf & /usr/local/redis/bin/redis-cli -p 6379 shutdown |
/usr/local/redis/bin/redis-cli |
Redis存储没有表,以key-value方式存储。
4、安装PHP-Redis连接驱动
要确保PHP能够连接Redis缓存服务器,需添加PHP Redis扩展程序,也即是添加PHP的ext扩展模块,添加方法如下:
wget -c -P /src https://github.com/phpredis/phpredis/archive/3.1.2.tar.gz tar zxvf 3.1.2.tar.gz -C /src cd /src/phpredis-3.1.2 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --enable-redis make make install ------------------------------------------------------------------------------------------------------------------------------- Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20131226/ make install后出现以上提示,表示已经把redis.so模块添加进来 |
问题:[root@centos7 phpredis-3.1.2]# /usr/local/php/bin/phpize Configuring for: PHP Api Version: 20131106 Zend Module Api No: 20131226 Zend Extension Api No: 220131226 Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script. 解决方法: yum install m4 autoconf -y |
注:怎么查看php.ini文件的路径,可以在网站发布目录中新建一个测试页面info.php,添加以下代码:,然后访问测试页面查看php.ini配置文件路径,如果路径中没有php.ini配置文件,可以从php源码中拷贝过来。
cp /src/php-5.6.30/php.ini-production /usr/local/php/etc/php.ini
extension_dir ="/usr/local/php/lib/php/extensions/no-debug-zts-20131226" extension=redis.so |
LAMP+Redis缓存测试
1、测试Redis是否成功缓存网站信息
登录WEB服务器,修改Discuz PHP网站发布/usr/local/apache/htdocs目录全局配置文件config_global.php,查找CONFIG MEMORY段,将redis server后改为Redis主服务器的IP 192.168.241.133即可,如下图:
通过浏览器访问Apache PHP论坛网站,同时登录Redis服务器,执行命令redis-cli进入Redis命令行,运行命令keys *,如下图所示,存在2ewbrw_开头的key,则证明Redis成功缓存LAMP+Discuz网站信息数据。
2、测试Redis缓存是否生效
访问LAMP+Discuz网站,创建论坛测试用户test,密码123456,此时用户数据第一次注册,用户名和密码会写入到MySQL数据库表中,同时也会将该数据写入至Redis缓存中,如图所示:
将test用户信息从MySQL Discuz库pre_common_member中删除,通过test用户依然可以正常登录WEB网站,则证明此数据读取的是Redis缓存服务器。
此时依然可以用test用户登录WBE网站