zoukankan      html  css  js  c++  java
  • linux的redis的安装和使用

    yum安装redis

    1.yum安装

    #前提得配置好阿里云yum源,epel源
    #查看是否有redis包
    yum list redis
    #安装redis
    yum install redis -y
    #安装好,启动redis
    systemctl start redis

    2.检测redis是否工作

    redis-cli    #redis 客户端工具
    #进入交互式环境后,执行ping,返回pong表示安装成功
    127.0.0.1:6379> ping
    PONG

    源码安装redis,编译安装

    编译安装的优势是:

    • 编译安装时可以指定扩展的module(模块),php、apache、nginx都是一样有很多第三方扩展模块,如mysql,编译安装时候,如果需要就定制存储引擎(innodb,还是MyIASM)
    • 编译安装可以统一安装路径,linux软件约定安装目录在/opt/下面
    • 软件仓库版本一般比较低,编译源码安装可以根据需求,安装最新的版本
    1.下载redis源码
    wget http://download.redis.io/releases/redis-4.0.10.tar.gz
    2.解压缩
    tar -zxf redis-4.0.10.tar.gz
    3.切换redis源码目录
    cd redis-4.0.10.tar.gz
    4.编译源文件
    make
    5.编译好后,src/目录下有编译好的redis指令
    6.make install 安装到指定目录,默认在/usr/local/bin

    redis可执行文件

    ./redis-benchmark //用于进行redis性能测试的工具
    ./redis-check-dump //用于修复出问题的dump.rdb文件
    ./redis-cli //redis的客户端
    ./redis-server //redis的服务端
    ./redis-check-aof //用于修复出问题的AOF文件
    ./redis-sentinel //用于集群管理

    启动redis服务端

    启动redis非常简单,直接./redis-server就可以启动服务端了,还可以用下面的方法指定要加载的配置文件:
    ./redis-server ../redis.conf
    默认情况下,redis-server会以非daemon的方式来运行,且默认服务端口为6379。

    使用redis客户端

    #执行客户端命令即可进入
    ./redis-cli  
    #测试是否连接上redis
    127.0.0.1:6379 > ping
    返回pong代表连接上了
    
    //用set来设置key、value
    127.0.0.1:6379 > set name "chaoge"
    OK
    //get获取name的值
    127.0.0.1:6379 > get name
    "chaoge"

    通过新的端口和密码登录redis

    redis.conf设置

    protected-mode yes   #打开保护模式
    port 6380  #更改默认启动端口
    requirepass xxxxxx   #设置redis启动密码,xxxx是自定义的密码

    启动redis服务端

    redis-server /opt/redis-4.0.10/redis.conf &     #指定配置文件启动redis,且后台启动

    使用密码登录redis,使用6380端口

    方法1,使用这个

    [root@oldboy_python ~ 09:48:41]#redis-cli -p 6380
    127.0.0.1:6380> auth xxxx
    OK

    方法2,此方案不安全,容易暴露密码

    [root@oldboy_python ~ 09:49:46]#redis-cli -p 6380 -a xxxx
    Warning: Using a password with '-a' option on the command line interface may not be safe.
    127.0.0.1:6380> ping
    PONG

    补充

    检查redis是否设置了密码

    127.0.0.1:6380> CONFIG get requirepass
    1) "requirepass"
    2) "xxxxxx"

    如果没有,也可以给redis设置密码(命令方式)

    CONFIG set requirepass "xxxxxx"

    发布/订阅 实验

    发布订阅的命令

    PUBLISH channel msg
        将信息 message 发送到指定的频道 channel
    SUBSCRIBE channel [channel ...] 订阅频道,可以同时订阅多个频道
    UNSUBSCRIBE [channel ...] 取消订阅指定的频道, 如果不指定频道,则会取消订阅所有频道 PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道,每个模式以 * 作为匹配符,比如 it* 匹配所 有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有 以 news. 开头的频道( news.it 、 news.global.today 等等),诸如此类 PUNSUBSCRIBE [pattern [pattern ...]] 退订指定的规则, 如果没有参数则会退订所有规则 PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态 注意:使用发布订阅模式实现的消息队列,当有客户端订阅channel后只能收到后续发布到该频道的消息,之前发送的不会缓存,必须Provider和Consumer同时在线。

    发布订阅:

    窗口1,启动两个redis-cli窗口,均订阅diantai 频道(channel)

    窗口2,启动发布者向频道 diantai发送消息

    [root@web02 ~]# redis-cli
    127.0.0.1:6379> PUBLISH diantai 'jinyewugenglaiwojia'
    (integer) 2

    窗口3,查看订阅者的消息状态

    订阅一个或者多个符合模式的频道

    窗口1,启动两个redis-cli窗口,均订阅 wang*频道(channel)

    127.0.0.1:6379> PSUBSCRIBE wang*
    Reading messages... (press Ctrl-C to quit)
    1) "psubscribe"
    2) "wang*"
    3) (integer) 1

    1) "pmessage" 2) "wang*" 3) "wangbaoqiang" 4) "jintian zhennanshou "

    窗口2,启动redis-cli窗口,均订阅wang*频道

    127.0.0.1:6379> PSUBSCRIBE wang*
    Reading messages... (press Ctrl-C to quit)
    1) "psubscribe"
    2) "wang*"
    3) (integer) 1
    
    
    
    1) "pmessage"
    2) "wang*"
    3) "wangbaoqiang"
    4) "jintian zhennanshou "

    窗口3,发布者消息

    [root@web02 ~]# redis-cli
    127.0.0.1:6379> PUBLISH wangbaoqiang "jintian zhennanshou "
    (integer) 2

    redis持久化

    Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失。

    RDB持久化

    redis提供了RDB持久化的功能,这个功能可以将redis在内存中的的状态保存到硬盘中,它可以手动执行。

    也可以再redis.conf中配置,定期执行

    RDB持久化产生的RDB文件是一个经过压缩二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态

    RDB(持久化)
    内存数据保存到磁盘
    在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)
    优点:速度快,适合做备份,主从复制就是基于RDB持久化功能实现
    rdb通过再redis中使用save命令触发 rdb
    
    
    rdb配置参数:
    
    dir /data/6379/
    dbfilename  dbmp.rdb
    
    每过900秒 有1个操作就进行持久化
    
    save 900秒  1个修改类的操作
    save 300秒  10个操作
    save 60秒  10000个操作
    
    save  900 1
    save 300 10
    save 60  1000

     redis持久化之RDB实践

    1.启动redis服务端,准备配置文件

    daemonize yes
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379              #定义持久化文件存储位置
    dbfilename  dbmp.rdb        #rdb持久化文件
    bind 10.0.0.10  127.0.0.1    #redis绑定地址
    requirepass redhat            #redis登录密码
    save 900 1                    #rdb机制 每900秒 有1个修改记录
    save 300 10                    #每300秒        10个修改记录
    save 60  10000                #每60秒内        10000修改记录

    2.启动redis服务端

    3.登录redis设置一个key

    redis-cli -a redhat

    4.此时检查目录,/data/6379底下没有dbmp.rdb文件

    5.通过save触发持久化,将数据写入RDB文件

    127.0.0.1:6379> set age 18
    OK
    127.0.0.1:6379> save
    OK

    redis持久化之AOF

    AOF(append-only log file)
    记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集
    AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。
    优点:最大程序保证数据不丢
    缺点:日志记录非常大

    redis-client   写入数据  >  redis-server   同步命令   >  AOF文件

    配置参数

    AOF持久化配置,两条参数
    
    appendonly yes
    appendfsync  always    总是修改类的操作
                 everysec   每秒做一次持久化
                 no     依赖于系统自带的缓存大小机制

    1.准备aof配置文件 redis.conf

    daemonize yes
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379
    dbfilename  dbmp.rdb
    requirepass redhat
    save 900 1
    save 300 10
    save 60  10000
    appendonly yes
    appendfsync everysec

    2.启动redis服务

    redis-server /etc/redis.conf

    3.检查redis数据目录/data/6379/是否产生了aof文件

    [root@web02 6379]# ls
    appendonly.aof  dbmp.rdb  redis.log

    4.登录redis-cli,写入数据,实时检查aof文件信息

    [root@web02 6379]# tail -f appendonly.aof

    5.设置新key,检查aof信息,然后关闭redis,检查数据是否持久化

    redis-cli -a redhat shutdown
    
    redis-server /etc/redis.conf
    
    redis-cli -a redhat

    redis不重启之rdb数据切换到aof数据

    redis.conf服务端配置文件

    daemonize yes
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379
    dbfilename  dbmp.rdb
    save 900 1                    #rdb机制 每900秒 有1个修改记录
    save 300 10                    #每300秒        10个修改记录
    save 60  10000                #每60秒内        10000修改记录

    启动redis服务端

    redis-server redis.conf

    登录redis-cli插入数据,手动持久化

    127.0.0.1:6379> set name chaoge
    OK
    127.0.0.1:6379> set age 18
    OK
    127.0.0.1:6379> set addr shahe
    OK
    127.0.0.1:6379> save
    OK

    检查RDB文件

    [root@pyyuc /data 22:34:16]#ls 6379/
    dbmp.rdb  redis.log

    备份这个rdb文件,保证数据安全

    [root@pyyuc /data/6379 22:35:38]#cp dbmp.rdb /opt/

    执行命令,开启AOF持久化

    127.0.0.1:6379> CONFIG set appendonly yes   #开启AOF功能
    OK
    127.0.0.1:6379> CONFIG SET save ""  #关闭RDB功能
    OK

    确保数据库的key数量正确

    127.0.0.1:6379> keys *
    1) "addr"
    2) "age"
    3) "name"

    确保插入新的key,AOF文件会记录

    127.0.0.1:6379> set title golang
    OK

    参考:https://www.cnblogs.com/pyyu/p/9843950.html

    总结:

    1.在linux安装redis
    通过源码编译安装redis
    1.下载源码包
        wget http://download.redis.io/releases/redis-4.0.10.tar.gz
    2.解压缩redis
        tar -zxf redis-4.0.10.tar.gz 
    3.进入redis源码,直接可以编译且安装
        cd redis-4.0.10
        make && make install 
        
    4.可以指定配置文件启动redis
        vim /opt/redis-4.0.10/redis.conf 
        更改  仅修改: daemonize yes 
        启动   redis-server redis.conf 
        使用客户端    redis-cli
          ping    出现  PONG   成功
        
        
        vim /opt/redis-4.0.10/redis.conf
        1.更改bind参数,让redis可以远程访问
            bind 0.0.0.0
        2.更改redis的默认端口
            port 6380
        3.使用redis的密码进行登录
            requirepass 登录redis的密码
        4.指定配置文件启动
            redis-server redis.conf 
            
    5.通过新的端口和密码登录redis
    redis-cli -p 6380
    登录后
    auth 密码
    keys *   查看数据
    
    redis还支持交互式的参数,登录数据库
    redis-cli -p 6380  -a  redis的密码  (这个不太安全)
    
    6.通过登录redis,用命令查看redis的密码
    config set  requirepass  新的密码         #设置新密码
    config get  requirepass              #获取当前的密码
    
    
    过滤出文件的空白行和注释行
    grep -v "^#"  redis.conf |   grep  -v "^$"
    redis发布订阅
    
    三个角色,提供的redis命令
    1.发布者
        publish  频道  消息        给频道发消息
    2.订阅者
        SUBSCRIBE  频道         订阅频道 
        PSUBSCRIBE 频道*          支持模糊匹配的订阅
    3.频道
        channel  频道名 自定义
        
    redis持久化之RDB
    1.在配置文件中添加参数,开启rdb功能
    进入redis工作目录
    [root@localhost redis-4.0.10]# vim redis.conf
    redis.conf 写入
        port 6379
        daemonize yes    后台运行
        logfile /data/6379/redis.log    日志文件
        dir /data/6379      制定数据文件
        dbfilename   s15.rdb    
        save 900 1                    #rdb机制 每900秒 有1个修>改记录
        save 300 10                    #每300秒        10个修改记录
        save 60  10000                #每60秒内        10000修>改记录
    2.开启redis服务端,测试rdb功能
    redis-server redis.conf 
    
    
    redis持久化之aof
    1.开启aof功能,在redis.conf中添加参数
        port 6379
        daemonize yes
        logfile /data/6379/redis.log
        dir /data/6379
        appendonly yes
        appendfsync everysec
    2.启动redis服务端,指定aof功能,测试持久化数据 
    
    
    redis不重启之rdb数据切换到aof数据
    1.准备rdb的redis服务端
        redis-server   s15-redis.conf (注明这是在rdb持久化模式下)
    
    2.切换rdb到aof
    redis-cli  登录redis,然后通过命令,激活aof持久化
    127.0.0.1:6379>  CONFIG set appendonly yes                #用命令激活aof持久化(临时生效,注意写入到配置文件)
    OK
    127.0.0.1:6379> 
    127.0.0.1:6379> 
    127.0.0.1:6379>  CONFIG SET save ""             #关闭rdb持久化
    
    2.5 将aof操作,写入到配置文件,永久生效,下次重启后生效
        port 6379
        daemonize yes 
        logfile /data/6379/redis.log
        dir /data/6379   
    
        #dbfilename   s15.rdb
        #save 900 1  
        #save 300 10 
        #save 60  10000 
        appendonly yes
        appendfsync everysec
    
    3.测试aof数据持久化 ,杀掉redis,重新启动
    kill 
    redis-server s15-redis.conf 
    
    4.写入数据,检查aof文件
    
    redis的主从同步
    
    1.检查redis数据库信息,主从状态的命令
    redis-cli  -p 6379  info  检查数据库信息
    redis-cli  -p 6379  info  replication  检查数据库主从信息
      
    
    1.准备三个redis配置文件,通过端口的区分,启动三个redis数据库实例,然后配置主从复制
    redis-6379.conf 
        port 6379
        daemonize yes
        pidfile /data/6379/redis.pid
        loglevel notice
        logfile "/data/6379/redis.log"
        dbfilename dump.rdb
        dir /data/6379
        
    redis-6380.conf 
    #通过命令快速生成配置文件
        sed "s/6379/6380/g" redis-6379.conf > redis-6380.conf 
        在redis-6380.conf中写入
        slaveof  127.0.0.1  6379   #指明主库的身份ip 和端口
    
    redis-6381.conf 
    #通过命令快速生成配置文件
        sed "s/6379/6381/g" redis-6379.conf > redis-6381.conf 
        在redis-6381.conf中写入
        slaveof  127.0.0.1  6379
    
    2.启动三个数据库实例,检测redis主从同步方案
    
    
    3.redis主从赋值,故障手动切换,
        1.杀死6379的主库实例
        kill 主库
        
        2.手动切换主从身份
            1.登录 redis-6380 ,通过命令,去掉自己的从库身份,等待连接
                slaveof no one  
            2.登录redis-6381 ,通过命令,生成新的主任
                slaveof 127.0.0.1 6380  
        
        3.测试新的主从数据同步
        
        
    redis哨兵
    1.什么是哨兵呢?保护redis主从集群,正常运转,当主库挂掉之后,自动的在从库中挑选新的主库,进行同步
    
    2.redis哨兵的安装配置
        1. 准备三个redis数据库实例(三个配置文件,通过端口区分)
            [root@localhost redis-4.0.10]# redis-server redis-6379.conf 
            [root@localhost redis-4.0.10]# redis-server redis-6380.conf 
            [root@localhost redis-4.0.10]# redis-server redis-6381.conf 
        2.准备三个哨兵,准备三个哨兵的配置文件(仅仅是端口的不同26379,26380,26381)
            -rw-r--r--  1 root root    227 Jan  2 18:44 redis-sentinel-26379.conf
        
            touch redis-sentinel-26379.conf
            vim redis-sentinel-26379.conf
            写入以下
            port 26379  
            dir /var/redis/data/
            logfile "26379.log"
    
            sentinel monitor s15master 127.0.0.1 6379 2
    
            sentinel down-after-milliseconds s15master 30000
    
            sentinel parallel-syncs s15master 1
    
            sentinel failover-timeout s15master 180000
            daemonize yes
    
    
        -rw-r--r--  1 root root    227 Jan  2 18:45 redis-sentinel-26380.conf
            快速生成配置文件
            sed "s/26379/26380/g" redis-sentinel-26379.conf >  redis-sentinel-26380.conf 
        -rw-r--r--  1 root root    227 Jan  2 18:46 redis-sentinel-26381.conf
            sed "s/26379/26381/g" redis-sentinel-26379.conf >  redis-sentinel-26381.conf 
    
        3.添加后台运行参数,使得三个哨兵进程,后台运行
            [root@localhost redis-4.0.10]# echo "daemonize yes" >> redis-sentinel-26379.conf 
            [root@localhost redis-4.0.10]# echo "daemonize yes" >> redis-sentinel-26380.conf 
            [root@localhost redis-4.0.10]# echo "daemonize yes" >> redis-sentinel-26381.conf 
    
        4.启动三个哨兵
              redis-sentinel redis-sentinel-26379.conf 
              redis-sentinel redis-sentinel-26380.conf 
              redis-sentinel redis-sentinel-26381.conf 
            
        5.检查哨兵的通信状态
        redis-cli -p 26379  info sentinel 
        查看结果如下之后,表示哨兵正常
            [root@localhost redis-4.0.10]# redis-cli -p 26379  info sentinel 
            # Sentinel
            sentinel_masters:1
            sentinel_tilt:0
            sentinel_running_scripts:0
            sentinel_scripts_queue_length:0
            sentinel_simulate_failure_flags:0
            master0:name=s15master,status=ok,address=127.0.0.1:6381,slaves=2,sentinels=3
    
        6.杀死一个redis主库,6379节点,等待30s以内,检查6380和6381的节点状态
        kill 6379主节点
        redis-cli -p 6380 info replication 
        redis-cli -p 6381 info replication 
        如果切换的主从身份之后,(原理就是更改redis的配置文件,切换主从身份)
        
        7.恢复6379节点的数据库,查看是否将6379添加为新的slave身份
        
     
    redis-cluster安装配置
    1.准备6个redis数据库实例,准备6个配置文件redis-{7000....7005}配置文件
    
        [root@localhost redis-4.0.10]# mkdir s15rediscluster
        cd s15rediscluster
        touch redis-7000.conf
        vim redis-7000.conf
        写入以下
            port 7000
            daemonize yes
            dir "/opt/redis/data"
            logfile "7000.log"
            dbfilename "dump-7000.rdb"
            cluster-enabled yes
            cluster-config-file nodes-7000.conf
        创建六个
            [root@localhost s15rediscluster]# sed "s/7000/7001/g" redis-7000.conf >redis-7001.conf
            [root@localhost s15rediscluster]# sed "s/7000/7002/g" redis-7000.conf >redis-7002.conf
            [root@localhost s15rediscluster]# sed "s/7000/7003/g" redis-7000.conf >redis-7003.conf
            [root@localhost s15rediscluster]# sed "s/7000/7004/g" redis-7000.conf >redis-7004.conf
            [root@localhost s15rediscluster]# sed "s/7000/7005/g" redis-7000.conf >redis-7005.conf
    
    2.启动6个redis数据库实例
        [root@localhost s15rediscluster]# redis-server redis-7000.conf 
        [root@localhost s15rediscluster]# redis-server redis-7001.conf 
        [root@localhost s15rediscluster]# redis-server redis-7002.conf 
        [root@localhost s15rediscluster]# redis-server redis-7003.conf 
        [root@localhost s15rediscluster]# redis-server redis-7004.conf 
        [root@localhost s15rediscluster]# redis-server redis-7005.conf 
    
    3.配置ruby语言环境,脚本一键启动redis-cluster 
        1.下载ruby语言的源码包,编译安装
            wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
        2.解压缩   tar -zxvf ruby-2.3.1.tar.gz
            ./configure --prefix=/opt/ruby/       释放makefile
            make && make install     编译且安装
        3.下载安装ruby操作redis的模块包
            cd  /opt 
            wget http://rubygems.org/downloads/redis-3.3.0.gem
            
            /opt/ruby/bin/gem install -l redis-3.3.0.gem
        4.配置ruby的环境变量
        echo $PATH
        
        vim /etc/profile
        写入最底行
        PATH=$PATH:/opt/ruby/bin/
        读取文件
        source /etc/profile 
        
        5.通过ruby的包管理工具去安装redis包,安装后会生成一个redis-trib.rb这个命令
        一键创建redis-cluster 其实就是分配主从关系 以及 槽位分配 slot槽位分配
        /opt/redis-4.0.10/src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
        
        6.检查节点主从状态
        redis-cli -p 7000  info replication 
        
        7.向redis集群写入数据,查看数据流向
        redis-cli -p 7000    #这里会将key自动的重定向,放到某一个节点的slot槽位中
        set  name  s15 
        set  addr shahe 
  • 相关阅读:
    线性时间选择
    ios理解 Pro Mutlithreading and Memory Management for iOS and OS X with ARC, Grand Central Dispatch, and Blocks
    ef
    c# 采集 获取网页数据内容 一会超时的问题
    entity4.1
    逐渐约束
    entity4.1
    ObjectContext.Refresh
    使用内存表
    MVCdropdownlist
  • 原文地址:https://www.cnblogs.com/chenxi67/p/10217168.html
Copyright © 2011-2022 走看看