Java最全最通俗易懂的Redis发布订阅及代码实战(1),java面试问项目上线没有

技术学习总结

学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。

最后面试分享

大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

unsubscribe [频道名称 [频道名称 …]]

比如,取消订阅channel:one-more-study:demo频道,命令如下:

unsubscribe channel:one-more-study:demo

  1. “unsubscribe”

  2. “channel:one-more-study:demo”

  3. (integer) 0

返回结果中有3条,分别表示:返回值的类型(取消订阅成功)、取消订阅的频道名称、目前已订阅的频道数量。

按模式订阅消息

按模式订阅消息的命令是psubscribe,订阅一个或多个符合给定模式的频道,语法是:

psubscribe 模式 [模式 …]

每个模式以 * 作为匹配符,比如 channel* 匹配所有以 channel 开头的频道,命令如下:

psubscribe channel:*

Reading messages… (press Ctrl-C to quit)

  1. “psubscribe”

  2. “channel*”

  3. (integer) 1

返回结果中有3条,分别表示:返回值的类型(按模式订阅成功)、订阅的模式、目前已订阅的模式数量。当订阅者接受到消息时,就会显示:

  1. “pmessage”

  2. “channel*”

  3. “channel:one-more-study:demo”

  4. “I am One More Study.”

返回结果中有4条,分别表示:返回值的类型(信息)、消息匹配的模式、消息来源的频道名称、消息内容。

按模式取消订阅

按模式取消订阅的命令是punsubscribe,可以取消一个或者多个模式的订阅,语法是:

punsubscribe [模式 [模式 …]]

每个模式以 * 作为匹配符,比如 channel:* 匹配所有以 channel 开头的频道,命令如下:

1> punsubscribe channel:*

  1. “punsubscribe”

  2. “channel:*”

  3. (integer) 0

返回结果中有3条,分别表示:返回值的类型(按模式取消订阅成功)、取消订阅的模式、目前已订阅的模式数量。

查询订阅信息
查看活跃频道

活跃频道指的是至少有一个订阅者的频道,语法是:

pubsub channels [模式]

比如:

pubsub channels

  1. “channel:one-more-study:test”

  2. “channel:one-more-study:demo”

  3. “channel:demo”

pubsub channels *demo

  1. “channel:one-more-study:demo”

  2. “channel:demo”

pubsub channels one-more-study

  1. “channel:one-more-study:test”

  2. “channel:one-more-study:demo”

查看频道订阅数

pubsub numsub [频道名称 …]

比如:

pubsub numsub channel:one-more-study:demo

  1. “channel:one-more-study:demo”

  2. (integer) 1

查看模式订阅数

pubsub numpat

(integer) 1

代码实战

光说不练假把式,我们使用Java语言写一个简单的发布订阅示例。

Jedis集群示例

Jedis是Redis官方推荐的Java连接开发工具,我们使用Jedis写一个简单的集群示例。

package onemore.study;

import redis.clients.jedis.HostAndPort;

import redis.clients.jedis.JedisCluster;

import redis.clients.jedis.JedisPoolConfig;

import java.util.HashSet;

import java.util.Set;

/**

  • Jedis集群

  • @author 万猫学社

*/

public enum Cluster {

INSTANCE;

//为了简单,把IP和端口直接写在这里,实际开发中写在配置文件会更好。

private final String hostAndPorts = “192.168.0.60:6379;192.168.0.61:6379;192.168.0.62:6379”;

private JedisCluster jedisCluster;

Cluster() {

JedisPoolConfig poolConfig = new JedisPoolConfig();

//最大连接数

poolConfig.setMaxTotal(20);

//最大空闲数

poolConfig.setMaxIdle(10);

//最小空闲数

poolConfig.setMinIdle(2);

//从jedis连接池获取连接时,校验并返回可用的连接

poolConfig.setTestOnBorrow(true);

//把连接放回jedis连接池时,校验并返回可用的连接

poolConfig.setTestOnReturn(true);

Set nodes = new HashSet<>();

String[] hosts = hostAndPorts.split(“;”);

for (String hostport : hosts) {

String[] ipport = hostport.split(“:”);

String ip = ipport[0];

int port = Integer.parseInt(ipport[1]);

nodes.add(new HostAndPort(ip, port));

}

jedisCluster = new JedisCluster(nodes, 1000, poolConfig);

}

public JedisCluster getJedisCluster() {

return jedisCluster;

}

}

发布者示例

package onemore.study;

import redis.clients.jedis.JedisCluster;

/**

  • 发布者

  • @author 万猫学社

*/

public class Publisher implements Runnable {

private final String CHANNEL_NAME = “channel:one-more-study:demo”;

private final String QUIT_COMMAND = “quit”;

@Override

public void run() {

JedisCluster jedisCluster = Cluster.INSTANCE.getJedisCluster();

for (int i = 1; i <= 3; i++) {

String message = “第” + i + “消息”;

System.out.println(Thread.currentThread().getName() + " 发布:" + message);

jedisCluster.publish(CHANNEL_NAME, message);

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(“------------------”);

}

jedisCluster.publish(CHANNEL_NAME, QUIT_COMMAND);

}

}

订阅者示例

总结:绘上一张Kakfa架构思维大纲脑图(xmind)

image

其实关于Kafka,能问的问题实在是太多了,扒了几天,最终筛选出44问:基础篇17问、进阶篇15问、高级篇12问,个个直戳痛点,不知道如果你不着急看答案,又能答出几个呢?

若是对Kafka的知识还回忆不起来,不妨先看我手绘的知识总结脑图(xmind不能上传,文章里用的是图片版)进行整体架构的梳理

梳理了知识,刷完了面试,如若你还想进一步的深入学习解读kafka以及源码,那么接下来的这份《手写“kafka”》将会是个不错的选择。

  • Kafka入门

  • 为什么选择Kafka

  • Kafka的安装、管理和配置

  • Kafka的集群

  • 第一个Kafka程序

  • Kafka的生产者

  • Kafka的消费者

  • 深入理解Kafka

  • 可靠的数据传递

  • Spring和Kafka的整合

  • SpringBoot和Kafka的整合

  • Kafka实战之削峰填谷

  • 数据管道和流式处理(了解即可)

image

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

ka的安装、管理和配置

  • Kafka的集群

  • 第一个Kafka程序

  • Kafka的生产者

  • Kafka的消费者

  • 深入理解Kafka

  • 可靠的数据传递

  • Spring和Kafka的整合

  • SpringBoot和Kafka的整合

  • Kafka实战之削峰填谷

  • 数据管道和流式处理(了解即可)

[外链图片转存中…(img-ZXzv3aTq-1715349669471)]

[外链图片转存中…(img-cSCQWcbt-1715349669472)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值