redis 发布订阅 性能测试

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: redis 发布订阅 性能测试

准备环境


ip服务器 redis版本 是否主从
10.29.190.24 4.0.8 是/主节点
10.28.36.205  4.0.8 是/从节点


环境如上,已经自建了两台redis,并且已经实现主从同步。


一、主从同步下,发布订阅功能是否能正常使用


1、开启五个redis客户端,其中两个主节点,三个从节点


主节点2 订阅configserver频道


主节点3 订阅configserver频道


127.0.0.1:6379> subscribe configserver

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "configserver"

3) (integer) 1


从节点1 订阅configserver频道

从节点2 订阅configserver频道

从节点3 订阅configserver频道



127.0.0.1:6379> subscribe configserver

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "configserver"

3) (integer) 1


2、主节点一发送消息,测试其他节点能否收到订阅


主节点发布 "test subscribe"消息


127.0.0.1:6379> publish configserver "test subscribe"

(integer) 2


主节点2 主节点3 打印

1) "message"

2) "configserver"

3) "test subscribe"

正常接收到消息


从节点1 从节点2 从节点3 打印

1) "message"

2) "configserver"

3) "test subscribe"

正常接收到消息


说明主从同步也一样可以支持发布订阅的功能。具体性能还需进一步测试。


二、发布订阅性能测试


1、创建100个线程,订阅test2

public class RedisSubScribeTask implements Runnable {
    private String Name;
    public RedisSubScribeTask(String name) {
        Name = name;
    }
    @Override
    public void run() {
        RedisDaoImpl redis = new RedisDaoImpl();
        redis.init();
        Jedis jedis = redis.pool.getResource();
        if (jedis != null) {
            RedisMsgSubListener redisMsgSubListener = new RedisMsgSubListener();
            System.out.println("线程" + Name + "启动");
            jedis.subscribe(redisMsgSubListener, "test2");
        }
    }
}
public static void main(String[] args) {
    for (int i = 0; i <= 100; i++) {
        RedisSubScribeTask redisSubScribeTask = new RedisSubScribeTask(String.valueOf(i));
        new Thread(redisSubScribeTask).start();
    }
}
public class RedisMsgSubListener extends JedisPubSub {
    public void onMessage(String channel, String message) {
        System.out.println(channel + " is:" + message);
    }
    public void onPMessage(String pattern, String channel, String message) {
    }
    public void onSubscribe(String channel, int subscribedChannels) {
    }
    public void onUnsubscribe(String channel, int subscribedChannels) {
    }
    public void onPUnsubscribe(String pattern, int subscribedChannels) {
    }
} 
2、定义main方法,发布消息
public static void main(String[] args) {
    RedisDaoImpl redis = new RedisDaoImpl();
    redis.init();
    redis.pool.getResource().publish("test2", "test");
}

3、测试结果为秒回

4、将线程改为300个,测试结果也为秒回

5、将连件数升为500,依旧没有延迟

info clients
# Clients
connected_clients:500
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
127.0.0.1:6379>

6、连接数升为1000,其余两个为主从同步。看是否存在延迟

info clients
# Clients
connected_clients:1002
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0


7、发现依旧没有延迟。并且主从同步的订阅test2的消息,也正常接受。


127.0.0.1:6379> subscribe test2

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "test2"

3) (integer) 1

1) "message"

2) "test2"

3) "test"

1) "message"

2) "test2"

3) "test"


8、针对1000个客户端,并且进行连续发布100个消息

for (int i = 0; i <= 100; i++) {
redis.pool.getResource().publish("test2", "test" + i);
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}


从节点完全打印完成大概耗时2s,性能还算可以。


1) "message"

2) "test2"

3) "test99"

1) "message"

2) "test2"

3) "test100"  


8、按照现在redis三个区部署,每个区大概60台虚机链接,这样的性能是足够满足我们的业务场景的。


基本能实现毫秒级配置更新。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
存储 缓存 NoSQL
聊聊 Redis 的高级特性之一: 发布订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。 图中,消费者1和消费者2 订阅了 Redis 服务的频道 channel ,当生产者通过 PUBLISH 命令发送给频道 channel 时, 这个消息就会被发送给订阅它的两个客户端。
聊聊 Redis 的高级特性之一: 发布订阅
|
4月前
|
消息中间件 移动开发 NoSQL
Redis 协议 事务 发布订阅 异步连接
Redis 协议 事务 发布订阅 异步连接
|
4月前
|
NoSQL Redis
Redis之发布订阅
Redis之发布订阅
|
5月前
|
存储 NoSQL Redis
Redis 简介 + Python 操作发布订阅
Redis 简介 + Python 操作发布订阅
|
19天前
|
消息中间件 设计模式 缓存
Redis发布订阅:美丽的陷阱与不宜之境
Redis发布订阅:美丽的陷阱与不宜之境
48 1
|
4月前
|
消息中间件 NoSQL Java
硬核 | Redis Pub/Sub 发布订阅与宅男有什么关系?
硬核 | Redis Pub/Sub 发布订阅与宅男有什么关系?
52 0
|
4月前
|
存储 NoSQL 关系型数据库
Redis协议与异步方式(redis网络层、pipeline、事务、lua脚本、ACID特性、发布订阅、hiredis实现同步连接与异步连接)
Redis协议与异步方式(redis网络层、pipeline、事务、lua脚本、ACID特性、发布订阅、hiredis实现同步连接与异步连接)
74 0
|
4月前
|
消息中间件 NoSQL Redis
Redis发布订阅
【1月更文挑战第7天】 消息队列 Redis 发布订阅(publsub)是一种消息通信模式︰发送者(pub)发送消息,订阅者(sub)接收消息。微信、微博、关注系统! Redis客户端可以订阅任意数量的频道。
173 1
|
9月前
|
消息中间件 缓存 NoSQL
探索Redis发布订阅与消息队列:构建实时消息通信系统
本篇深入探讨了Redis的发布订阅模式和消息队列功能,展示了如何使用这两个特性构建实时消息通信系统。我们首先介绍了Redis的发布订阅模式,演示了如何通过PUBLISH命令将消息发布到特定频道,并使用SUBSCRIBE和UNSUBSCRIBE命令进行订阅和取消订阅操作。
354 0
|
5月前
|
NoSQL 测试技术 Redis
Redis【性能 02】Redis-5.0.14伪集群和Docker集群搭建及延迟和性能测试(均无法提升性能)
Redis【性能 02】Redis-5.0.14伪集群和Docker集群搭建及延迟和性能测试(均无法提升性能)
155 0