随笔 - 22  文章 - 0  评论 - 0  阅读 - 963

redis订阅者和进阶

Redis进阶

redis订阅者模式

简介

redis存在订阅者模式。就像是一个广播系统。存在三种角色:订阅者、发布者、频道。

在redis当中,它们表示为subscriber(订阅者)、publisher(发布者)、channel(频道)

其中的行为大抵是:订阅者订阅频道--> 发布者针对于特定频道发布信息 --> 特定订阅者收到消息。

img

代码演示

  1. 订阅频道

    # 1终端订阅python和http的channel
    SUBSCRIBE python http
    # 2终端订阅python的channel
    SUBSCRIBE python
    # 忘了命令可以按tab补全
    
    

    订阅之后会显示频道情况然后处于接收状态:

    • 终端1
      img
    • 终端2
      img
  2. 指定频道发布信息

    # 指定python和http频道分别发布信息。
    PUBLISH python hhhhnsz
    PUBLISH http nbsz
    # 注意每次发布完成后会显示收到订阅者个数
    

    img

  3. 查看订阅消息
    接下来进入订阅之后的终端1、2查看信息。
    终端1:
    img
    终端2:
    img

redis数据持久化

为什么要有数据持久化

当进程消失,或者机器故障的时候,内存中的数据会被释放。如果没有持久化,数据就会消失。

分类

redis支持两种数据持久化,分别是:AOF和RDB

RDB持久化操作

RDB持久化,即将内存当中的数据保存为一个经过压缩的RDB文件。

可以用于使用其将redis文件恢复。

它有两种执行方式:手动执行生成和保存RDB文件。配置redis.conf定时执行。

操作和配置详情

# redis.conf 配置详情

# rdb配置参数(配置之后可以读取和储存于该位置)(配置后自动开启)
dir /opt/redisdb/
dbfilename dump.rdb

# 自动保存参数
save 900 1 # 900秒一个修改类操作
save 300 10 # 300秒10个操作
save 60 10000 # 60秒10000个操作

rdb持久化实践

  1. 未配置
    # 开启redis之后设置两个key值,设置完成
    [root@localhost ~]# redis-cli -p 6380
    127.0.0.1:6380> auth 123123456
    OK
    127.0.0.1:6380> keys *
    (empty list or set)
    127.0.0.1:6380> SET name longsihua
    OK
    127.0.0.1:6380> set age 20
    OK
    127.0.0.1:6380> keys *
    1) "age"
    2) "name"
    
    # 接着将redis的进程kill
    [root@localhost redis-4.0.10]# ps -ef | grep redis
    root      16502      1  0 23:40 ?        00:00:00 redis-server 127.0.0.1:6380
    root      16514  14411  0 23:40 pts/3    00:00:00 redis-cli -p 6380
    root      16556  14341  0 23:44 pts/2    00:00:00 grep --color=auto redis
    [root@localhost redis-4.0.10]# kill -9 16502

    # 再次开启redis,key全部消失
    [root@localhost ~]# redis-cli -p 6380
    127.0.0.1:6380> keys *
    (error) NOAUTH Authentication required.
    127.0.0.1:6380> auth 123123456
    OK
    127.0.0.1:6380> keys *
    (empty list or set)

  1. 配置后
    # 与上方相同。在设置完key之后执行save命令
    [root@localhost ~]# redis-cli -p 6380
    127.0.0.1:6380> AUTH 123123456
    OK
    127.0.0.1:6380> KEYS *
    (empty list or set)
    127.0.0.1:6380> set lll long
    OK
    127.0.0.1:6380> set age 1212
    OK
    127.0.0.1:6380> KEYS *
    1) "age"
    2) "lll"
    127.0.0.1:6380> save
    OK

    # 杀死进程之后再通过原来的配置文件启动
    # 可以发现key值还存在
    [root@localhost ~]# redis-cli -p 6380
    127.0.0.1:6380> AUTH 123123456
    OK
    127.0.0.1:6380> KEYS *
    1) "lll"
    2) "age"

aof持久化

记录服务器执行的所有变更操作命令。再启动时可以重新执行回复

AOF文件的命令全部以redis协议的格式保存。追加在文件结尾

优点:最大程度保证数据不丢失
缺点: 日志文件大

配置参数

    # 设置两个参数即可立即启动
    # redis.conf
    appendonly yes
    appendfsync  # always-总是修改类的操作 # everysec-每秒做一次持久化 # no-依赖于系统自带的缓存大小机制

实践

由于内容几乎与rdb持久化操作一致。这里展示一下aof生成的appendonly文件
img

附加: 通过config set命令可以临时修改配置文件,可以用于切换持久化模式。

比如说rdb切换为aof:

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

注意,这个只是临时进行aof的切换,需要更改配置文件使得之后启动也生效。

posted on   longsihua2003  阅读(17)  评论(0编辑  收藏  举报
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示