`
heipark
  • 浏览: 2094755 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多种方式测试redis入库性能

 
阅读更多

 

  Transaction Pipeline 耗时(s)
测试一: N N 311
测试二: N Y 10
测试三: Y Y 7
测试四: Y N 10

 

结论:Pipeline + Transaction方式是几种插入方式中性能最好的。虽然有点意外,但测试多次仍然是这个结论。

 

测试代码如下:

 

import org.apache.commons.lang.RandomStringUtils;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Pipeline;
import redis.clients.jedis.Transaction;

public class RedisTransactionTest {

	private static String host = "xx.xx.xx.xx";

	private static JedisPool pool = new JedisPool(new JedisPoolConfig(), host);

	private long rowCount = 1000000; // 100万

	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		new RedisTransactionTest().noTransactionNoPipeline();
		System.out.println("noTransactionNoPipeline use " + (System.currentTimeMillis() - start) / 1000);

		pool = new JedisPool(new JedisPoolConfig(), host);
		start = System.currentTimeMillis();
		new RedisTransactionTest().pipelineWithoutTransaction();
		System.out.println("pipelineWithoutTransaction use " + (System.currentTimeMillis() - start) / 1000);

		pool = new JedisPool(new JedisPoolConfig(), host);
		start = System.currentTimeMillis();
		new RedisTransactionTest().pipelineWithTransaction();
		System.out.println("pipelineWithTransaction use " + (System.currentTimeMillis() - start) / 1000);

		pool = new JedisPool(new JedisPoolConfig(), host);
		start = System.currentTimeMillis();
		new RedisTransactionTest().transactionNoPipeline();
		System.out.println("transactionNoPipeline use " + (System.currentTimeMillis() - start) / 1000);

	}

	public void pipelineWithoutTransaction() {
		Jedis jedis = pool.getResource();
		try {
			Pipeline p = jedis.pipelined();
			for (int i = 0; i < rowCount; i++) {
				String key = RandomStringUtils.randomAlphabetic(8);
				p.set(key, RandomStringUtils.randomNumeric(5));
				p.expire(key, 5 * 60);
			}
			p.sync();
		} catch (Exception e) {
			pool.returnResource(jedis);
		}
	}

	public void pipelineWithTransaction() {
		Jedis jedis = pool.getResource();
		try {
			Pipeline p = jedis.pipelined();
			p.multi();
			for (int i = 0; i < rowCount; i++) {
				String key = RandomStringUtils.randomAlphabetic(8);
				p.set(key, RandomStringUtils.randomNumeric(5));
				p.expire(key, 5 * 60);
			}
			p.exec();
			p.sync();
		} catch (Exception e) {
			pool.returnResource(jedis);
		}
	}

	public void noTransactionNoPipeline() {
		Jedis jedis = pool.getResource();
		try {
			for (int i = 0; i < rowCount; i++) {
				String key = RandomStringUtils.randomAlphabetic(8);
				jedis.set(key, RandomStringUtils.randomNumeric(5));
				jedis.expire(key, 5 * 60);
			}
		} catch (Exception e) {
			pool.returnResource(jedis);
		}
	}

	public void transactionNoPipeline() {
		Jedis jedis = pool.getResource();
		try {
			Transaction tx = jedis.multi();
			for (int i = 0; i < rowCount; i++) {
				String key = RandomStringUtils.randomAlphabetic(8);
				tx.set(key, RandomStringUtils.randomNumeric(5));
				tx.expire(key, 5 * 60);
			}
			tx.exec();
		} catch (Exception e) {
			pool.returnResource(jedis);
		}
	}
}

 --end

 

 

分享到:
评论

相关推荐

    异步redis队列实现 数据入库的方法

    由于其出色的性能,Redis在处理大量数据和高并发场景下表现优异,被广泛应用于缓存、消息队列、计数器、会话存储等多种场景。 ### 异步队列的优势 在高并发数据入库的场景下,异步队列可以极大地提高系统的处理...

    库存管理系统设计说明书.doc

    2. **出库管理**:管理销售出库、退货处理,支持多种出库方式(如普通销售、调拨、盘点等),并实时更新库存数量。 3. **库存查询**:提供实时库存查询功能,可按商品名称、型号、仓库等条件快速查找库存情况。 4....

    基于SpringBoot的中小医院信息管理系统.zip

    7. 结算系统:自动计算医疗费用,支持多种支付方式,如现金、刷卡、电子支付等。 8. 报表统计:提供各类数据报表,如收支报表、诊疗量统计,便于医院管理层分析决策。 四、技术栈解析 1. SpringBoot:作为核心框架...

    springboot410粮仓管理系统的设计与实现bootpf.zip

    2. 性能优化:通过缓存技术(如Redis)减少数据库访问,提高系统响应速度。 3. 安全防护:使用Spring Security进行权限控制,防止非法访问;同时,定期进行安全审计,防范潜在风险。 综上所述,SpringBoot410粮仓...

    基于ssm+mysql汽车销售分析与管理系统设计与实现.docx

    - 采用合适的缓存策略(如Redis)提高系统性能,减少数据库压力。 - 为了保证系统的可扩展性和维护性,遵循良好的编程规范和设计模式,如单一职责原则、开闭原则等。 系统上线后,还需要进行持续优化,根据实际运行...

    仓库管理系统的设计与实现Java代码.zip

    Java提供了多种方式来实现数据持久化,如文件系统操作、数据库连接、序列化等。在仓库管理系统中,通常会选择关系型数据库如MySQL或Oracle来存储大量结构化的库存信息,通过JDBC(Java Database Connectivity)接口...

    基于SpringBoot开发的仓库管理系统(WMS) 可做毕业设计 .zip

    WMS系统可能涉及到物料、库存、出入库记录等多种实体模型,需要合理设计数据库表结构,并实现对应的CRUD操作。 此外,系统安全也是关键一环。SpringBoot集成了Spring Security,提供了身份验证和授权功能。在WMS...

    -Springboot基于Java的超市进销存系统.zip

    6. **缓存机制**:对于提高性能,系统可能会采用缓存技术,如Redis或Hazelcast,来存储经常访问的数据,减少数据库查询次数。 7. **单元测试与集成测试**:Spring Boot支持JUnit和Mockito等工具进行单元测试,而...

    毕业设计-图书馆管理系统源码

    它涵盖了图书的入库、借阅、归还、续借、预约、查询等多种功能,大大减轻了工作人员的工作负担,提高了服务质量。本系统源码的实现,通常会涉及以下几个关键技术点: 1. 数据库设计:图书馆管理系统的基础是数据库...

    ssm购物商城s

    同时,系统性能优化也是重要的一环,可以通过缓存技术(如Redis)、数据库索引优化、负载均衡等方式提升系统响应速度和并发处理能力。 在部署方面,SSM购物商城可能采用微服务架构,将不同模块拆分为独立的服务,以...

    Java大型CERP进销存系统.zip

    3. **分布式系统**: 高并发场景下,通过负载均衡、分布式缓存、分布式数据库等方式提升系统性能。 四、安全与性能优化 1. **权限控制**: 通过角色和权限分配,确保数据安全,防止非法访问。 2. **事务管理**: 保证...

    基于springboot的社区医院信息平台源码数据库.zip

    总结,这个基于SpringBoot的社区医院信息平台项目,集成了多种现代开发技术,旨在为社区医院提供高效、便捷的信息管理解决方案。通过深入学习和理解该项目源码,开发者可以进一步掌握Java Web开发技巧,为实际项目...

    java进销存java进销存java进销存java进销存

    4. 测试:单元测试、集成测试确保功能正常,性能测试确保系统稳定。 5. 部署上线:在服务器上配置运行环境,部署应用,进行压力测试和监控。 六、移动_scm子文件可能包含的内容 "mobile_scm"可能是移动设备上的供应...

    基于ssm的医疗管理系统

    Spring MVC还支持多种视图技术,如JSP、Thymeleaf等,方便展示数据。 **MyBatis** 是一个优秀的持久层框架,它简化了数据库操作,将SQL语句与Java代码分离,提供了动态SQL的功能。在医疗管理系统中,MyBatis可以...

    小型图书管理系统 asp.net

    为了提高系统性能,可以采用缓存技术如ASP.NET缓存或Redis来减少数据库查询,同时通过异步编程和页面分页来提升用户体验。另外,数据库索引的合理设计和优化也是提升查询速度的关键。 【总结】 小型图书管理系统...

    进销存管理系统

    7. **性能优化**: 为了保证系统的高效运行,可能会涉及到数据库索引优化、缓存策略(如Redis)、批处理和异步处理等技术。同时,安全性方面,系统可能需要实现用户权限控制、数据加密、防止SQL注入等功能。 8. **...

    基于springboot的医院门诊管理系统.zip

    - **财务管理**:处理挂号费、诊疗费、药品费用的计算和结算,支持多种支付方式。 - **报表统计**:生成各类运营报告,如就诊人次、收入统计、药品消耗分析等,为决策提供数据支持。 在系统设计时,可以采用MVC...

    ssm药店销售管理系统.rar

    - 性能优化:使用缓存技术(如Redis)提高数据读取速度,减少数据库压力。 - 异常处理:通过全局异常处理器,统一处理系统运行时可能出现的异常情况。 总结,SSM药店销售管理系统充分利用了Spring、SpringMVC和...

    Hospital:医院管理系统

    而 Redis 的引入,进一步优化了高并发场景下的性能。 系统设计上,通常包含以下几个核心模块: 1. **用户管理**:包括用户注册、登录、权限控制等功能,JWT 的使用确保了安全的用户认证。 2. **资源调度**:如预约...

Global site tag (gtag.js) - Google Analytics