首页 > 数据库 >redis订阅者和进阶

redis订阅者和进阶

时间:2024-09-09 11:06:11浏览次数:9  
标签:订阅 127.0 OK 进阶 0.1 redis 6380

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的切换,需要更改配置文件使得之后启动也生效。

标签:订阅,127.0,OK,进阶,0.1,redis,6380
From: https://www.cnblogs.com/lmlsh/p/18361349

相关文章

  • redis主从备份
    redis主从备份主从复制介绍redis主从复制原理:从服务器向主服务器发送SYNC命令。接到SYNC命令的主服务器会调用BGSAVE命令,创建一个RDB文件,并使用缓冲区记录接下来执行的所有写命令。当主服务器执行完BGSAVE命令时,它会向从服务器发送RDB文件,而从服务器则会接收并载......
  • redis集群
    redis集群配置为什么要使用集群redis官方生成可以达到10万/每秒,每秒执行10万条命令,假如业务需要每秒100万的命令执行呢。该怎么处理呢一台服务器内存正常是16~256G,假如你的业务需要500G内存,又该如何解决集群的核心思想是将数据分片(sharding)储存于多个redis实例当中。集群......
  • C++ 模板进阶知识——stdenable_if
    目录C++模板进阶知识——std::enable_if1.简介和背景基本语法使用场景2.`std::enable_if`的基本用法示例:限制函数模板只接受整数类型3.SFINAE和std::enable_if示例:使用SFINAE进行函数重载SFINAE的优点应用场景4.在类模板中使用std::enable_if示例:根据类型......
  • 【408DS算法题】038进阶-图深度优先遍历DFS
    Index题目分析实现总结题目设计函数实现对图的深度优先遍历。分析实现类似于图的BFS的分析思路,图的DFS和二叉树的DFS思路相同,但需要额外考虑结点是否已经被访问过。此处同样用布尔数组visited来记录每个结点的访问情况,对于邻接矩阵存储方式的图的DFS,依照先序遍......
  • Redis 分布式锁:实现与应用
    在分布式系统中,为了保证数据的一致性和并发控制,常常需要使用分布式锁。Redis作为一种高性能的内存数据库,提供了一些特性可以方便地实现分布式锁。今天,我们就来探讨一下如何用Redis实现分布式锁。一、分布式锁的基本概念分布式锁是一种用于在分布式系统中协调多个进程或线程对......
  • [MySQL表的增删改查-进阶]
    ......
  • Redis 集群的实现方案全解析
    在当今大数据时代,Redis作为一款高性能的内存数据库,被广泛应用于各种场景。然而,随着数据量的不断增长和业务需求的日益复杂,单节点的Redis往往无法满足需求,这时就需要使用Redis集群来实现数据的分布式存储和高可用性。今天,我们就来一起探讨一下Redis集群的实现方案有哪些。一......
  • Redis 实现延迟队列的巧妙方法
    今天我们来探索一下Redis是如何巧妙地实现延迟队列的,这可是在很多场景下都非常实用的技术哦!一、什么是延迟队列?延迟队列,简单来说,就是可以让消息在指定的延迟时间之后才被消费的队列。想象一下,你在网上订了一份外卖,商家并不会立即配送,而是根据你选择的送达时间,延迟一段时......
  • Go进阶概览 -【2.2 结构体与方法集的实现】
    2.2结构体与方法集的实现结构体是我们在实际运用中使用比较多的一个概念,Go语言封装的比较简单,我们在使用的时候不需要关注太多的东西。但是如果对于性能有要求、需要开发框架时,我们还是需要对结构体进行一个深入的了解。本节我们将针对结构体的内存布局、接口实现及面向......
  • Go进阶概览 -【2.4 切片的结构与内存管理】
    2.4切片的结构与内存管理切片是我们日常使用比较多的一个结构,深入的了解它的结构对于我们提高程序性能也有比较大的帮助。本节我们将针对切片底层结构、扩容机制、底层数组进行讲解。本节代码存放目录为lesson4切片底层结构我们在使用的时候发现切片与数组很相似,这是......