一、说明
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。从盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
二、安装
下载Redis https://code.google.com/p/redis/
tar fvxz redis-2.4.16.tar.gz
cd src
sudo make install
可执行文件默认安装到了/usr/local/bin
默认的配置文件redis.conf
mkdir /home/yuchunyun/src/redis/{bin,etc,var}
cp /usr/local/bin/redis* /home/yuchunyun/src/redis/bin
cp redis.conf /home/yuchunyun/src/redis/etc
sudo chown yuchunyun:yuchunyun redis/ -R
运行redis
bin/redis-server ./etc/redis.conf
进行数据测试
bin/redis-benchmark -l
这个测试会一直进行下去,直到你Ctrl+C:
使用redis
bin/redis-cli
redis 127.0.0.1:6379> ?
redis-cli 2.4.16
Type: "help @<group>" to get a list of commands in <group>
"help <command>" for help on <command>
"help <tab>" to get a list of possible help topics
"quit" to exit
redis 127.0.0.1:6379> set name yuchunyun
OK
redis 127.0.0.1:6379> get name
"yuchunyun"
redis 127.0.0.1:6379> exit
关闭redis
bin/redis-cli shutdown
三、调优
1./etc/sysctl.conf
前面启动Redis时,看到如下警告:
需要修改/etc/sysctl.conf文件
末尾追加vm.overcommit_memory = 1
然后执行sysctl vm.overcommit_memory=1,使之生效:
2./proc/sys/vm/overcommit_memory
为了调整内存分配策略,需要配置/proc/sys/vm/overcommit_memory
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
默认为0,如果内存情况比较紧张的话,设为1:
echo 1 > /proc/sys/vm/overcommit_memory
3.redis.conf
前面启动Redis后,总是在命令行里不断跳着各种日志,很麻烦。即便通过“&”,领其后台运行,也无济于事。这就需要修改redis.conf,以Daemo模式运行!
maxmemory 256mb #分配256MB内存
PS:切记,一定要设定maxmemmory,且配置大小要小于物理内存,留有足够的内存供系统使用。
四、主从配置
配置Master-Slave,只需要在Slave上配置Master节点IP Port:
Slave上vi redis.conf
slaveof 10.8.8.163 6379
PS:为了两个Redis Server可以互访,需要注释掉bind 127.0.0.1
依次启动Master,Slave:
[7572] 17 Aug 19:08:08 * MASTER <-> SLAVE sync started: SYNC sent
[7572] 17 Aug 19:08:08 * MASTER <-> SLAVE sync: receiving 10 bytes from master
[7572] 17 Aug 19:08:08 * MASTER <-> SLAVE sync: Loading DB in memory
[7572] 17 Aug 19:08:08 * MASTER <-> SLAVE sync: Finished with success
看到上述日志,就说明Master-Slave已经连通。
简单测试,Master写,Slave读:
五、备份
在从服务器上执行下列命令:
redis-cli shutdown
然后,拷贝数据目录下的rdb文件。
六、系统服务
touch /etc/init.d/redis-server
chown +x /etc/init.d/redis-server
#!/bin/bash
#
# redis Startup script for redis processes
#
# author: snowolf
#
# processname: redis
redis_path="/usr/local/bin/redis-server"
redis_conf="/etc/redis/redis.conf"
redis_pid="/var/run/redis.pid"
# Source function library.
. /etc/rc.d/init.d/functions
[ -x $redis_path ] || exit 0
RETVAL=0
prog="redis"
# Start daemons.
start() {
if [ -e $redis_pid -a ! -z $redis_pid ];then
echo $prog" already running...."
exit 1
fi
echo -n $"Starting $prog "
# Single instance for all caches
$redis_path $redis_conf
RETVAL=$?
[ $RETVAL -eq 0 ] && {
touch /var/lock/subsys/$prog
success $"$prog"
}
echo
return $RETVAL
}
# Stop daemons.
stop() {
echo -n $"Stopping $prog "
killproc -d 10 $redis_path
echo
[ $RETVAL = 0 ] && rm -f $redis_pid /var/lock/subsys/$prog
RETVAL=$?
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if test "x`pidof redis`" != x; then
stop
start
fi
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart}"
exit 1
esac
exit $RETVAL
参考http://snowolf.iteye.com/blog/1630697
本文出自 “月满轩尼诗” 博客,请务必保留此出处http://sunnyyu.blog.51cto.com/8745931/1394194
原文:http://sunnyyu.blog.51cto.com/8745931/1394194