前一篇文章讲解了如何安装php的memcache扩展,并将session使用memcache作为存储介质:
php安装memcached并支持session

当memcache开始普及的时候,大部分公司都将memcache当做session,那么,为什么还要用redis?

这里,我节选了stackoverflow的最佳答案:
Memcached vs. Redis?


2015年4月1日,redis 3.0发布。

这一天标志着memcached不再具有超过redis的任何显着优势,而redis继续具有许多明显优于memcached的优点。
这一天,标志着redis 3.0的发布,支持聚类。
以前,我们由于软件适用性范围,可能倾向于选择memcached。现在redis提供了集群,内置提供了一个更可靠的解决方案,更容易管理。
memcached提供的每个主要特性和强度现在都是redis特性和强度的一个子集。
Memcached是一个易失性内存中键/值存储。 Redis不仅可以像一个缓存,但它是一个数据结构服务器。
下面是redis提供的一些功能,memcached不支持这些功能,并允许redis用作“真实”数据存储,而不仅仅是缓存。
1. 强大的数据类型和强大的命令来利用它们,哈希,排序集,列表等。
2. 持久性到磁盘,默认情况下。
3. 乐观锁定的交易(WATCH / MULTI / EXEC)
4. Pub / sub 非常快。
5. 值最大512MB(memcached限制为每个键1MB)
6. Lua脚本(2.6版)
7. 内置聚类(3.0版)
8. 非常快,与memcache没有速度差距。

当企业使用redis作为session时,可以承载更大的用户基数,同时架构也更灵活。

最重要的一点是,当memcache机器宕机,那么session将会全部消失。而对于redis机器,只需要重启即可,用户的session都还保留,这一点可以在灾难发生时,用户体验更友好。

redis安装很简单:

root [~]# yum install redis
#启动redis
root [~]# nohup redis-server > /dev/null 2>&1 &
root [~]# vi /etc/rc.d/rc.local
nohup redis-server > /dev/null 2>&1 &

php redis扩展和php memcache扩展类似,都是去官网下载最新稳定包,进行安装:
前往php扩展网站下载redis:
http://pecl.php.net/package/redis
安装如下:

root [~]# wget https://pecl.php.net/get/redis-3.1.0.tgz
root [~]# tar -zxvf redis-3.1.0.tgz
root [~]# cd redis-3.1.0
#你的php路径
root [~]# /php/bin/phpize
root [~]# ./configure --with-php-config=/opt/app/php/bin/php-config
root [~]# make
root [~]# make install

安装完成后,会告知我们动态链接库在哪里:
Installing shared extensions: /***/php/lib/php/extensions/no-debug-non-zts-20131226/

建议复制到extensions目录下,并重新配置php:

root [~]# cd /***/php/lib/php/extensions/
root [~]# cp no-debug-non-zts-20131226/redis.so ./
root [~]# cd /***/php/
root [~]# vi php.ini
#加入一行声明
extension=redis.so

重启php-fpm:

root [~]# kill -USR2 `cat /***/php/var/run/php-fpm.pid`

此时,可以看到php安装redis完成:

root [~]# php -r "phpinfo();" | grep redis
redis

php session配置如下:
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"

测试是否生效:

root [~]# redis-cli
redis 127.0.0.1:6379> keys *
1) "PHPREDIS_SESSION:1jldgkbr59hi41be52mdpumig1"
redis 127.0.0.1:6379> get PHPREDIS_SESSION:1jldgkbr59hi41be52mdpumig1
"TEST|i:1484902226;TEST2|i:1484902232;"
redis 127.0.0.1:6379> exit