当前位置:首页 > PHP教程 > PHP总结归纳

linuxcentos5.8安装redis

redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了python,ruby,erlang,php客户端,使用很方便。 一.安装tcl 否则在redis make test时出报

redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了python,ruby,erlang,php客户端,使用很方便。
一.安装tcl
否则在redis make test时出报错

you need tcl 8.5 or newer in order to run the redis test
make[1]: *** [test] error 1
wget http://downloads.sourceforge.net/tcl/tcl8.6.0-src.tar.gz
tar zxvf tcl8.6.0-src.tar.gz
cd tcl8.6.0-src
cd unix &&
./configure --prefix=/usr 
            --mandir=/usr/share/man 
            $([ $(uname -m) = x86_64 ] && echo --enable-64bit) 
make &&
sed -e "s@^(tcl_src_dir=').*@1/usr/include'@" 
    -e "/tcl_b/s@='(-l)?.*unix@='1/usr/lib@" 
    -i tclconfig.sh
make test
tests ended at tue apr 16 12:02:27 cst 2013
all.tcl:        total   116     passed  116     skipped 0       failed  0
make install &&
make install-private-headers &&
ln -v -sf tclsh8.6 /usr/bin/tclsh &&
chmod -v 755 /usr/lib/libtcl8.6.so

二.redis
1.安装redis

wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar xzf redis-2.6.12.tar.gz
cd redis-2.6.12
make
make test

以下错误可以忽略

https://github.com/antirez/redis/issues/1034

[exception]: executing test client: assertion:server started even if rdb was unreadable!.
assertion:server started even if rdb was unreadable!
    while executing
"error "assertion:$msg""
    (procedure "fail" line 2)
    invoked from within
"fail "server started even if rdb was unreadable!""
    ("uplevel" body line 2)
    invoked from within
"uplevel 1 $elsescript"
    (procedure "wait_for_condition" line 7)
    invoked from within
"wait_for_condition 50 100 {
        [string match {*fatal error loading*}  [exec tail -n1 < [dict get $srv stdout]]]
    } else {
        fail "server..."
    ("uplevel" body line 2)
    invoked from within
"uplevel 1 $code"
    (procedure "start_server_and_kill_it" line 5)
    invoked from within
"start_server_and_kill_it [list "dir" $server_path] {
    wait_for_condition 50 100 {
        [string match {*fatal error loading*} 
            [exec..."
    (file "tests/integration/rdb.tcl" line 57)
    invoked from within
"source $path"
    (procedure "execute_tests" line 4)
    invoked from within
"execute_tests $data"
    (procedure "test_client_main" line 9)
    invoked from within
"test_client_main $::test_server_port "
make[1]: *** [test] error 1

make命令执行完成后,会在当前目录下生成4个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-stat,它们的作用如下:
redis-server:redis服务器的daemon启动程序
redis-cli:redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
redis-benchmark:redis性能测试工具,测试redis在你的系统及你的配置下的读写性能
redis-stat:redis状态检测工具,可以检测redis当前状态参数及延迟状况

2.建立redis目录

mkdir -p /opt/redis/bin
mkdir -p /opt/redis/etc
mkdir -p /opt/redis/var
cp redis.conf /opt/redis/etc/
cd src
cp redis-server redis-cli redis-benchmark redis-check-aof redis-check-dump /opt/redis/bin/
useradd redis
chown -r redis.redis /opt/redis

建立redis目录,只是为了将redis相关的资源更好的统一管理。你也可以使用
make install
安装在系统默认目录

3.复制启动文件

cp ../utils/redis_init_script /etc/init.d/redis

4.启动redis

cd /opt/redis/bin
./redis-server /opt/redis/etc/redis.conf
_._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           redis 2.6.12 (00000000/0) 64 bit
  .-`` .-".  "/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     running in stand alone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     port: 6379
 |    `-._   `._    /     _.-'    |     pid: 24454
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               
[24454] 12 apr 10:34:19.519 # server started, redis version 2.6.12
[24454] 12 apr 10:34:19.519 # warning overcommit_memory is set to 0! background save may fail under low memory condition. to fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
[24454] 12 apr 10:34:19.519 * the server is now ready to accept connections on port 6379

成功安装redis后,直接执行redis-server即可运行redis,此时它是按照默认配置来运行的(默认配置不是后台运行)。如果我们希望redis按我们的要求运行,则需要修改配置文件,

5.设置itpables,充许192.168.0内网网段访问

iptables -a input -s 192.168.0.0/24 -p tcp -m tcp --dport 6379 -j accept
/etc/init.d/iptables save

6.配置redis
vi /opt/redis/etc/redis.conf

daemonize yes
#是否作为守护进程运行 默认0
pidfile /var/run/redis.pid
# 指定一个pid,默认为/var/run/redis.pid
port 6379
#redis默认监听端口
bind 192.168.0.41
#绑定主机ip,默认值为127.0.0.1
timeout 300
#客户端闲置多少秒后,断开连接,默认为300(秒)
tcp-keepalive 0
# tcp保持连接
loglevel notice
#日志记录等级,有4个可选值,debug,verbose(默认值),notice,warning
logfile /opt/redis/var/redis.log
#指定日志输出的文件名,默认值为stdout,也可设为/dev/null屏蔽日志
databases 16
#可用数据库数,默认值为16
save 900 1
#保存数据到disk的策略
#当有一条keys数据被改变是,900秒刷新到disk一次
save 300 10
#当有10条keys数据被改变时,300秒刷新到disk一次
save 60 10000
#当有1w条keys数据被改变时,60秒刷新到disk一次
#当dump .rdb数据库的时候是否压缩数据对象
rdbcompression yes
#本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
#本地数据库存放路径,默认值为 ./
dir /opt/redis/var/
#内存限制
maxmemory 2g
#刷新策略
maxmemory-policy allkeys-lru

7. 调整系统内核参数
如果内存情况比较紧张的话,需要设定内核参数:

echo 1 > /proc/sys/vm/overcommit_memory

这里说一下这个配置的含义:/proc/sys/vm/overcommit_memory
该文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2,表示内核允许分配超过所有物理内存和交换空间总和的内存
redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为8g,这个时候也要同样分配8g的内存给child, 如果内存无法负担,往往会造成redis服务器的down机或者io负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)

vi /etc/sysctl.conf

vm.overcommit_memory = 1

然后应用生效:

sysctl –p

8.修改redis服务脚本
vi /etc/init.d/redis

redisport=6379
exec=/opt/redis/bin/redis-server
cliexec=/opt/redis/bin/redis-cli
pidfile=/var/run/redis.pid
conf="/opt/redis/etc/redis.conf"

如果监听非本机ip地址时还需修改下脚本,不然关不掉

#增加监听地址变量
redihost=192.168.0.41
#增加-h $redihost
echo "stopping ..."
                $cliexec -h $redihost -p $redisport shutdown

9.测试

/etc/init.d/redis start

starting redis server…

/opt/redis/bin/redis-cli -h 192.168.0.41

redis 127.0.0.1:6379> ping
pong
redis 127.0.0.1:6379> set mykey c1gstduio
ok
redis 127.0.0.1:6379> get mykey
“c1gstduio”
redis 127.0.0.1:6379> exit

benchmark
/opt/redis/bin/redis-benchmark -h 192.168.0.41

====== ping_inline ======
  10000 requests completed in 0.17 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
99.51% 
【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!