redis 发布订阅 性能测试

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
性能测试 PTS,5000VUM额度
简介: 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
目录
相关文章
|
23天前
|
NoSQL Redis
Redis 发布订阅
10月更文挑战第18天
27 1
Redis 发布订阅
|
20天前
|
NoSQL 测试技术 Redis
Redis 性能测试
10月更文挑战第21天
20 2
|
1月前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
32 3
|
1月前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
22 3
|
1月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
53 3
|
2月前
|
消息中间件 存储 NoSQL
18)Redis 的发布订阅模型
18)Redis 的发布订阅模型
32 0
|
3月前
|
NoSQL Java Linux
Redis6入门到实战------ 六、Redis_Jedis_测试
这篇文章介绍了如何使用Jedis客户端连接Redis,并进行基本的数据类型操作测试,包括字符串、列表、集合、哈希和有序集合的相关API使用示例。
Redis6入门到实战------ 六、Redis_Jedis_测试
|
3月前
|
NoSQL Java Linux
Jedis测试redis。(redis在linux虚拟机中)
该博客文章提供了使用Jedis客户端连接Linux虚拟机中的Redis服务器的步骤,包括Maven依赖配置、测试用例编写以及测试结果的截图。
|
3月前
|
缓存 NoSQL 测试技术
【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
|
3月前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果
【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果