Redis PUB/SUB 实现 ASCIIART 图的多种监听实验报告 -- 张学红 编写人

 

目的

实验 Redis PUB/SUB 功能实现 ASCIIART 图的奇偶分发,并进行单频道和多频道监听。

环境

 

操作系统:Linux - Red Hat Enterprise Linux Server release 6.8 (Santiago) 核心版本:2.6.32-642.el6.x86_64

查看 linux 环境命令 展开原码


实验用户:admin

前提条件

  • 在 /mnt/Packages/ 目录下有安装介质自带的所有 rpm 包。
  • 在 /home/admin/soft 目录下有安装需要的 redis 的源码包。
     

过程

首先在 10.137.100.51 机器上搭建单机器的 redis 实例,端口号为默认值:6379。发送消息端使用 shell 脚本来实验 ASCIIART 图的奇偶行分频道分发。消费端采用 java 语言编写,实现监听不同频道以及监听单频道和多频道。

准备

以下为在 linux 下执行时的整体目录结构,特截图如下:

所在目录:/home/admin/pubSubTest

监听消息端 – asciiart-sub-1.0.0-SNAPSHOT.jar  

发送消息 shell 脚本 – pubLetter.sh  

ASCIIART 原图 – pubSource.txt  

单机 redis – redis 

asciiart-sub-1.0.0-SNAPSHOT.jar  对应代码

SubTest.java

package com.taikang.asciiart.jedis;

 

import redis.clients.jedis.Jedis;

 

public class SubTest {

 

    public static void main(String[] args) {

        SubListerner subListerner1 = new SubListerner();

        @SuppressWarnings("resource")

        Jedis jedis = new Jedis ("10.137.100.51"6379);

        System.out.println(jedis.ping());

         

        jedis.subscribe(subListerner1, args);

    }

}

SubListerner.java

package com.taikang.asciiart.jedis;

 

import redis.clients.jedis.JedisPubSub;

 

public class SubListerner extends JedisPubSub{

 

     public void onMessage(String channel, String message) {

          

         if("w".equals(message))

            System.out.print("\n");

         else if("$".equals(message))

            System.out.print(" ");

         else

            System.out.print(message);

      }

}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.taikang.redis.asciiart.sub</groupId>

  <artifactId>asciiart-sub</artifactId>

  <version>1.0.0-SNAPSHOT</version>

  <parent>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>1.4.0.BUILD-SNAPSHOT</version>

  </parent>

   

  <dependencies>

    <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-redis</artifactId>

      <version>1.4.7.RELEASE</version>

    </dependency>

  </dependencies>

   

  <build>

    <plugins>

      <plugin>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-maven-plugin</artifactId>

      </plugin>

    </plugins>

  </build>

</project>

 

pubLetter.sh  

pubLetter.sh

#!/bin/sh

 

 

REDIS_HOME=/home/admin/pubSubTest/redis/bin

channel_name='redis';

 

while read line;

do

  if [ ${channel_name} ==  'redis' ]; then

    channel_name='pyramid';

  else

    channel_name='redis';

  fi

 

  for word in $line;

  do

    for((i=0; i<${#word}; ++i))

    do

      b=${word:i:1};

      $REDIS_HOME/redis-cli  publish $channel_name ${word:i:1};

      echo -n "### ${channel_name} : ${word:i:1} ### ";

      sleep 0.005;

    done

#    $REDIS_HOME/redis-cli publish $channel_name  " ";

#    echo -n " ";

  done

 

#  echo "";

 

done < pubSource.txt

 

pubSource.txt  

pubSource.txt

;;;;;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;w

rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrw

;;;;;;;;;;;;;;;;::::::::::::;;:::::::::::::::::::::::::$$$$$$$$$$$$$$$$::::::::::::::::::::::;w

rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrw

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::::::$$$$$$$$$$$$$$$$$$$$$$$$:::::::::::::::::::w

rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrw

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::::$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:::::::::::::::;w

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:::::::::::::;w

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_._$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,,:::::::::::;w

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_.-``__$''-._$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,:::::::::::;w

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_.-``$$$$`.$$`_.$$''-._$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,::::::::::;;w

$$$$$$$$$$$$$$$$$$$$$$$$$.-``$.-```.$$```\/$$$$_.,_$''-._$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$::::::::::::w

$$$$$$$$$$$$$$$$$$$$$$$$$($$$$'$$$$$$,$$$$$$$.-`$$|$`,$$$$)$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::,$$$$$$$$$$$$$$$$$@,$$$$$$$$$$$$$$$$$$$$:::::::::;;;w

$$$$$$$$$$$$$$$$$$$$$$$$$|`-._`-...-`$__...-.``-._|'`$_.-'|$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;:::::;;;;;;;;;;;;;;;;;;:::::::::,$$$$$$$$$$$$$$$@@@@@$$$$$$$$$$$$$$$$$$$:::::::::;;;w

$$$$$$$$$$$$$$$$$$$$$$$$$|$$$$`-._$$$`._$$$$/$$$$$_.-'$$$$|$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

:::::::::::::::::::::::::::::::::::::::::::$$$$$$$$$$$$$@@@@@@@@@$$$$$$$$$$$$$$$$$:::::::::;;;w

$$$$$$$$$$$$$$$$$$$$$$$$$$`-._$$$$`-._$$`-./$$_.-'$$$$_.-'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;;;;;;;:::::::::::::::::::::::::::$$$$$$$$$$$@@@@@@@@@@@@@$$$$$$$$$$$$$$:::::::::;;;;w

$$$$$$$$$$$$$$$$$$$$$$$$$|`-._`-._$$$$`-.__.-'$$$$_.-'_.-'|$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::::$$$$$$$@@@@@@@@@@@@@@@@@$$$$$$$$$$$$:::::::::;;;;w

$$$$$$$$$$$$$$$$$$$$$$$$$|$$$$`-._`-._$$$$$$$$_.-'_.-'$$$$|$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::$$$$@@@@@@@@@@@@@@@@@@@@@$$$$$$$$$:::::::::;;;;;w

$$$$$$$$$$$$$$$$$$$$$$$$$`-._$$$$`-._`-.__.-'_.-'$$$$_.-'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::@@@@@@@@@@@@@@@@@@@@@@@@@$$$$,:@@::::::::;;;;;w

$$$$$$$$$$$$$$$$$$$$$$$$$|`-._`-._$$$$`-.__.-'$$$$_.-'_.-'|$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;;;;;;;'';;;;;;;;;;;;;;:;;;::::::::::@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$:@@@@@@:::::;;;;;;w

$$$$$$$$$$$$$$$$$$$$$$$$$|$$$$`-._`-._$$$$$$$$_.-'_.-'$$$$|$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;;;;;;###;;;;;;;;;;;;;;;;;;::::::::@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@::;;;;;;;w

$$$$$$$$$$$$$$$$$$$$$$$$$$`-._$$$$`-._`-.__.-'_.-'$$$$_.-'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;;;;;;###;;;;;;;;;;;;;;;;;;;:::::@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@;;;;;;;w

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$`-._$$$$`-.__.-'$$$$_.-'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;;;#@@@@@@@';;;@@;;;;;;;;;;;;::@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@;;;;;w

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$`-._$$$$$$$$_.-'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;@@@@@@;#@@@@'@@;;;;;;;;;;;;;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@;;;w

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$`-.__.-'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;#@@@@@##@@@@@@+;;;;;;;;;;;;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@;w

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;#@'#@';@##@@@;;;;;;;;;;;;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@w

$$$$$$$$$$$$$$$$$$$$$$$$$$Port:$6379$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;#+;;+;;'+;;#';;;;;;;;;;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@w

$$$$$$$$$$$$$$$$$$$$$$$$$$Running$in$standalone$mode$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

;;;;;;;;;;';;+;;;';;+;+;;;;;;;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@w

$$$$$$$$$$$$$$$$$$$$$$$$$$Redis$3.2.9$(00000000/0)$64$bit$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$w

++''+''++''+#++;++@##+''+'#@###@@@##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@w

rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrw

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@w

rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrw

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@w

rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrw

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@w

实验

 

第一步:启动监听端

监听 redis 频道

[admin@TKCX-HADOOP2 pubSubTest]$ java -jar asciiart-sub-1.0.0-SNAPSHOT.jar redis

PONG

监听 pyramid 频道

[admin@TKCX-HADOOP2 pubSubTest]$ java -jar asciiart-sub-1.0.0-SNAPSHOT.jar pyramid

PONG

监听 redis 和 pyramid 频道

[admin@TKCX-HADOOP2 pubSubTest]$ java -jar asciiart-sub-1.0.0-SNAPSHOT.jar  redis  pyramid

PONG

第二步:启动发动端

启动发送端

[admin@TKCX-HADOOP2 pubSubTest]$ ./pubLetter.sh

第三步:实验效果截图

结论:redis  pub/sub 的功能是可以实现比较灵活的单渠道和多渠道监听的功能的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、安装文档 2、 实验:(1) 启动redis(2) 停止redis(3)测试连接(发送命令的两种方法) 字符串类型: (4)设置一个键,获得该键值,并判断一个键是否存在 (5)删除键 (6)增和减 (7) 向尾部追加值 (8) 获取字符串长度 (9) 同时获得/设置多个键值 (10) 位操作 散列类型: (11) 为键值car设置price、name、model等“属性” (12) 判断model字段是否存在,不存在的话添加该字段,最后删除 列表类型: (13)向列表添加元素、弹出元素、获取表中元素个数、获得列表片段 (14)获得/设置指定索引的元素值 集合类型: (16) 增加或删除元素以及获得集合中所有元素: (17) 判断元素是否存在于集合中: (18) 集合的运算差sdiff,交sinter,并sunion 有序集合类型: (19) 增加元素、获得元素分数、获得排名在某个范围的元素列表、获得制定分数范围的元素 事务: (20)MULTI开启事务,EXEC结束事务 (21)错误处理:语法错误(命令本身错误)和运行错误(命令使用类型错误) (22)watch命令(监控作用) (23)Expire,ttl,persist命令控制键的存活时间 (24)Sort排序命令 (25)构造如表结构: (26) Sort key1 by key2 将key1按照key2的大小进行排序 (27)get:sort key1 get key2 按照key1大小进行排序,将key2结果显示出来 (28)sort、by、get结合使用: (29)获取外部键但不进行排序: (30)将下表存在哈希结构中,并使用sort、by、get方法进行操作 (31)Store:将排完序的结果进行存储 (32)订阅者-发布者模式 任务队列: (33)优先级队列:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值