`
Poechant
  • 浏览: 227497 次
博客专栏
Bebe66e7-3a30-3fc9-aeea-cfa3b474b591
Nginx高性能Web服务...
浏览量:24243
5738817b-23a1-3a32-86de-632d7da73b1e
Cumulus实时媒体服务...
浏览量:22050
社区版块
存档分类
最新评论

Redis Primer(1)基于JedisPool的Redis hset并发性能测试

 
阅读更多

Redis Primer(1)基于JedisPool的Redis hset并发性能测试


  • Redis Server 与 Redis Client 位于同一台机器(从而排除带宽限制带来的影响);
  • Redis Server 版本:2.6.7;
  • Redis Client API:Jedis 2.1.0,使用 JedisPool(依赖包使用 commons-pool-1.5.3.jar);

1. 测试一:单线程客户端基于不同Key和Value长度

1.1. 测试内容
  • 不变量:
    • JedisPool 参数确定
      • minIdle = 0
      • maxIdle = 50
      • maxActive = 500
    • 测试 hset 操作
    • Field 长度为 32 bytes
  • 控制变量:
    • Key 长度;
    • Value 长度;
  • 测试内容:
    • 吞吐量(每秒访问次数)
1.2. 测试结果

Key 长度从 1 到 256 逐次 2 倍递增, Value 长度从 8 到 32768 逐次 4 倍递增。

  • 以 Key 长度为 X 轴绘制测试结果:

Resize icon

  • 以 Value 长度为 X 轴绘制测试结果:

Resize icon

1.3. 结论

Throughput 随 Key 长度变化不大(更大范围内的 Key 长度没有测试,因为一般情况下 Key 超过 256 字节的情况较少,请本人使用方式也符合该范围),但与 Value 长度相关性极大(范围较大,因本人的应用场景中 Value 值较大)。

1.4. 建议
  • 减少每个查询中的访问次数(优化查询,类似于 Database 中优化 SQL 语句);
  • 要尽可能的减小 Value。

测试二:单线程客户端基于不同连接池参数

2.1. 测试内容
  • 不变量:
    • 测试 hset 操作
    • Key 长度为 32 bytes
    • Field 长度为 32 bytes
    • Value 长度为 256 bytes
  • 控制变量
    • maxIdle
    • maxActive
  • 测试内容
    • 吞吐量(每秒访问次数)
2.2. 测试结果

maxActive 从 25 到 300 每次递增 25, maxIdle 从 50 到 450 每次递增 100。

  • 以 maxActive 长度为 X 轴绘制测试结果:

Resize icon

  • 以 maxIdle 长度为 X 轴绘制测试结果:

Resize icon

2.3. 结论

在目前的测试参数范围内,差别不大,或许需要进一步测试。从该测试结果看 maxIdle=25 且 maxActive=250 的 JedisPool 设置能够带来最大的 hset(32bits, 32bits, 256bits) 吞吐量。

2.4. 建议
  • 采用 maxIdle=25 且 maxActive=250 的 JedisPool 设置。

测试三:多线程客户端不同hset次数

3.1. 测试内容
  • 不变量:
    • 测试 hset 操作
    • Key 长度为 32 bytes
    • Field 长度为 32 btyes
    • Value 长度为 20480 bytes
  • 控制变量
    • hset 操作次数从 10000 到 1000000
  • 测试内容
    • 吞吐量(每秒访问次数)
2.3. 测试结果

hset 操作次数从 10000 到 5120 500

Resize icon

2.4. 结论与建议
  • 用多线程的客户端进行压力测试;
  • Redis 的并发性能相当不错,20KB 的数据(这已经相当大了)每秒可以写入 60000 多次,平均每秒 1200 MB,9600 Mb,约 9.6 Gb。
  • 如果测试小数据,应该能达到 100,000/s 以上的并发量

-

转载请注明来自(Poechant)的 CSDN 博客:http://blog.csdn.net/poechant,作者微博:weibo.com/lauginhom

-

分享到:
评论

相关推荐

    linux中安装redis和jedis及jedispool

    linux中安装redis和jedis及jedispool; redis安装所遇到的问题;

    Redis 、Redis 连接池、JedisPool

    1.全网最强最好用redis 封装连接池,redis 配置详解 2.jar 内置最全 最安全的两种redis 连接池 创建方式(synchronized and look), 3.通过了自己公司生产环境的检测 4.使用方法:只需要将jar 放入项目 lib 下面 ...

    各种版本的redis+Jedis驱动包

    Redis是一种开源的、基于键值对的数据存储系统,常用于数据缓存、消息队列以及数据库功能。它以其高性能、高可用性和丰富的数据结构而受到广大开发者喜爱。在这个压缩包中,包含了不同平台下的Redis安装包,以及...

    redis-pool-jedis需要的jar包

    import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class RedisClient { private static JedisPool pool; static { JedisPoolConfig config = new JedisPoolConfig()...

    redis连接池jar jedis+common

    通过正确配置和使用JedisPool,可以实现对Redis的高效、稳定访问,提升整个系统的性能和资源利用效率。在实际项目中,开发者需要注意选择合适的连接池参数,并进行适当的监控和调优,以确保系统的稳定运行。

    redis安装脚本+jedis.jar.zip

    Redis是一款高性能的键值数据库,常用于数据缓存、消息队列等场景。Jedis是Java语言连接Redis的客户端库,提供了丰富的API供开发者进行数据操作。本文将详细介绍如何使用提供的"redis安装脚本+jedis.jar.zip"进行...

    redis相关jar包(redis2.1.5、jedis2.9.0)

    Redis是一款高性能的键值对数据库,常用于缓存和数据持久化。在Java开发中,我们通常使用Jedis作为客户端库来与Redis进行交互。...通过合理利用这两个库,开发者可以高效地构建基于Redis的高性能数据处理应用。

    Redis Java客户端Jedis 2.9.0 jar包(含common-pool2)

    Redis的官方推荐Java客户端——Jedis 此Jar包为Jedis 2.9.0版(2016年7月22日发布) 支持Redis 3.0 (亲测有效) 使用方法: import redis.clients.jedis.Jedis; Jedis jedis = new Jedis("localhost"); jedis.set...

    redis辅助文档 + jedis

    Redis是一款高性能的键值对数据库,常用于缓存、消息队列、计数器等多种场景。Jedis是Java语言中广泛使用的Redis客户端库,它提供了丰富的API,方便开发者与Redis服务器进行交互。以下是对Redis和Jedis的详细知识点...

    jedis pool配置

    JedisPool是Jedis提供的连接池功能,它遵循了通用对象池设计模式,旨在复用已建立的Redis连接,避免频繁创建和关闭连接带来的性能开销。通过连接池,我们可以有效地管理资源,提高系统性能和响应速度。 配置Jedis...

    (window)Redis安装包,Redis桌面Manager,Jedis驱动包

    Redis是一款开源的、高性能的键值对存储系统,常用于数据缓存、消息队列以及数据库功能。在Windows操作系统上安装Redis,可以显著提升应用程序的数据处理速度。本压缩包提供了在Windows环境下安装和管理Redis所需的...

    redis+spring jedis方式

    JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379); ``` 总的来说,"redis+spring jedis方式"意味着通过Spring Data Redis的抽象层,结合Jedis客户端,实现与Redis的交互。这种方式既保留了...

    jedispool连redis高并发卡死的问题

    jedispool是基于apache common pool实现的连接池,它将连接Redis服务器的操作抽象成了一个池子,池子中可以容纳多个连接对象。客户端可以从池子中获取连接对象,执行操作后再返还给池子。jedispool提供了许多配置...

    redis.clients.jedis_REDIS_API

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。

    Redis的Java客户端Jedis

    - **获取和归还连接**:使用`JedisPool.getResource()`获取一个Jedis实例,用完后通过`returnResource()`或`close()`归还到池中。 - **关闭连接池**:当不再使用时,调用`JedisPool.close()`关闭连接池。 3. **...

    redis的Java客户端jedis池的介绍及使用.rar

    Jedis连接池,即`JedisPool`,是基于Apache Commons Pool2实现的。它允许我们预先创建一定数量的Jedis实例,并将它们存储在一个池中。当需要使用时,可以从池中获取一个已建立连接的Jedis对象,用完后归还回池,而...

    redis的安装包以及jedis 的jar

    你可以使用 `JedisPool` 类创建一个连接池,然后从池中获取 Jedis 实例进行操作,使用完毕后再归还到池中。 总的来说,Redis 和 Jedis 的组合为 Java 开发者提供了强大的数据存储和处理能力。Redis 的高效性能和...

    java中redis的jar包jedis-2.8.0.jar

    2. 连接池配置:在生产环境中,推荐使用连接池,如JedisPool,以提高性能和资源利用效率。 3. 持久化策略:了解并配置Redis的持久化策略,以防止数据丢失。 4. 安全性:确保Redis服务器的安全,避免未授权访问。 ...

Global site tag (gtag.js) - Google Analytics