介绍
Redis是一个开源的key-value类型的数据库缓存和存储系统,同时Redis提供了丰富的数据结构用来支持多样的业务chan场景,比如hashes,lists,sets还有ordered sets及其他类型。云数据库Redis提供了兼容Redis协议的数据库服务,提供单机和集群两种模式,提供了全套的容灾切换、故障迁移、在线扩容、性能优化的数据库解决方案。
本文我们将介绍如何使用阿里云Redis服务作为PHP服务的session存储。PHP的session存储作为php会话信息的存储单元,默认的PHP使用文件来存储session会话信息。同时PHP支持使用扩展的存储单元来作为会话信息的存储,通过扩展的session能够满足多台PHP服务器共享会话信息。
架构优势
- Redis云服务主从版本默认双机热备
- Redis云服务主从版本兼容性高,支持lua、事物,并且兼容Redis3.0的地理位置GEO计算
- Redis云服务性能优越,最大性能可以达到10WQPS
- Redis云服务主从版本数据持久化,每秒AOF Fsync,并且支持备份恢复
- Redis云服务主从版本256MB内存小性能高,性价比非常适合小内存的业务场景
- Redis云服务主从版本支持动态扩容,用户在业务增长之后可以动态升级
购买Redis云服务
- 访问Redis控制台,点击创建实例
- 选择256MB按量付费,每个用户都能享受一次99元包年256MB的折扣
测试Redis云服务
Redis云服务提供了文本协议进行访问,我们可以通过telnet进行服务的简单测试,实例的域名可以在控制台点击实例详情页面查看到,测试方法如下:
[root@ECS~]# telnet HOST 6379
Trying IP...
Connected to HOST.
Escape character is '^]'.
auth PASSWORD #回车
+OK #回复
ping #回车
+PONG #回复
quit #回车
+OK #回复
Connection closed by foreign host.
如果购买的实例能够按上面正常回复说明购买的实例能够正常使用。
性能测试
- 测试工具:https://github.com/RedisLabs/memtier_benchmark
- 测试客户端:华东1阿里云ECS 四核8GB内存
- 测试Redis:华东1阿里云256MBRedis实例
- 测试命令:
./memtier_benchmark --server HOST -p 6379 -P redis --threads=16 --clients=4 -a PASSWORD --data-size=128 --test-time=600 --ratio=1:10 --key-pattern=S:S
- 测试结果:
安装PHP扩展
- 代码下载
git clone https://github.com/phpredis/phpredis
- 初始化配置,切换到代码目录输入phpize然后输入./configure进行配置
- 编译安装,在执行完成./configure之后检查有没有异常,如果没有则执行make; make install即可
配置PHP扩展
PHP的会话存储定义在php.ini文件中,用户可以通过执行以下PHP代码找到PHP配置文件的路径。
<?php
phpinfo()
?>
通常如果使用apache对应的配置文件在/etc/php5/apache2/php.ini,如果是nginx则在/usr/local/php/etc/php.ini,通过sudo vim 文件路径来修改对应的PHP配置如下,其中HOST还有PASSWORD需要换成对应实例域名和密码。
session.save_handler = redis
session.save_path = "tcp://HOST:6379?auth=PASSWORD"
重启PHP服务则后续PHP的session信息将存储在阿里云Redis上,用户可以随着业务量的增长来随时对云Redis扩容。
结论
云数据库Redis提供了方便的Redis云服务,通过主备来保证实例的高可用,并提供了弹性的扩展能力,用户可以按需购买使用,同时阿里云Redis可以作为PHP的session信息存储管理单元,解决用户分布式session存储的困扰