linux的redis的安装和使用 yum安装redis 发布/订阅 实验 发布订阅: 订阅一个或者多个符合模式的频道 redis持久化  redis持久化之RDB实践 redis持久化之AOF 备份这个rdb文件,保证数据安全 执行命令,开启AOF持久化 确保数据库的key数量正确 确保插入新的key,AOF文件会记录

linux的redis的安装和使用
yum安装redis
发布/订阅 实验
发布订阅:
订阅一个或者多个符合模式的频道
redis持久化
 redis持久化之RDB实践
redis持久化之AOF
备份这个rdb文件,保证数据安全
执行命令,开启AOF持久化
确保数据库的key数量正确
确保插入新的key,AOF文件会记录

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)

linux的redis的安装和使用
yum安装redis
发布/订阅 实验
发布订阅:
订阅一个或者多个符合模式的频道
redis持久化
 redis持久化之RDB实践
redis持久化之AOF
备份这个rdb文件,保证数据安全
执行命令,开启AOF持久化
确保数据库的key数量正确
确保插入新的key,AOF文件会记录

窗口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