CentOS下编译安装redis,并编译php的redis.so扩展


点击访问原文
您还可以加入全栈技术交流群(QQ群号:254842154)


介绍

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

官网:http://www.redis.io

下面来看看在centos下如何安装redis

下载安装

wget http://download.redis.io/redis-stable.tar.gz
tar -zxvf redis-stable.tar.gz
cd redis-stable
make
make install

配置方法一(推荐使用)

在redis安装目录下进入utils目录,执行自动安装脚本

cd utils/
//执行脚本,然后一路回车都按照默认设置执行
./install_server.sh 

//执行完脚本后,会出现以下提示:
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli

启动/关闭服务命令

//查看是否启动redis服务
ps -ef | grep redis
//启动
/etc/init.d/redis_6379 start
//通过配置文件启动
/usr/local/bin/redis-server /etc/redis/redis.conf
//关闭
/etc/init.d/redis_6379 stop
//关闭,假如是默认端口号,可以省略 -p 参数
/usr/local/bin/redis-cli -p 6379 shutdown

给redis加密码锁,连接的时候就需要密码

//编辑配置文件 
vim /etc/redis/6379.conf
//添加这一行,密码自行设置
requirepass "redis-pass-xxyyzz"
//重启redis服务
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start

配置方法�二

拷贝配置文件到 /etc下

cp /tmp/redis-stable/redis.conf /etc/

编辑sysctl.conf文件

vi /etc/sysctl.conf
//增加下面这句
vm.overcommit_memory = 1

新建自启动文件redis

vi /etc/init.d/redis

输入以下内容,路径部分根据需要修改:

#!/bin/bash
#chkconfig: 2345 80 90
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cli

PIDFILE=/var/run/redis.pid
CONF="/etc/redis.conf"
AUTH="1234"

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
                if [ "$?"="0" ]
                then
                        echo "Redis is running..."  
                fi
                ;;
        stop)
                if [ ! -f $PIDFILE ]
                then
                        echo "$PIDFILE exists, process is not running."  
                else
                        PID=$(cat $PIDFILE)
                        echo "Stopping..."  
                        $REDIS_CLI -p $REDISPORT -a $AUTH  SHUTDOWN
                        sleep 2
                        while [ -x $PIDFILE ]  
                        do
                                echo "Waiting for Redis to shutdown..."  
                                sleep 1
                        done
                        echo "Redis stopped"  
                fi
                ;;
        restart|force-reload)
                ${0} stop
                ${0} start;;
        *)
                echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
                exit 1
esac

esc后:wq保存退出

添加自启动

//修改文件权限
chmod 755 /etc/init.d/redis
//添加自启动
chkconfig --add redis

//chkconfig -leve 启动级别 服务名 on 
//(说明:3级别代表在命令行模式启动,
// 5级别代表在图形界面启动,on表示开启)
chkconfig --level 345 redis on
//
chkconfig --list redis

//关闭自启动
chkconfig redis off

启动redis

service redis start
//或者
/etc/init.d/redis start

通过客户端命令行连接redis

//连接
redis-cli -h 127.0.0.1 -p 6379
//带密码的连接方式
redis-cli -h 127.0.0.1 -p 6379 -a "redis-pass-xxyyzz"

远程连接redis

在实际开发过程中,本地调试程序可能需要远程连接到测试服务器的redis。安装完redis之后,默认是不支持远程直接连接的。需要做些简单的设置。

1、检查是否能远程连接。假设测试服务器ip为 11.12.13.14

//看是否能连接成功,假如不能,则执行2,3步骤
redis-cli -h 11.12.13.14 -p 6379

2、检查远程服务器的6379端口是否被防火墙拦截。假如未开启,则开启

/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
/etc/init.d/iptables restart

3、编辑redis配置文件,允许所有ip连接

vim /etc/redis/6379.conf
//找到bind 127.0.0.1这一行,替换成下面这行
//假如没有bind 127.0.0.1,则新增下面这行
bind 0.0.0.0
//重启,假如没有密码,则省略-a参数和后面的密码
redis-cli -p 6379 -a "redis-pass-xxyyzz" shutdown
/etc/init.d/redis_6379 start

常用命令

redis 127.0.0.1:6379> info  #查看server版本内存使用连接等信息  

redis 127.0.0.1:6379> client list  #获取客户连接列表  

redis 127.0.0.1:6379> client kill 127.0.0.1:33441 #终止某个客户端连接  

redis 127.0.0.1:6379> dbsize #当前保存key的数量  

redis 127.0.0.1:6379> save #立即保存数据到硬盘  

redis 127.0.0.1:6379> bgsave #异步保存数据到硬盘  

redis 127.0.0.1:6379> flushdb #当前库中移除所有key  

redis 127.0.0.1:6379> flushall #移除所有key从所有库中  

redis 127.0.0.1:6379> lastsave #获取上次成功保存到硬盘的unix时间戳  

redis 127.0.0.1:6379> monitor #实时监测服务器接收到的请求  

redis 127.0.0.1:6379> slowlog len #查询慢查询日志条数  
(integer) 3   

redis 127.0.0.1:6379> slowlog get #返回所有的慢查询日志,最大值取决于slowlog-max-len配置  

redis 127.0.0.1:6379> slowlog get 2 #打印两条慢查询日志  

redis 127.0.0.1:6379> slowlog reset #清空慢查询日志信息 

XAMPP扩展redis

通过phpize扩展。下载phpredis,github地址:

https://github.com/nicolasff/phpredis

wget https://github.com/phpredis/phpredis/archive/develop.zip
unzip develop.zip
//进入目录
cd phpredis-develop
//phpize,路径根据实际情况修改
/Applications/XAMPP/xamppfiles/bin/phpize
//配置。路径根据实际情况修改
./configure --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config
//make
make
//通过sudo方式获得权限,因为这一步会编译生成redis.so文件
sudo make install
//编译完成后,会看到类似这样的输出,代表生成redis.so成功,可以进到目录去查看是否有生成。
Installing shared extensions:     /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/

//php.ini中加入redis.so扩展
vim /Applications/XAMPP/etc/php.ini
//加入这一行,保存退出。重启XAMPP
extension=redis.so

最后记得要重启XAMPP。

在centos下扩展安装redis方法类似,记得要重启apache或者nginx、php-fpm。可能会遇到的问题主要有以下几个:

1、运行phpize时提示:

bash: phpize: command not found

这是需要安装php-devel:

yum install php-devel

2、运行php --version 时,提示版本不兼容,报错如下:

PHP Warning: PHP Startup: redis: Unable to initialize module
Module compiled with module API=20050922
PHP compiled with module API=20090626
These options need to match in Unknown on line 0

报错的差异可能是API的版本不一样。导致这个的原因主要是,编译redis.so时用的php module版本是20050922,而现在的php module版本是20090626。即编译时用的phpize版本和当前的phpize版本不兼容。可能是你进行了php的升级。

解决方法很简单:

(1)、删除解压出来的redis整个目录,和生成的redis.so文件(find / -name redis.so搜索)。

(2)、检测/usr/sbin 目录下是否存在php、php-config、php-cgi、phpize 文件,如果存在删除这些文件,并重新建立对应的软连接到这个目录

ln -s php /usr/local/php/bin/php
ln -s php-cgi /usr/local/php/bin/php-cgi
ln -s php-config /usr/local/php/bin/php-config
ln -s phpize /usr/local/php/bin/phpize

以上目录以php的当前安装目录为准。

(3)、最后再重新解压,编译。这样就不会报错了。

(有时候第二步不一定需要做)

最后,通过phpinfo来查看是否安装成功redis扩展:

1.pic.jpg

参考:

1、http://www.jeftom.com/?p=318

2、http://blog.csdn.net/love__coder/article/details/8271832

3、http://blog.csdn.net/love__coder/article/details/8272180

4、http://blog.csdn.net/love__coder/article/details/8274331

5、http://blog.csdn.net/xxmzumeng/article/details/38869799

6、http://www.111cn.net/phper/linux-php/52319.htm

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容