zoukankan      html  css  js  c++  java
  • redis搭建

    redis

    1、简介、安装

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

      redis 的出现,再一定程度上弥补了 Memcached 这类 key-value 内存换乘服务的不足,在部分场合可以对关系数据库起到很好的补充作用。redis 提供了 Python,Ruby,Erlang,PHP 客户端,使用方便。

    官方文档:http://www.redis.io/documentation

                    http://www.redis.cn/

    Redis 安装和使用实例

    # Ubuntu 安装 redis
    $ sudo apt-get install redis-server
    
    # 启动服务端
    $ sudo service redis-server {start|stop|restart|force-reload|status}
    
    # 启动服务端
    $ sudo redis-cli
    # 源码安装
    wget http://download.redis.io/releases/redis-3.0.6.tar.gz
    tar xzf redis-3.0.6.tar.gz
    cd redis-3.0.6
    make
    
    # 启动服务端
    src/redis-server
    
    # 启动客户端
    src/redis-cli
    # 检测后台进程是否存在
    ps -ef |grep redis
    
    # 检测6379端口是否在监听
    netstat -lntp | grep 6379
    
    # 客户端连接
    $ sudo redis-cli
    127.0.0.1:6379> set foo bar
    OK
    127.0.0.1:6379> get foo
    "bar"
    wget http://download.redis.io/releases/redis-3.0.5.tar.gz
    tar zxf redis-3.0.5.tar.gz
    cd redis-3.0.5
    #less README
    make MALLOC=jemalloc
    make PREFIX=/application/redis-3.0.5 install        -->指定安装路径
    echo $?
    ln -s /application/redis-3.0.5/ /application/redis
    View Code 源码快速安装文档
    [root@localhost redis-3.0.5]# tree /application/redis
    /application/redis
    `-- bin
        |-- redis-benchmark     # Redis性能测试工具,测试Redis在系统及你的配置下的读写性能。
        |-- redis-check-aof     # 更新日志检查。
        |-- redis-check-dump    # 用于本地数据库检查。
        |-- redis-cli           # Redis命令行操作工具。也可以telnet根据其纯文本协议操作
        |-- redis-sentinel -> redis-server
        `-- redis-server        # Redis服务器的daemon启动程序。
    1 directory, 6 files
    View Code redis 安装目录及各文件作用
    # 1、 配置环境变量
    # 编辑vim /etc/profile添加一行
    vim /etc/profile
    export PATH=/application/redis/bin/:$PATH
    tail -1 /etc/profile  -->检查    
    source /etc/profile   -->生效
    
    echo export PATH=/application/redis/bin/:$PATH >> /etc/profile
    tail -1 /etc/profile
    source /etc/profile
    
    
    # 2、 拷贝配置文件
    [root@localhost redis-3.0.5]# pwd
    /home/oldSuo/tools/redis-3.0.5    -->解压目录
    [root@localhost redis-3.0.5]# mkdir /application/redis/conf
    [root@localhost redis-3.0.5]# cp redis.conf /application/redis/conf/
    
    cd /home/oldSuo/tools/redis-3.0.5
    mkdir /application/redis/conf
    cp redis.conf /application/redis/conf/
    
    
    # 3、 启动redis
    redis-server /application/redis/conf/redis.conf &
    lsof -i :6379
    
    [root@localhost redis-3.0.5]# lsof -i :6379
    COMMAND    PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
    redis-ser 5876 root    4u  IPv6 793678202      0t0  TCP *:6379 (LISTEN)
    redis-ser 5876 root    5u  IPv4 793678204      0t0  TCP *:6379 (LISTEN)
    
    
    # 4、 关闭redis
    redis-cli shutdown
    lsof -i :6379    -->检查端口
    
    
    #5、 启动常见报错
    报错: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.
    解决:    [root@localhost redis-3.0.5]# killall redis-server
             [root@localhost redis-3.0.5]# sysctl vm.overcommit_memory=1
             vm.overcommit_memory = 1
    永久生效:[root@localhost conf]# vim /etc/sysctl.conf
    添加一行vm.overcommit_memory = 1
    View Code 配置并启动 redis 服务
    [root@localhost conf]# redis-cli --help
    [root@localhost conf]# redis-cli -h 192.168.200.95
    
    [root@localhost conf]# redis-cli       
    127.0.0.1:6379> help
    redis-cli 3.0.5
    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
    127.0.0.1:6379> help get
    
      GET key
      summary: Get the value of a key
      since: 1.0.0
      group: string
    
    127.0.0.1:6379> help set
    
      SET key value [EX seconds] [PX milliseconds] [NX|XX]
      summary: Set the string value of a key
      since: 1.0.0
      group: string
    
    127.0.0.1:6379> set 007 oldSuo
    OK
    127.0.0.1:6379> get 007
    "oldSuo"
    127.0.0.1:6379>
    
    或者
    [root@localhost conf]# redis-cli -h 192.168.200.95 -p 6379 set no005 suoning
    OK
    [root@localhost conf]# redis-cli -h 192.168.200.95 -p 6379 get no005         
    "suoning"
    
    删除并检查
    [root@localhost conf]# redis-cli del no005
    (integer) 1
    [root@localhost conf]# redis-cli get no005
    (nil)
    View Code 客户端连接命令及命令测试
    # 1、下载安装
    wget https://github.com/phpredis/phpredis/archive/master.zip
    
    unzip phpredis-master.zip
    cd phpredis-master
    /application/php/bin/phpize
    ./configure --with-php-config=/application/php/bin/php-config
    make
    make install
    
    [root@localhost phpredis-master]# make install
    Installing shared extensions:     /application/php-5.6.8/lib/php/extensions/no-debug-non-zts-20131226/
    [root@localhost phpredis-master]# cd /application/php-5.6.8/lib/php/extensions/no-debug-non-zts-20131226/
    [root@localhost no-debug-non-zts-20131226]# ls
    memcache.so  opcache.a  opcache.so  redis.so
    [root@localhost no-debug-non-zts-20131226]#
    
    
    # 2、修改php.ini设置,重启php
    在php.ini追加一条记录
    echo "extension = redis.so" >> /application/php/lib/php.ini
    
    #重启 php-fpm
    killall php-fpm
    /application/php/sbin/php-fpm
    
    #网页测试
    ......
    View Code redis 的 php 客户端拓展安装
    # 1、修改从库redis.conf配置文件
    #配置从库redis.conf配置文件(先装redis)
    #添加一行,主库IP地址及端口
    vim /application/redis/conf/redis.conf
    # slaveof <masterip> <masterport>
    slaveof 192.168.200.95 6379
    
    
    # 2、重启从库redis服务
    pkill redis
    redis-server /application/redis/conf/redis.conf &
    
    #启动提示
    7815:S 23 Nov 19:48:52.059 # Server started, Redis version 3.0.5
    7815:S 23 Nov 19:48:52.060 * The server is now ready to accept connections on port 6379
    7815:S 23 Nov 19:48:53.060 * Connecting to MASTER 192.168.200.95:6379     -->跟主库建立连接
    7815:S 23 Nov 19:48:53.060 * MASTER <-> SLAVE sync started                -->主从同步已经开始
    7815:S 23 Nov 19:48:53.062 * Non blocking connect for SYNC fired the event.
    7815:S 23 Nov 19:48:53.074 * Master replied to PING, replication can continue...      -->主从ping可以继续
    7815:S 23 Nov 19:48:53.075 * Partial resynchronization not possible (no cached master)
    7815:S 23 Nov 19:48:53.087 * Full resync from master: 24b26f7abc62830a7ff97516c960ba7fc0992da9:1
    7815:S 23 Nov 19:48:53.122 * MASTER <-> SLAVE sync: receiving 32 bytes from master    -->接收到字节数
    7815:S 23 Nov 19:48:53.122 * MASTER <-> SLAVE sync: Flushing old data
    7815:S 23 Nov 19:48:53.122 * MASTER <-> SLAVE sync: Loading DB in memory
    7815:S 23 Nov 19:48:53.122 * MASTER <-> SLAVE sync: Finished with success  -->成功
    
    
    # 3、测试主从同步
    # 主库:写数据
    [root@localhost redis]# redis-cli 
    127.0.0.1:6379> set test1 oldsuo
    OK
    
    # 从库:
    [root@localhost conf]# redis-cli -h localhost -p 6379 monitor      -->开启实时监控
    OK
    1448280033.096372 [0 192.168.200.95:6379] "PING"
    1448280043.125830 [0 192.168.200.95:6379] "PING"
    1448280053.154134 [0 192.168.200.95:6379] "PING"
    1448280070.858808 [0 192.168.200.95:6379] "SELECT" "0"
    1448280070.858828 [0 192.168.200.95:6379] "set" "test1" "oldsuo"   -->主库添加数据,从库同步
    
    [root@localhost redis]# redis-cli -h 192.168.200.92 get test1
    "oldsuo"        -->从库同步成功
    View Code redis 主从同步
    Redis持久化方式有两种:
    
    (1)RDB
    
    对内存中数据库状态进行快照
    
    (2)AOF
    
    把每条写命令都写入文件,类似mysql的binlog日志
    
    RDB
    
    将Redis在内存中的数据库状态保存到磁盘里面,RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态
    
    RDB的生成方式:
    
    (1)执行命令手动生成
    
    有两个Redis命令可以用于生成RDB文件,一个是SAVE,另一个是BGSAVE
    
    SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求
    
    BGSAVE命令会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程(父进程)继续处理命令请求,创建RDB文件结束之前,客户端发送的BGSAVE和SAVE命令会被服务器拒绝
    
    (2)通过配置自动生成
    
    可以设置服务器配置的save选项,让服务器每隔一段时间自动执行一次BGSAVE命令
    
    可以通过save选项设置多个保存条件,但只要其中任意一个条件被满足,服务器就会执行BGSAVE命令
    
    例如:
    
    save 900 1
    save 300 10
    save 60 10000
    
    那么只要满足以下三个条件中的任意一个,BGSAVE命令就会被执行
    
    服务器在900秒之内,对数据库进行了至少1次修改 
    服务器在300秒之内,对数据库进行了至少10次修改 
    服务器在60秒之内,对数据库进行了至少10000次修改
    
    AOF
    
    AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的
    
    AOF文件刷新的方式,有三种
    
    (1)appendfsync always - 每提交一个修改命令都调用fsync刷新到AOF文件,非常非常慢,但也非常安全
    
    (2)appendfsync everysec - 每秒钟都调用fsync刷新到AOF文件,很快,但可能会丢失一秒以内的数据
    
    (3)appendfsync no - 依靠OS进行刷新,redis不主动刷新AOF,这样最快,但安全性就差
    
    默认并推荐每秒刷新,这样在速度和安全上都做到了兼顾
    
    数据恢复
    
    RDB方式
    
    RDB文件的载入工作是在服务器启动时自动执行的,没有专门用于载入RDB文件的命令,只要Redis服务器在启动时检测到RDB文件存在,它就会自动载入RDB文件,服务器在载入RDB文件期间,会一直处于阻塞状态,直到载入工作完成为止
    
    AOF方式
    
    服务器在启动时,通过载入和执行AOF文件中保存的命令来还原服务器关闭之前的数据库状态,具体过程:
    
    (1)载入AOF文件
    
    (2)创建模拟客户端
    
    (3)从AOF文件中读取一条命令
    
    (4)使用模拟客户端执行命令
    
    (5)循环读取并执行命令,直到全部完成
    
    如果同时启用了RDB和AOF方式,AOF优先,启动时只加载AOF文件恢复数据
    View Code redis 持久化
  • 相关阅读:
    poj 1579(动态规划初探之记忆化搜索)
    hdu 1133(卡特兰数变形)
    CodeForces 625A Guest From the Past
    CodeForces 625D Finals in arithmetic
    CDOJ 1268 Open the lightings
    HDU 4008 Parent and son
    HDU 4044 GeoDefense
    HDU 4169 UVALive 5741 Wealthy Family
    HDU 3452 Bonsai
    HDU 3586 Information Disturbing
  • 原文地址:https://www.cnblogs.com/inkwhite/p/8669884.html
Copyright © 2011-2022 走看看