文档章节

CentOs下安装Redis和php Redis扩展并配置开机启动

adbug
 adbug
发布于 2015/04/30 10:13
字数 2696
阅读 18
收藏 0

redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。问题是这个项目还很新,可能还不足够稳定,而且没有在实际的一些大型系统应用的实例。此外,缺乏mc中批量get也是比较大的问题,始终批量获取跟多次获取的网络开销是不一样的。

性能测试结果:

SET操作每秒钟 110000 次,GET操作每秒钟 81000 次,服务器配置如下:
Linux 2.6, Xeon X3320 2.5Ghz.

安装过程:

Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务器。

Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。

一、下载最新版

[root@rekfan /]# wget http://download.redis.io/releases/redis-2.8.3.tar.gz

二、解压缩

[root@rekfan /]# tar zxvf redis-2.8.3.tar.gz

三、安装C/C++的编译组件(非必须)

[root@rekfan /]# yum install build-essential

四、编译

[root@rekfan /]# cd redis-2.8.3
[root@rekfan redis-2.8.3]# make

make命令执行完成后,会在当前src目录下生成本个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-stat,它们的作用如下:

redis-server:Redis服务器的daemon启动程序
redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况  

[root@rekfan redis-2.8.3]# mv ../redis-2.8.3 /usr/local/redis

五、修改配置文件
/etc/sysctl.conf
添加
vm.overcommit_memory=1
刷新配置使之生效
sysctl vm.overcommit_memory=1

补充介绍:
**如果内存情况比较紧张的话,需要设定内核参数:
[root@rekfan /]# echo 1 > /proc/sys/vm/overcommit_memory

内核参数说明如下:

overcommit_memory文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
[root@rekfan /]# cd /usr/local/redis/
[root@rekfan redis]# mkdir etc
[root@rekfan redis]# cp redis.conf ./etc/redis.conf
**编辑redis.conf配置文件(/usr/local/redis/etc/redis.conf),按需求做出适当调整,比如:
daemonize yes #转为守护进程,否则启动时会每隔5秒输出一行监控信息
save 60 1000 #减小改变次数,其实这个可以根据情况进行指定
maxmemory 256000000 #分配256M内存

在我们成功安装Redis后,我们直接执行redis-server即可运行Redis,此时它是按照默认配置来运行的(默认配置甚至不是后台运 行)。我们希望Redis按我们的要求运行,则我们需要修改配置文件,Redis的配置文件就是我们上面第二个cp操作的redis.conf文件,目前 它被我们拷贝到了/usr/local/redis/etc/目录下。修改它就可以配置我们的server了。如何修改?下面是redis.conf的主 要配置参数的意义:

中文说明:

1,是否以后台进程运行,默认为no
daemonize no

2,如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid
pidfile /var/run/redis.pid

3,监听端口,默认为6379
port 6379

4,绑定主机IP,默认值为127.0.0.1(注释)
bind 127.0.0.1

5,超时时间,默认为300(秒)
timeout 300

6,日志记录等级,有4个可选值,debug,verbose(默认值),notice,warning
loglevel verbose

7,日志记录方式,默认值为stdout
logfile stdout

8,可用数据库数,默认值为16,默认数据库为0
databases 16

9,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。

900秒(15分钟)内至少有1个key被改变
save 900 1
300秒(5分钟)内至少有10个key被改变
save 300 10

10,存储至本地数据库时是否压缩数据,默认为yes
rdbcompression yes

11,本地数据库文件名,默认值为dump.rdb
dbfilename /root/redis_db/dump.rdb

12,本地数据库存放路径,默认值为 ./
dir /root/redis_db/

13,当本机为从服务时,设置主服务的IP及端口(注释)
slaveof <masterip> <masterport>

14,当本机为从服务时,设置主服务的连接密码(注释)
masterauth <master-password>

15,连接密码(注释)
requirepass foobared

16,最大客户端连接数,默认不限制(注释)
maxclients 128

17,设置最大内存,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。(注释)
maxmemory <bytes>

18,是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no
appendonly yes

19,更新日志文件名,默认值为appendonly.aof(注释)
appendfilename /root/redis_db/appendonly.aof

20,更新日志条件,共有3个可选值。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次(默认值)。
appendfsync everysec

21,是否使用虚拟内存,默认值为no
vm-enabled yes

22,虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
vm-swap-file /tmp/redis.swap

23,将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的 (Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0。
vm-max-memory 0

24,虚拟内存文件以块存储,每块32bytes
vm-page-size 32

25,虚拟内在文件的最大数
vm-pages 134217728

26,可以设置访问swap文件的线程数,设置最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证.
vm-max-threads 4

27,把小的输出缓存放在一起,以便能够在一个TCP packet中为客户端发送多个响应,具体原理和真实效果我不是很清楚。所以根据注释,你不是很确定的时候就设置成yes
glueoutputbuf yes

28,在redis 2.0中引入了hash数据结构。当hash中包含超过指定元素个数并且最大的元素没有超过临界时,hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值
hash-max-zipmap-entries 64

29,hash中一个元素的最大值
hash-max-zipmap-value 512

30,开启之后,redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。当你的使 用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。如果没有这么严格的实时性要求,可以设置 为yes,以便能够尽可能快的释放内存
activerehashing yes

下面是一个略做修改后的配置文件内容:

daemonize yes
pidfile /usr/local/redis/var/redis.pid
port 6379
timeout 300
loglevel debug
logfile /usr/local/redis/var/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /usr/local/redis/var/
appendonly no
appendfsync always
glueoutputbuf yes
shareobjects no
shareobjectspoolsize 1024
将上面内容写为redis.conf并保存到/usr/local/redis/etc/目录下

然后在命令行执行:

[root@rekfan /]# /usr/local/redis/src/redis-server /usr/local/redis/etc/redis.conf

即可在后台启动redis服务,这时你通过

telnet 127.0.0.1 6379

即可连接到你的redis服务。

安装PHP的Redis扩展
http://pecl.php.net/package/redis

[root@rekfan /]# wget http://pecl.php.net/get/redis-2.2.4.tgz
[root@rekfan /]# tar -zxvf redis-2.2.4.tgz
[root@rekfan /]# cd redis-2.2.4
[root@rekfan redis-2.2.4]# /usr/local/php/bin/phpize
[root@rekfan redis-2.2.4]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@rekfan redis-2.2.4]# make && make install

配置php.ini
vi /usr/local/php/etc/php.ini
(加入:extension=redis.so)

六、启动服务并验证

启动服务器
[root@rekfan src]# ./redis-server

[root@rekfan src]# ./redis-server ./etc/redis.conf  
查看是否成功启动
$ ps -ef | grep redis   

[root@rekfan src]#./redis-cli ping
PONG


附:启动脚本

# ###########################################################
# chkconfig:   2345 90 10
# description:  Redis is a persistent key-value database
PATH= /usr/local/bin : /sbin : /usr/bin : /bin
REDISPORT=6379
EXEC= /usr/local/redis/src/redis-server
REDIS_CLI= /usr/local/redis/src/redis-cli
PIDFILE= /var/run/redis .pid
CONF= "/usr/local/redis/etc/redis.conf"
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 does not exist, process is not running"
else
PID=$( cat $PIDFILE)
echo "Stopping ..."
$REDIS_CLI -p $REDISPORT SHUTDOWN
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
# ###########################################################


[root@rekfan ]# chmod +x /etc/init.d/redis

其实做成服务启动,也是调用redis-server,如果想让它在后台作为daemon运行,那么
需要修改redis.conf,将 daemonize no 改为 daemonize yes

设定开机启动服务
[root@rekfan src]# chkconfig redis on

启动,停止redis
启动:
service redis start   #或者 /etc/init.d/redis start
停止:
service redis stop   #或者 /etc/init.d/redis stop

七、启动命令行客户端赋值取值
[root@rekfan src]# redis-cli set mykey somevalue
[root@rekfan src]# ./redis-cli get mykey

八、关闭服务
[root@rekfan src]# redis-cli shutdown     
#关闭指定端口的redis-server  
[root@rekfan src]# redis-cli -p 6380 shutdown

九、客户端也可以使用telnet形式连接。
[root@dbcache conf]# telnet 127.0.0.1 6379
Trying 127.0.0.1...
Connected to dbcache (127.0.0.1).
Escape character is '^]'.
set foo 3
bar
+OK
get foo
$3
bar
^]
telnet> quit
Connection closed.


© 著作权归作者所有

共有 人打赏支持
adbug
粉丝 6
博文 176
码字总数 198249
作品 0
成都
私信 提问
伍哥原创之安装nginx,mysql,php-fpm,redis

【伍哥原创】 v1.0 2012-6-4 初稿 v1.1 2012-6-5 更新,增加php-redis模块的编译安装 【正文】 本文目的 CentOS 6.2 下通过yum安装nginx,mysql,php-fpm,redis。 环境准备 一台安装了CentOS ...

alex.wu
2012/08/06
0
0
CentOS 编译安装 LNMP

一 、配置防火墙,开启80端口和3306端口 vi /etc/sysconfig/iptables #把以下添加到22端口下 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state......

koobur
2016/01/15
0
0
CentOS yum安装redis

安装redis yum install redis 2. 安装php-redis扩展 yum install php-redis 3. 启动redis,并设定开机自动启动 service redis startchkconfig redis on 完成,安装就是这么简单、粗暴!!!!...

Surjur
2015/02/03
16.5K
2
Docker 镜像只制作LNMP + redis

Docker 镜像只制作LNMP + redis 一、制作背景 Window10 + VM11 + opensuse + docker + centos7dockers镜像 这里主要是分享LNMP + redis 镜像的制作,跳过其他。 二、配置LNMP 1、安装docker ...

宇哲不犹豫
2016/01/06
1K
2
Redis在Centos7下安装,与phpredis扩展安装

Centos7 安装Redis 使用YUM yum install -y redis 2. 源码包安装 下载源码包 $ wget http://download.redis.io/releases/redis-2.8.17.tar.gz$ tar xzf redis-2.8.17.tar.gz$ cd redis-2.8.......

寻找普拉多
2015/12/06
227
0

没有更多内容

加载失败,请刷新页面

加载更多

颜色模型与颜色应用---RGB颜色模型

中国龙-扬科
10分钟前
3
0
网络优化-tcp和udp的协作

TODO

梦想游戏人
13分钟前
3
0
list和数组转化

Java中List转换为数组,数组转List List转换为Array可以这样处理: ArrayList<String> list=new ArrayList<String>(); String[] strings = new String[list.size()]; list.toArray(strings);......

west_coast
13分钟前
2
0
LSP 商户端API

Your domain:                  lsp-api-merchant.hhs2717.cnVirtualhost conf:             /usr/local/nginx/conf/vhost/lsp-api-merchant.hhs2717.cn.confDirectory of:......

BeanHo
23分钟前
2
0
设计模式 之 访问者模式

设计模式 之 访问者模式 概念 核心理念:将数据结构与算法分离。 使用场景:数据结构不变动,算法经常变动。 1、一个Visitor类存放被访问的对象,访问者主要处理具体算法与行为。 // 访问者...

GMarshal
27分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部