您的位置:首页 > 数据库 > Redis

debian7.7环境下 源码安装redis以及phpredis扩展

2015-11-19 15:27 796 查看
先进入到redis的官网,下载redis安装包
wget http://download.redis.io/releases/redis-3.0.5.tar.gz
放到/usr/local/src目录下

$ wget http://download.redis.io/releases/redis-3.0.5.tar.gz $ tar xzf redis-3.0.5.tar.gz
$ cd redis-3.0.5
$ make
(make MALLOC=libc)

安装成功以后,运行redis-server & 使用redis数据库在后台运行,如果没有报错,那就证明redis数据库安装成功.

这时输入命令redis-cli对数据库发起链接,就可以对redis数据库做简单的测试了

关闭redis服务的方法,可以采用ps|redis的方式找到pid,然后通过kill -9 pid的方式关闭redis服务

启动redis-server的时候,一直会有两个警告消息
# WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take
effect.

解决方法:
echo 'vm.overcommit_memory = 1' >>/etc/sysctl.conf
sysctl -p

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and
add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

解决方法:
(1)echo never > /sys/kernel/mm/transparent_hugepage/enabled

(2)在/etc/rc.local文件中写入
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

将src下的redis-server、redis-cli 移到 /usr/local/redis文件夹下,并在该文件夹下建一个etc目录,将redis.conf移过来。
然后启动redis-server
./redis-server ./etc/redis.conf &

./redis-cli 连接并测试
redis> set foo bar
OK
redis> get foo
"bar"

php-redis的下载地址为:https://github.com/phpredis/phpredis/archive/develop.zip

wget https://github.com/phpredis/phpredis/archive/develop.zip
下载完后也放到/usr/local/src目录下
unzip develop.zip

cd /usr/local/src/phpredis-develop
/usr/local/bin/phpize
./configure --with-php-config=/usr/local/bin/phpize
make
make install

在php.ini文件中增加
[redis]
extension=redis.so

重启php-fpm服务
service php-fpm stop
service php-fpm start

然后再查看一下phpinfo即可。

9.测试php redis扩展是否成功安装:

#test_redis.php
<?php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$redis->set('f','are you ok?');
echo $redis->get('f');
?>
http://服务器地址/test_redis.php 如果能出现 are you ok? 就说明全都已经安装成功。

内核参数overcommit_memory

它是 内存分配策略

可选值:0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

什么是Overcommit和OOM

Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做Overcommit。当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。

当oom-killer发生时,linux会选择杀死哪些进程?选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该函数会计算每个进程的点数(0~1000)。点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且oom_score_adj可以被设置(-1000最低,1000最高)。

解决方法:

很简单,按提示的操作(将vm.overcommit_memory 设为1)即可:

有三种方式修改内核参数,但要有root权限:

(1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效

(2)sysctl vm.overcommit_memory=1

(3)echo 1 > /proc/sys/vm/overcommit_memory

1:从RedHat 6, OEL 6, SLES 11 and UEK2 kernels 开始,系统缺省会启用 Transparent HugePages :用来提高内存管理的性能透明大页(Transparent HugePages )和之前版本中的大页功能上类似。主要的区别是:Transparent HugePages 可以实时配置,不需要重启才能生效配置;
2:Transparent Huge Pages在32位的RHEL 6中是不支持的。
Transparent Huge Pages are not available on the 32-bit version of RHEL 6.

3: ORACLE官方不建议我们使用RedHat 6, OEL 6, SLES 11 and UEK2 kernels 时的开启透明大页(Transparent HugePages ), 因为透明大页(Transparent HugePages ) 存在一些问题:

1.在RAC环境下 透明大页(Transparent HugePages )会导致异常节点重启,和性能问题;

2.在单机环境中,透明大页(Transparent HugePages ) 也会导致一些异常的性能问题;

vim /etc/init.d/redis

#/bin/sh
#Configurations injected by install_server below....

EXEC=/usr/local/redis/redis-server
CLIEXEC=/usr/local/redis/redis-cli
PIDFILE=/var/run/redis.pid
CONF="/usr/local/redis/etc/redis.conf"
REDISPORT="6379"
###############
# SysV Init Information
# chkconfig: - 58 74
# description: redis_6379 is the redis daemon.
### BEGIN INIT INFO
# Provides: redis_6379
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Should-Start: $syslog $named
# Should-Stop: $syslog $named
# Short-Description: start and stop redis_6379
# Description: Redis daemon
### END INIT INFO

case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
status)
if [ ! -f $PIDFILE ]
then
echo 'Redis is not running'
else
echo "Redis is running ($(<$PIDFILE))"
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Please use start, stop, restart or status as first argument"
;;
esac

保存该文件后需要重启服务器才能生效

'staff' 组则通常为 help-desk/junior sysadmins, 允许成员在 /usr/local 目录下操作, 和在 /home 目录下创建目录.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: