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:)!