首页 > 其他 > 详细

Redis使用

时间:2014-04-12 06:26:30      阅读:477      评论:0      收藏:0      [点我收藏+]

一、说明

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。

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时,看到如下警告:

[1958] 13 Aug 16:18:24 # 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.

       需要修改/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模式运行!


daemonize yes #守护进程模式
save 60 1000 #当时间间隔超过60秒,或存储超过1000条记录时,进行持久化。

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 save    

      redis-cli shutdown  

       然后,拷贝数据目录下的rdb文件。



       六、系统服务

       touch /etc/init.d/redis-server

       chown +x /etc/init.d/redis-server

  1. #!/bin/bash  

  2. #  

  3. # redis    Startup script for redis processes  

  4. #  

  5. # author: snowolf  

  6. #  

  7. # processname: redis  

  8. redis_path="/usr/local/bin/redis-server"

  9. redis_conf="/etc/redis/redis.conf"

  10. redis_pid="/var/run/redis.pid"

  11. # Source function library.  

  12. . /etc/rc.d/init.d/functions  

  13. [ -x $redis_path ] || exit 0

  14. RETVAL=0

  15. prog="redis"

  16. # Start daemons.  

  17. start() {  

  18.    if [ -e $redis_pid -a ! -z $redis_pid ];then  

  19.        echo $prog" already running...."

  20.        exit 1

  21.    fi  

  22.    echo -n $"Starting $prog "

  23.    # Single instance for all caches  

  24.    $redis_path $redis_conf  

  25.    RETVAL=$?  

  26.    [ $RETVAL -eq 0 ] && {  

  27.        touch /var/lock/subsys/$prog  

  28.        success $"$prog"

  29.    }  

  30.    echo  

  31.    return $RETVAL  

  32. }  

  33. # Stop daemons.  

  34. stop() {  

  35.    echo -n $"Stopping $prog "

  36.    killproc -d 10 $redis_path  

  37.    echo  

  38.    [ $RETVAL = 0 ] && rm -f $redis_pid /var/lock/subsys/$prog  

  39.    RETVAL=$?  

  40.    return $RETVAL  

  41. }  

  42. # See how we were called.  

  43. case "$1" in  

  44.        start)  

  45.            start  

  46.            ;;  

  47.        stop)  

  48.            stop  

  49.            ;;  

  50.        status)  

  51.            status $prog  

  52.            RETVAL=$?  

  53.            ;;  

  54.        restart)  

  55.            stop  

  56.            start  

  57.            ;;  

  58.        condrestart)  

  59.            if test "x`pidof redis`" != x; then  

  60.                stop  

  61.                start  

  62.            fi  

  63.            ;;  

  64.        *)  

  65.            echo $"Usage: $0 {start|stop|status|restart|condrestart}"

  66.            exit 1

  67. esac  

  68. exit $RETVAL  







参考http://snowolf.iteye.com/blog/1630697

本文出自 “月满轩尼诗” 博客,请务必保留此出处http://sunnyyu.blog.51cto.com/8745931/1394194

Redis使用,布布扣,bubuko.com

Redis使用

原文:http://sunnyyu.blog.51cto.com/8745931/1394194

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!