zoukankan      html  css  js  c++  java
  • 发布订阅、事务和脚本

    发布订阅

    1. Redis 发布订阅:发布者将消息发送到channel中,订阅了这个channel的订阅者可以获取这个channel中的数据
    2. Redis 订阅者可以订阅任意数量的channel
    3. Redis 发布订阅架构:发布者和订阅者都是 Redis 的客户端,channel是Redis的服务端
      1. 发布者
      2. 订阅者
      3. channel

    Redis 发布订阅的命令

    1. publish channel message:将消息发送到指定的channel中(返回订阅了该频道的订阅者数量)
      1. publish mychannel "This is redis message"
    2. subscribe channel1 ... channelN:订阅一个或多个channel
      1. subscribe mychannel
    3. unsubscribe channel1 ... channelN:退订一个或多个channel
      1. unsubscribe mychannel
    4. psubscribe pattern1 ... patternN:订阅一个或者多个符合给定模式的的频道(每个模式以 * 作为通配符)
      1. psubscribe my*
      2. psubscribe mychannel
    5. punsubscribe patter1 ... patternN:退订一个或者多个符合给定模式的的频道(每个模式以 * 作为通配符)
      1. punsubscribe my*
    6. pubsub channles [pattern]:查看所有被subscribe命令订阅的频道(使用pattern则表示返回频道的名称满足对应的模板)
      1. pubsub channels
      2. pubsub channels my*
    7. pub numsub channel ... channelN:查看频道的订阅者数目(不包括订阅模式的客户端订阅者)
      1. pubsub numsub mychannel4  mychannel5 mychannel6
    8. pubsub numpat:所有客户端使用订阅模式(使用命令PSUBSCRIBE)订阅的模式数量的总和
      1. pubsub numpat 

    事务

    1. Redis 事务的特性
      1. 事务中可以一次执行多个命令进行批量操作
      2. Redis 单条命令的执行是原子性的
      3. Redis 事务的执行并不是原子性的( Redis 没有在事务上增加任何维持原子性的机制)
    2. 事务执行的三个阶段
      1. 开始事务:使用 MULTI 表示一个事务的开启
      2. 事务入队列
      3. 执行事务:使用 EXEC 表示事务开始执行
    3. Redis 事务的三个重要保证
      1. 批量操作在发送 EXEC 命令前被放入队列缓存
      2. 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败都不影响其他命令的执行
      3. 在事务执行过程中,其他客户端提交的命令请求不会插入到事务的执行命令序列中
    4. Redis 事务的五个命令
      1. multi:标记一个事务块的开启
      2. exec:执行事务块内的所有的命令(返回事务块内多有命令的返回值 )
      3. discard:取消事务(放弃执行事务块内的所有命令)
      4. Watch key_name1 ... key_nameN:监听一个或者多个key(如果在事务执行之前这些Key被其他命令所修改,那么事务将被打断)
      5. unwatch:取消所有的监听
    5. 事务实例:先以 Multi 开启一个事务,然后将多个命令入队到事务中,最后由 EXEC 命令触发事务(并执行事务中的所有命令)
      #监听characteristic
      watch characteristic    
      #开启一个任务
      multi  
      #任务入队    
      set name "This is Redis"
      sadd characteristic key-value In-memory-database
      get name
      smembers characteristic
      hget characteristic name
      #触发事务的执行
      exec

    脚本

    1. Redis 脚本使用 lua 解释器来执行脚本
    2. Redis2.6 通过内嵌支持 Lua 环境

    Redis 脚本的命令

    1. eval script numkeys key_name1 ... key_nameN arg1 ... argN:执行一个脚本script
      1. script:脚本程序代码
      2. numkeys:指定 key 的数目
      3. key_name1 ... key_nameN:脚本中引用到的key
      4. arg1 ... argN:脚本中引用到的参数
      5. 注意点:脚本中引用key_name和arg参数,可以使用全局变量KEYS和ARGV数组进行引用(KEYS和ARGV都必须大写)
      6. 实例: eval "return {KEYS[1],ARGV[1],KEYS[2],ARGV[2]}" 2 name age Weiking 27
    2. script load script:将脚本加载到脚本缓存中(不会立即执行该脚本;返回脚本的sha1校验和)
      1. script load "return {KEYS[1],ARGV[1],KEYS[2],ARGV[2]}"
      2. script load "return {KEYS[0]},ARGV[0],KEYS[1],ARGV[1]}"
    3. script exists sha11 ... sha1N:判断 sha1 对应的脚本是否已经加载到脚本缓存中
      1. script exists da95252e2c27e41cd53b9114f28b4ba84e7d64d4
    4. script flush:用于清空所有的脚本缓存
    5. script kill:杀死当前正在运行所有的脚本(当且仅当这个脚本没有执行过任何写操作时候该命令才会生效)
      1. 该命令的作用主要作用是用于终止运行时间过长的脚本(比如一个因为 BUG 而发生无限循环的脚本)
      2. script kill
    6. evalsha sha1 numkeys key_name1 ... key_nameN arg1 ... argN:根据给定的 sha 校验码,执行脚本缓存中的脚本
      1. sha1:脚本缓存中脚本对应的 sha 码
      2. numkeys:指定 key 的数目
      3. key_name1 ... key_nameN:脚本中引用到的key
      4. arg1 ... argN:脚本中引用到的参数
      5. 实例:evalsha da95252e2c27e41cd53b9114f28b4ba84e7d64d4 2 name age Weiking 27
  • 相关阅读:
    Linux Shell编程入门
    vim 文件在linux不换行,只显示^M解决办法
    服务器高性能程序 磁盘I/O篇
    车牌识别_转自别人的博客
    ubuntu网络简单设置
    C++设计模式(转载)
    结构算法之道
    C++设计模式工厂方法
    二叉树的深度优先遍历、广度优先遍历和非递归遍历
    iptables
  • 原文地址:https://www.cnblogs.com/WeiKing/p/13708613.html
Copyright © 2011-2022 走看看