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
- 控制变量:
- 测试内容:
1.2. 测试结果
Key 长度从 1 到 256 逐次 2 倍递增, Value 长度从 8 到 32768 逐次 4 倍递增。
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
- 控制变量
- 测试内容
2.2. 测试结果
maxActive 从 25 到 300 每次递增 25, maxIdle 从 50 到 450 每次递增 100。
- 以 maxActive 长度为 X 轴绘制测试结果:
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
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; redis安装所遇到的问题;
1.全网最强最好用redis 封装连接池,redis 配置详解 2.jar 内置最全 最安全的两种redis 连接池 创建方式(synchronized and look), 3.通过了自己公司生产环境的检测 4.使用方法:只需要将jar 放入项目 lib 下面 ...
Redis是一种开源的、基于键值对的数据存储系统,常用于数据缓存、消息队列以及数据库功能。它以其高性能、高可用性和丰富的数据结构而受到广大开发者喜爱。在这个压缩包中,包含了不同平台下的Redis安装包,以及...
import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class RedisClient { private static JedisPool pool; static { JedisPoolConfig config = new JedisPoolConfig()...
通过正确配置和使用JedisPool,可以实现对Redis的高效、稳定访问,提升整个系统的性能和资源利用效率。在实际项目中,开发者需要注意选择合适的连接池参数,并进行适当的监控和调优,以确保系统的稳定运行。
Redis是一款高性能的键值数据库,常用于数据缓存、消息队列等场景。Jedis是Java语言连接Redis的客户端库,提供了丰富的API供开发者进行数据操作。本文将详细介绍如何使用提供的"redis安装脚本+jedis.jar.zip"进行...
Redis是一款高性能的键值对数据库,常用于缓存和数据持久化。在Java开发中,我们通常使用Jedis作为客户端库来与Redis进行交互。...通过合理利用这两个库,开发者可以高效地构建基于Redis的高性能数据处理应用。
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是Java语言中广泛使用的Redis客户端库,它提供了丰富的API,方便开发者与Redis服务器进行交互。以下是对Redis和Jedis的详细知识点...
JedisPool是Jedis提供的连接池功能,它遵循了通用对象池设计模式,旨在复用已建立的Redis连接,避免频繁创建和关闭连接带来的性能开销。通过连接池,我们可以有效地管理资源,提高系统性能和响应速度。 配置Jedis...
Redis是一款开源的、高性能的键值对存储系统,常用于数据缓存、消息队列以及数据库功能。在Windows操作系统上安装Redis,可以显著提升应用程序的数据处理速度。本压缩包提供了在Windows环境下安装和管理Redis所需的...
JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379); ``` 总的来说,"redis+spring jedis方式"意味着通过Spring Data Redis的抽象层,结合Jedis客户端,实现与Redis的交互。这种方式既保留了...
jedispool是基于apache common pool实现的连接池,它将连接Redis服务器的操作抽象成了一个池子,池子中可以容纳多个连接对象。客户端可以从池子中获取连接对象,执行操作后再返还给池子。jedispool提供了许多配置...
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。
- **获取和归还连接**:使用`JedisPool.getResource()`获取一个Jedis实例,用完后通过`returnResource()`或`close()`归还到池中。 - **关闭连接池**:当不再使用时,调用`JedisPool.close()`关闭连接池。 3. **...
Jedis连接池,即`JedisPool`,是基于Apache Commons Pool2实现的。它允许我们预先创建一定数量的Jedis实例,并将它们存储在一个池中。当需要使用时,可以从池中获取一个已建立连接的Jedis对象,用完后归还回池,而...
你可以使用 `JedisPool` 类创建一个连接池,然后从池中获取 Jedis 实例进行操作,使用完毕后再归还到池中。 总的来说,Redis 和 Jedis 的组合为 Java 开发者提供了强大的数据存储和处理能力。Redis 的高效性能和...
2. 连接池配置:在生产环境中,推荐使用连接池,如JedisPool,以提高性能和资源利用效率。 3. 持久化策略:了解并配置Redis的持久化策略,以防止数据丢失。 4. 安全性:确保Redis服务器的安全,避免未授权访问。 ...