zoukankan      html  css  js  c++  java
  • Redis安装部署

    Redis是一个key-value存储系统,官网:http://redis.io
    Redis和memcached类似,但是支持数据持久化
    Redis支持更多value类型,除了string外,还支持hash、lists(链表)、sets(集合)和sorted setd(有序集合)这几种类型
    Redis使用了两种文件格式:全量数据(RDB)和增量请求(AOF)。全量数据格式是把内存中的数据写入磁盘,便于 下次读取文件进行加载。增量请求文件格式则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据
    Redis的存储分为内存存储、磁盘存储和log文件三部分

    AOF: 类似于mysql的二进制日志文件,当服务器重启或服务重启时,会依据这些AOF重新写磁盘,以此来达到数持久化

    1. 使用Redis有哪些好处?
    
    (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
    
    (2) 支持丰富数据类型,支持string,list,set,sorted set,hash
    
    (3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
    
    (4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
    
    
    2. redis相比memcached有哪些优势?
    
    (1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
    
    (2) redis的速度比memcached快很多
    
    (3) redis可以持久化其数据
    
    
    3. redis常见性能问题和解决方案:
    
    (1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
    
    (2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
    
    (3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
    
    (4) 尽量避免在压力很大的主库上增加从库
    
    (5) 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3...
    
    这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。
    
    
    
     
    
    4. MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据
    
     相关知识:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略:
    
    voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
    
    volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
    
    volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
    
    allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
    
    allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
    
    no-enviction(驱逐):禁止驱逐数据
    
     
    
    5. Memcache与Redis的区别都有哪些?
    
    1)、存储方式
    
    Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。
    
    Redis有部份存在硬盘上,这样能保证数据的持久性。
    
    2)、数据支持类型
    
    Memcache对数据类型支持相对简单。
    
    Redis有复杂的数据类型。
    
    
    3),value大小
    
    redis最大可以达到1GB,而memcache只有1MB
    
    
    
    6. Redis 常见的性能问题都有哪些?如何解决?
    
     
    
    1).Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。
    
    
    2).Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。
    
     
    3).Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象。
    
    4). Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内
    
    
    
    
    7, redis 最适合的场景
    
    
    Redis最适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就会有疑问,似乎Redis更像一个加强版的Memcached,那么何时使用Memcached,何时使用Redis呢?
    
           如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:
    
         1 、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
         2 、Redis支持数据的备份,即master-slave模式的数据备份。
         3 、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
    
    (1)、会话缓存(Session Cache)
    
    最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗?
    
    幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。
    
    (2)、全页缓存(FPC)
    
    除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。
    
    再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。
    
    此外,对WordPress的用户来说,Pantheon有一个非常好的插件  wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。
    
    (3)、队列
    
    Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。
    
    如果你快速的在Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用Redis作为broker,你可以从这里去查看。
    
    (4),排行榜/计数器
    
    Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可:
    
    当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行:
    
    ZRANGE user_scores 0 10 WITHSCORES
    
    Agora Games就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis来存储数据的,你可以在这里看到。
    
    (5)、发布/订阅
    
    最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统!(不,这是真的,你可以去核实)。
    redis特性

    一、Redis安装

    1.下载并解压包
    wget https://codeload.github.com/antirez/redis/tar.gz/2.8.21 -O redis-2.8.21.tar.gz
    tar zxvf redis-2.8.21.tar.gz   

    2. make ------注意:redis的编译安装没有像其他源码编译安装的第一步./configure
    cd redis-2.8.21
    make
    make报错缺少文件的解决:
    yum install -y gcc -----注意:在编译安装任何一款源码包时,都需要gcc包
    yum install -y epel-release
    yum install -y jemalloc-devel
    cd /usr/local/redis-2.8.21/deps
    make hiredis lua jemalloc
    make linenoise

    make -----最后出现提示信息:'make test'即说明make ok

    3.make install
    make PREFIX=/usr/local/redis install

    4.拷贝配置文件:
    mkdir /usr/local/redis/etc ---创建该目录用来存放配置文件

    cp  /usr/local/src/redis-2.8.21/redis.conf   /usr/local/redis/etc/    拷贝配置文件

    Redis通用配置
    
    daemonize no  # 默认情况下,redis并不是以daemon形式来运行的。通过daemonize配置项可以控制redis的运行形式
    
    pidfile /path/to/redis.pid    #当以daemon形式运行时,redis会生成一个pid文件,默认会生成在/var/run/redis.pid
    
    bind 192.168.1.2 10.8.4.2 # 指定绑定的ip,可以有多个
    
    port 6379  #指定监听端口
    
    unixsocket /tmp/redis.sock  #也可以监听socket
    
    unixsocketperm 755   #当监听socket时可以指定权限为755
    
    timeout 0 #当一个redis-client一直没有请求发向server端,那么server端有权主动关闭这个连接,可以通过timeout来设置“空闲超时时限”,0表示永不关闭。
    
    tcp-keepalive 0  #TCP连接保活策略,可以通过tcp-keepalive配置项来进行设置,单位为秒,假如设置为60秒,则server端会每60秒向连接空闲的客户端发起一次ACK请求,以检查客户端是否已经挂掉,对于无响应的客户端则会关闭其连接。如果设置为0,则不会进行保活检测。
    
    loglevel notice # 日志级别,有四种debug, verbose, notice, warning
    
    logfile “” #定义日志路径
    
    syslog-ident redis  #如果希望日志打印到syslog中,通过syslog-enabled来控制。另外,syslog-ident还可以让你指定syslog里的日志标志。
    
    syslog-facility local0 # 指定syslog的设备,可以是USER或者local0-local7
    
    databases 16  #设置数据库的总数量
    
    Redis快照配置(rdb持久化)
    
    save 900 1 #表示每15分钟且至少有1个key改变,就触发一次持久化 
    save 300 10 #表示每5分钟且至少有10个key改变,就触发一次持久化
    save 60 10000 #表示每60秒至少有10000个key改变,就触发一次持久
    save “”  #这样可以禁用rdb持久化
    stop-writes-on-bgsave-error yes #rdb持久化写入磁盘避免不了会出现失败的情况,默认一旦出现失败,redis会马上停止写操作。如果你觉得无所谓,那就可以使用该选项关闭这个功能。
    rdbcompression yes #是否要压缩
    rdbchecksum yes #是否进行数据校验
    dbfilename dump.rdb #定义快照文件的名字
    dir ./  #定义快照文件储存路劲
    
    Redis安全相关配置
    
    requirepass aminglinux   #设置redis-server的密码
    rename-command CONFIG  aminglinux.config   #将CONFIG命令更名为aminglinux.config,这样可以避免误操作,但如果使用了AOF持久化,建议不要启用该功能
    rename-command CONFIG “”    #也可以后面定义为空,这样就禁掉了该CONFIG命令
    
    Redis限制相关配置
    
    maxclients 10000  #限制最大客户端连接数
    maxmemory <bytes>  #设定最大内存使用数,单位是byte
    maxmmory-policy volatile-lru #指定内存移除规则
    maxmemory-samples 3 #LRU算法和最小TTL算法都并非是精确的算法,而是估算值。所以你可以设置样本的大小。假如redis默认会检查三个key并选择其中LRU的那个,那么你可以改变这个key样本的数量。
    
    Redis AOF持久化相关配置
    
    appendonly no  #如果是no,则开启aof持久化
    appendfilename “appendonly.aof” # 指定aof文件名字
    appendfsync everysec #指定fsync()调用模式,有三种no(不调用fsync),always(每次写都会调用fsync),everysec(每秒钟调用一次fsync)。第一种最快,第二种数据最安全,但性能会差一些,第三种为这种方案,默认为第三种。
    no-appendfsync-on-rewrite no  # 设置yes,可避免当写入量非常大时的磁盘io阻塞
    auto-aof-rewrite-percentage 10 #规定什么情况下会触发aof重写。该值为一个比例,10表示当aof文件增幅达到10%时则会触发重写机制。
    uto-aof-rewrite-min-size 64mb #重写会有一个条件,就是不能低于64Mb
    
    Redis慢日志相关配置
    
    针对慢日志,你可以设置两个参数,一个是执行时长,单位是微秒,另一个是慢日志的长度。当一个新的命令被写入日志时,最老的一条会从命令日志队列中被移除。
    slowlog-log-slower-than 10000 #慢于10000ms则记录日志
    slowlog-max-len 128  #日志长度
    配置文件说明

    5.制作启动脚本,并设置为开机启动

    cp  /usr/local/src/redis-2.8.21/utils/redis_init_script     /etc/init.d/redis

    REDISPORT=6379
    EXEC=/usr/local/redis/bin/redis-server
    CLIEXEC=/usr/local/redis/bin/redis-cli

    PIDFILE=/usr/local/redis/var/run/redis_${REDISPORT}.pid
    CONF="/usr/local/redis/etc/redis.conf"

    chmod 755 /etc/init.d/redis  

    chkconfig --add redis            

    chkconfig redis on

    6.创建redis用户

    useradd -s /sibn/nologin redis

    7.创建其他需要的目录

    mkdir /usr/local/redis/var
    chmod 777 /usr/local/redis/var

    /etc/init.d/redis start  -----启动redis服务

    两台服务器: master (192.168.31.105) 和 slave (192.168.31.112)
    分别按照之前介绍的步骤安装好redis并启动
    master 配置文件不用动
    slave 配置文件上加一行   
    slaveof  192.168.31.105 6379
    masterauth  passwd  //如果主上设置了密码,要加这行
    分别启动master和slave
    
    测试redis主从
    
    master上:
        redis-cli
    >set k1 v1
    >get k1
    "v1"
    slave上:
        redis-cli
    >get k1
    "v1" 
    
    Redis主从其他相关配置
    
    slave-read-only yes  //让从只读
    repl-ping-slave-period 10  //设置slave向master发起ping的频率,每10s发起一次repl-timeout 60 //设置slave ping不通master多少s后就超时
    repl-disable-tcp-nodelay no //是否开启tcp_nodelay,开启后将会使用更少的带宽,但会有延迟,所以建议关闭
    repl-backlog-size 1mb //同步队列的长度,backuplog是master的一个缓冲区,主从断开后,master会先把数据写到缓冲区,slave再次连接会从缓冲区中同步数据
    repl-backlog-ttl 3600  //主从断开后,缓冲区的有效期,默认1小时
    slave-priority 100 //多个slave是可以设置优先级的,数值越小优先级越高,应用于集群中,支持slave切换为master,优先级最高的才会切换
    min-slaves-to-write 3  //和下面的一起使用,它的意思是master发现有超过3个slave的延迟高于10s,那么master就会暂时停止写操作。这两个数值任何一个为0,则关闭该功能,默认第一数值是0。
    min-slaves-max-lag 10
    redis主从配置
  • 相关阅读:
    .NET数据库编程求索之路11.一些思考
    VMware Workstation安装使用手记
    VS2010无法保存项目文件(.csprj)的问题解决方法
    【转】VC++/MFC(VC6)开发技术精品学习资料下载汇总 (2011.3.10更新)
    .NET数据库编程求索之路9.使用EF实现
    oracle11g新特性:闪回数据归档(Flashback Data Archive)#ocp试验#
    ORACLE口令文件验证与操作系统验证|转|
    闪回flashback#ocp试验#
    expdp数据泵导出操作
    手动模式下热备份的不完全恢复#OCP试验#
  • 原文地址:https://www.cnblogs.com/sunhao96/p/7885933.html
Copyright © 2011-2022 走看看