memcache是个不错的基于key-value的内存缓存系统,memcache的诞生,迅速的提高了基于动态cgi以及基于sql查询语言数据库的web程序的加载速度与并发处理能力,不过memcache确实是太久远了,它本身的功能实现也跟不上现在云计算世界里的高并发、大数据量需求了;最典型的就是memcache的数据存储于取出并不能保证100%的完整,也就是有个所谓的命中率问题,如果业务逻辑需求缓存数据的可靠性,那么memcache就不适合了。
举个例子,笔者手中一台服务器,开发的一个小web程序,需要每10分钟更新一下web页面的数据列表,由于业务逻辑优化问题(太依赖memcache的缓存命中率,业务逻辑的思路就是假设所有cache到memcache的数据都能成100%存储并100%读出),这样就直接导致了nginx经常性的、间歇性的、或者长时间不来的502错误。另外一个例子:memcache做了服务器端php的session存储方式,由于业务逻辑采用session鉴权,经常性的莫名其妙的就有用户被踢出登录状态或者莫名其妙的明明提示登录成功了却进不了用户中心(服务器端session迅速丢失或者session写入失败),这个是比较坑爹的,经常性的发布的文章输了半天,结果保存的时候由于memcache中的session数据被挤掉而丢失所有文字【当然咯,这个可以通过业务逻辑弥补】
当然咯,php业务逻辑是有问题的,这个不是今天讨论的,经过php业务逻辑的优化,memcache也是可以很不错的完成每10分钟更新一次web页面数据的......但是...........至善则至美【理想中的】。以上的举例不过是侧面凸显了memcache的命中率问题,不过memcache的出现目前的意义倒不如它创造性的提出的所遵循的一套存储协议。
经过几次502摧残后,毅然决然的寻找替代方案,redis进入了眼帘。
redis的介绍就免了,直接记录本次配置安装笔记。
--------------------------------------------------------------------
redis官网:https://redis.io/ redis最新版:https://redis.googlecode.com/files/redis-2.6.13.tar.gz
redis基于linux,windows就别玩了。
1、redis下载安装
redis安装非常简单,都没有传统的./configure了
cd /usr/local/src
wget https://redis.googlecode.com/files/redis-2.6.13.tar.gz
tar zxvf redis-2.6.13.tar.gz
cd redis-2.6.13
make
make之后redis-2.6.13下就会产生一个src目录,基本redis需要使用的二进制工具都在这个src目录里了
2、redis配置
为了便于管理,redis所有二进制文件cp到/usr/local/redis中,当然本次拷贝将新产生的src目录中所有文件都拷过去了,如果你是个洁癖爱好者,只需拷贝src下的如下几个可执行二进制文件即可,redis-server、redis-cli、redis-benchmark、redis-checke-aof、redis-sentinel、redis-check-dump。如下命令接上述下载安装
===================================
cp -R src /usr/local/redis
cp redis.conf /usr/local/redis/redis.conf
cd /usr/local/redis
vi redis.conf
===================================
vi修改redis.conf 17行的daemonize为yes ,意思是redis以后台进程运行,修改21行的pidfile为/data/redis.pid ,其他配置就不吧唧了,依据实际情况配置redis主、从,数据处理逻辑之类的.....
这个时候,实际是可以运行redis了,命令如下:
====================================
/usr/local/redis/redis-server /usr/local/redis/redis.conf
====================================
redis停止,直接kill命令
kill `cat /data/redis.pid`
3、redis的deaman控制脚本
笔者是个偏执狂,不太喜欢冗杂的启动、停止命令,用习惯了service xxx start|stop|restart|test之类的服务形式的命令,就给redis写了一个启动脚本,依据以上的目录结构,vi一个新deaman文件,复制如下虚线之间的代码即可使用
=============
vi /etc/init.d/redis-server
=============
-------------------------------------------------------------
#!/bin/sh
#
# redis script starts and stops the redis daemon
# By www.JJonline.Cn
# chkconfig:- 85 15
# description: redis is an key-value RAM NOSQL DB \
# processname: redis
# config: /usr/local/redis/redis.conf
# pidfile: /data/redis.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
#sbin name
redis="/usr/local/redis/redis-server"
prog=$(basename $redis)
#lockfile
lockfile=/var/lock/subsys/redis
#service start
pidfile=${PIDFILE-/data/redis.pid}
start(){
[ -x $redis ] || exit 5
echo -n $"Starting $prog: "
daemon --pidfile ${pidfile} $redis /usr/local/redis/redis.conf
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
#service stop
stop(){
echo -n $"Stopping $prog: "
killproc -p ${pidfile} $redis
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
#service restart
restart(){
stop
sleep 1
start
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
#rh_status_q && exit 0
$1
;;
stop)
#rh_status_q && exit 0
$1
;;
restart)
$1
;;
status)
rh_status
;;
*)
echo $"Usage: $0 {start|stop|status|restart}"
exit 2
esac
-------------------------------------------------------------
复制以上代码保存为/etc/init.d/redis-server【文件名为你喜欢的名字,redis也好redis-server也好,甚至给换个名字也行】。
=================
chmod 775 /etc/init.d/redis-server
service redis-server start
=================
service redis-server start即可看到如下所示的偏执狂喜欢的启动、停止、重启命令回馈信息了
如果要redis开机启动,还可以chkconfig redis-server on
4、用redis作为php的session存储手段
redis-server安装完成后,要在php上使用redis-server,则php还需要编译phpredis
具体编译太简单,没什么技术含量,不再累赘
编译完成并配置好php的phpredis扩展,额外添加如下使用redis作为php的session处理配置即可
配置php.ini,找到 session.save_handler=files ,将files改为redis
找到 session.save_path = '/tmp'改为session.save_path="tcp://127.0.0.1:6379"
重启php-fpm或者apache,php的session存储即改为了redis
ps:更多的详细配置,当然依据不同的情况需要做不同的处理,本文仅作原理阐述,不做深入的优化配置讲解。
centos redis 怎样升级呢? 需要升级到3.0