美文网首页
Redis学习笔记2

Redis学习笔记2

作者: 这货不是王马勺 | 来源:发表于2021-08-20 15:46 被阅读0次

    P0
    7. 发布订阅

    发布订阅
    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:
    127.0.0.1:6379> SUBSCRIBE baodi
    窗口2:
    127.0.0.1:6379> PUBLISH baodi "jin tian zhen kaixin!"
    订阅多频道:
    窗口1:
    127.0.0.1:6379> PSUBSCRIBE wang*
    窗口2:
    127.0.0.1:6379> PUBLISH wangbaoqiang "jintian zhennanshou "

    8.Redis事务
    redis的事务是基于队列实现的。将同一事务的语句放到一个队列里,并没有真正执行,直到exec才执行,属于弱事务
    mysql的事务是基于事务日志和锁机制实现的。
    redis是乐观锁机制。

    开启事务功能时(multi)
    multi
    command1
    command2
    command3
    command4
    exec
    discard

    4条语句作为一个组,并没有真正执行,而是被放入同一队列中。
    如果,这时执行discard,会直接丢弃队列中所有的命令,而不是做回滚。
    exec
    当执行exec时,对列中所有操作,要么全成功要么全失败

    127.0.0.1:6379> set a b
    OK
    127.0.0.1:6379> MULTI
    OK
    127.0.0.1:6379> set a b
    QUEUED
    127.0.0.1:6379> set c d
    QUEUED
    127.0.0.1:6379> exec

    1. OK
    2. OK

    9. redis乐观锁实现(模拟买票)
    发布一张票
    set ticket 1
    窗口1:
    watch ticket
    multi
    set ticket 0 1---->0
    窗口2:
    multi
    set ticket 0
    exec
    窗口1:
    exec

    10.服务器管理命令
    Info
    Client list
    Client kill ip:port
    config get *
    CONFIG RESETSTAT 重置统计
    CONFIG GET/SET 动态修改
    Dbsize
    FLUSHALL 清空所有数据
    select 1
    FLUSHDB 清空当前库
    MONITOR 监控实时指令
    SHUTDOWN 关闭服务器

    关闭数据库:
    redis-cli -a root shutdown

    11.redis主从(Master-Replicaset)基础
    11.1 原理

    1. 副本库通过slaveof 10.0.0.51 6379命令,连接主库,并发送SYNC给主库
    2. 主库收到SYNC,会立即触发BGSAVE,后台保存RDB,发送给副本库
    3. 副本库接收后会应用RDB快照
    4. 主库会陆续将中间产生的新的操作,保存并发送给副本库
    5. 到此,我们主复制集就正常工作了
    6. 再此以后,主库只要发生新的操作,都会以命令传播的形式自动发送给副本库.
    7. 所有复制相关信息,从info信息中都可以查到.即使重启任何节点,他的主从关系依然都在.
    8. 如果发生主从关系断开时,从库数据没有任何损坏,在下次重连之后,从库发送PSYNC给主库
    9. 主库只会将从库缺失部分的数据同步给从库应用,达到快速恢复主从的目的

    11.2 主从数据一致性保证
    min-slaves-to-write 1
    min-slaves-max-lag 3

    11.3主库是否要开启持久化?
    如果不开有可能会导致,主库重启操作,造成所有主从数据丢失!

    12.主从复制实现
    1、环境:
    准备两个或两个以上redis实例

    mkdir /data/638{0..2}

    配置文件示例:
    cat >> /data/6380/redis.conf <<EOF
    port 6380
    daemonize yes
    pidfile /data/6380/redis.pid
    loglevel notice
    logfile "/data/6380/redis.log"
    dbfilename dump.rdb
    dir /data/6380
    requirepass 123
    masterauth 123
    EOF

    cat >> /data/6381/redis.conf <<EOF
    port 6381
    daemonize yes
    pidfile /data/6381/redis.pid
    loglevel notice
    logfile "/data/6381/redis.log"
    dbfilename dump.rdb
    dir /data/6381
    requirepass 123
    masterauth 123
    EOF

    cat >> /data/6382/redis.conf <<EOF
    port 6382
    daemonize yes
    pidfile /data/6382/redis.pid
    loglevel notice
    logfile "/data/6382/redis.log"
    dbfilename dump.rdb
    dir /data/6382
    requirepass 123
    masterauth 123
    EOF

    启动:
    redis-server /data/6380/redis.conf
    redis-server /data/6381/redis.conf
    redis-server /data/6382/redis.conf

    主节点:6380
    从节点:6381、6382

    2、开启主从:
    6381/6382命令行:

    redis-cli -p 6381 -a 123 SLAVEOF 127.0.0.1 6380
    redis-cli -p 6382 -a 123 SLAVEOF 127.0.0.1 6380

    3、查询主从状态
    redis-cli -p 6380 -a 123 info replication
    redis-cli -p 6381 -a 123 info replication
    redis-cli -p 6382 -a 123 info replication

    相关文章

      网友评论

          本文标题:Redis学习笔记2

          本文链接:https://www.haomeiwen.com/subject/tvnzbltx.html