编译安装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地址: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=/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/redis.so

最后记得要重启XAMPP。

MAMP安装redis扩展

安装方法跟在XAMPP下类似。有一点不一样的是,在新增php.ini文件的redis扩展时,需要找对文件。因为MAMP是支持多个PHP版本的,所以修改php.ini文件时,需要找准文件。

打开MAMP,按照以下路径修改文件: File → Edit Template → PHP → PHP 5.6.10 php.ini 新增 extension=/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/ 保存之后重启MAMP即可。

另外,要注意,在mac控制台运行php -version所使用的php版本,跟在php文件里通过phpinfo()所使用的版本是不一样的,通常有这个规律:

控制台: /Applications/MAMP/bin/php/php5.5.26/conf/php.ini

php文件: /Library/Application Support/appsolute/MAMP PRO/conf/php.ini

Centos下安装redis扩展 在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扩展:

phpRedisAdmin

类似于phpMyAdmin,一个简单的管理Redis数据库的可视化web程序,php写的。

https://github.com/erikdubbelboer/phpRedisAdmin


参考:

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

标签: redis, redis.so

→ 如果你觉得作者的文章不错,一不小心帮到了你,欢迎打赏作者几包辣条的钱💰