博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CentOs下安装Redis和php Redis扩展并配置开机启动
阅读量:6071 次
发布时间:2019-06-20

本文共 7139 字,大约阅读时间需要 23 分钟。

hot3.png

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.

转载于:https://my.oschina.net/u/1038053/blog/408430

你可能感兴趣的文章
单词统计
查看>>
输入一个数字计算圆的面积
查看>>
在Delphi中隐藏程序进程
查看>>
AngularJS PhoneCat代码分析
查看>>
maven错误解决:编码GBK的不可映射字符
查看>>
2016/4/19 反射
查看>>
SharePoint Wiki发布页面的“保存冲突”
查看>>
oracle 10g 数据库与客户端冲突导致实例创建无监听问题
查看>>
Delphi中读取文本文件的方法(实例一)
查看>>
Linux常用命令
查看>>
Android开源代码解读の使用TelephonyManager获取移动网络信息
查看>>
想说一点东西。。。。
查看>>
css知多少(8)——float上篇
查看>>
NLB网路负载均衡管理器详解
查看>>
水平添加滚动条
查看>>
PHP中”单例模式“实例讲解
查看>>
VS2008查看dll导出函数
查看>>
VM EBS R12迁移,启动APTier . AutoConfig错误
查看>>
atitit.细节决定成败的适合情形与缺点
查看>>
iOS - Library 库
查看>>