文档章节

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

adbug
 adbug
发布于 2015/04/30 10:13
字数 2696
阅读 13
收藏 0
点赞 0
评论 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
博文 75
码字总数 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

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......

崔小凯 ⋅ 2016/01/15 ⋅ 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 ⋅ 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 ⋅ 0

Docker 镜像只制作LNMP + redis

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

宇哲不犹豫 ⋅ 2016/01/06 ⋅ 2

centos下php redis扩展的安装配置3种方法

redis是一个为了解决php与数据库操作的瓶颈而生的,下面我整理了centos中安装php redis扩展的三种方法,希望这三种方法能给各位带来帮助哦。 方法一 1.下载php redis扩展包 代码如下 复制代码...

耐心是美德 ⋅ 2016/01/13 ⋅ 0

Tinywan/lua-nginx-redis

在线文档(Online documentation) 目录 Nginx 教程 (Nginx tutorial) Nginx编译安装 Nginx.conf详解和配置 Location 详解和配置 Nginx基础知识 Nginx高性能WEB服务器详解 Nginx高并发系统...

Tinywan ⋅ 01/07 ⋅ 0

redis_windows配置

下载地址: php扩展:http://pecl.php.net/package/redis/2.2.7/windows redis服务端:https://github.com/MSOpenTech/redis/releases 启动Redis 直接在上图的目录打开命令窗口,运行: redis-...

喵王不瞌睡 ⋅ 2016/03/08 ⋅ 0

linux安装redis(基于wdlinux面板)

一、安装redis a、下载redis: wget http://download.redis.io/redis-stable.tar.gz tar -zxvf redis-stable.tar.gz cd redis-stable make make install b、在redis安装目录下进入utils目录,......

sky_l ⋅ 01/26 ⋅ 0

CentOS下安装Redis及Redis的PHP扩展

1、安装Redis 1.1 如果没有安装wget,安装wget yum install wget 1.2 在http://redis.io/download页面查看redis版本,并下载安装 wget http://download.redis.io/releases/redis-3.2.0.tar.g......

stone_ryan ⋅ 2017/10/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring表达式语言(SpEL)

1、SpEL引用 Spring EL在bean创建时执行其中的表达式。此外,所有的Spring表达式都可以通过XML或注解的方式实现。下面将使用Spring表达式语言(SpEL),注入字符串,整数,Bean到属性。 SpEL的...

霍淇滨 ⋅ 20分钟前 ⋅ 0

Gradle使用阿里云镜像

gradle 生命周期中有一个初始化( Initialization )的过程,这个过程运行在 build script 之前,我们可以在这个地方做一点系统全局的设置,如配置仓库地址。 你可以在以下几个位置实现仓库地址...

明MikeWoo ⋅ 29分钟前 ⋅ 0

appium+python3.6

1.安装jdk1.8(不知道为啥只识别1.8,1.10不识别,所以为了少折腾,迁就安装1.8) http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 配置 JAVA_HOME:...

Kampfer ⋅ 47分钟前 ⋅ 0

详解Apache 日志分割教程

一、日志切割 安装cronolog CentOS 5.3中编译安装Apache日志默认是不切割的,需要用用工具Cronnolog进行日志切割。 1.下载及安装 wget http://cronolog.org/download/cronolog-1.6.2.tar.gz ...

dragon_tech ⋅ 49分钟前 ⋅ 0

Keepalived介绍

负载均衡器(Load Balancer, LB )是一组能够将IP数据流以负载均衡形式转发到多台物理服务器的集成软件。有硬件负载均衡器和软件负载均衡器之分,硬件负载均衡器主要是在访问网络和服务器之间...

寰宇01 ⋅ 49分钟前 ⋅ 0

java8-Collections and Streams

stream和集合的区别是什么? 1.在计算的时候处理不同, 2.every element should be computed in the memory and then to be part of collections stream Stream apis filter with a predica......

writeademo ⋅ 55分钟前 ⋅ 0

Confluence 6 重新获得附件指南

每一个文件在恢复上传到 Confluence 的时候必须单独重命名,你可以通过下面说明的 3 个方法中选择一个进行操作: 选择 A - 通过文件名恢复附件 如果你知道你需要恢复的每一个文件名,尤其是你...

honeymose ⋅ 今天 ⋅ 0

【每天一个JQuery特效】根据状态确定是否滑入或滑出被选元素

主要效果: 本文主要采用slideToggle()方法实现以一行代码同时实现以展开或收缩的方式显示或隐藏被选元素。 主要代码如下: <!DOCTYPE html><html><head><meta charset="UTF-8">...

Rhymo-Wu ⋅ 今天 ⋅ 0

度量.net framework 迁移到.net core的工作量

把现有的.net framework程序迁移到.net core上,是一个非常复杂的工作,特别是一些API在两个平台上还不能同时支持。两个类库的差异性,通过人工很难识别全。好在微软的工程师们考虑到了我们顾...

李朝强 ⋅ 今天 ⋅ 0

请不要在“微服务”的狂热中迷失自我!

微服务在过去几年一直是一个非常热门的话题(附录1)。何为“微服务的疯狂”,举个例子: 众所周知,Netflix在DevOps上的表现非常棒。Netfix可以做微服务。因此:如果我做微服务,我也将非常...

harries ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部