`
oboaix
  • 浏览: 275288 次
社区版块
存档分类
最新评论

Redis在java中批量操作数据的更新

 
阅读更多

背景:同事说Redis在插入数据时,同样存在插入速度慢,只是get获取时快,通过做实验,完全不是那么回事,同事说的话也根本没有找到有关官方的说法,仅仅是凭几个简单的操作,应该是不能作为依据的。

今天贴出几个批量操作数据的方法(测试的环境是局域网-单机, Linux要快过Windows):

windows:

redis_version:2.8.12
redis_mode:standalone
os:Windows
arch_bits:64
multiplexing_api:winsock_IOCP 

 

 Linux:

redis_version:2.6.17
redis_mode:standalone
os:Linux 3.10.42-52.145.amzn1.x86_64 x86_64
arch_bits:64

(redis_version:2.8.17
redis_mode:standalone
os:Linux 2.6.32-33-server x86_64
arch_bits:64)

这里使用redis的数据类型:hashs 和 lists

一次性插入100000条数据消耗时间,windows在3秒以内,linux在2秒以内。

 

 lists数据类型的操作:

/**
	 * 从尾部开始插入数据(删除并插入新的数据) 队列, 先进先出
	 * @param db
	 * @param key
	 * @param arr
	 * @return
	 */
	public static boolean rpush(RedisAPIDao.Db db, String key, String[] arr){
		JedisPool pool = null;
		Jedis jedis = null;
		boolean ret = false;
		try {
			pool = getPool(key);
			jedis = pool.getResource();
			jedis.select(db.toIntValue());
			if (null != arr && arr.length > 0) {
				jedis.del(key);
				long value = jedis.rpush(key, arr);
				if (value > 0 ) {
					ret = true;
				}
			}

		} catch (Exception e) {
			pool.returnBrokenResource(jedis);
			logger.error(e.getMessage(), e);
			ret = false;
		} finally {
			returnResource(pool, jedis);
		}

		return ret;
	}

 hashs数据操作:

/**
	 * 使用通常的方法,hmset hash
	 * @param db
	 * @param key
	 * @param map
	 * @return
	 */
	public static boolean hsetMap(RedisAPIDao.Db db, String key, Map<String, String> map) {

		JedisPool pool = null;
		Jedis jedis = null;
		try {
			pool = getPool(key);
			jedis = pool.getResource();
			jedis.select(db.toIntValue());
			jedis.hmset(key, map);

		} catch (Exception e) {
			pool.returnBrokenResource(jedis);
			logger.error(e.getMessage(), e);
		} finally {
			returnResource(pool, jedis);
		}

		return true;
	}
	
	/**
	 * 使用批量方式操作Pipeline  hash
	 * @param db
	 * @param key
	 * @param map
	 * @return
	 */
	public static boolean hmset(RedisAPIDao.Db db, String key, Map<String, String> map) {
		JedisPool pool = null;
		Jedis jedis = null;
		try {
			pool = getPool(key);
			jedis = pool.getResource();
			jedis.select(db.toIntValue());
			Pipeline pipeline = jedis.pipelined();
			pipeline.hmset(key, map);
			pipeline.sync();

		} catch (Exception e) {
			pool.returnBrokenResource(jedis);
			logger.error(e.getMessage(), e);
		} finally {
			returnResource(pool, jedis);
		}

		return true;
	}

 

 hash的两种方式效果差不多(Pipeline批量操作方式稍快)。

 

需要jar: jedis-2.4.2.jar

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.4.2</version>
</dependency>

 

 

分享到:
评论

相关推荐

    redis集群批量插入

    总结起来,要在Java中连接Redis集群并批量插入String类型数据,你需要: 1. 配置JedisCluster实例,包含所有集群节点的信息。 2. 创建一个Map对象,存储键值对。 3. 使用`mset`方法执行批量插入。 4. 确保所有键在...

    java操作redis

    下面将详细讨论如何在Java中操作Redis,以及相关的关键知识点。 首先,为了在Java中操作Redis,我们需要一个Java客户端库。最常用的库之一是Jedis,它是由Redis官方推荐的Java客户端。Jedis提供了丰富的API,涵盖了...

    java 对Redis的导入和导出

    在Java开发中,Redis作为一个高性能的键值存储系统,常被用作缓存或数据库,其数据操作便捷高效。为了在不同的服务器之间迁移或者备份Redis中的数据,我们需要实现数据的导入与导出功能。本篇将详细介绍如何使用Java...

    完整的java操作redis demo

    Java操作Redis是一个常见的任务,特别是在大数据处理、缓存管理和分布式系统中。Redis是一个高性能的键值存储系统,常被用于数据库、缓存和消息中间件。Jedis是Java社区广泛使用的Redis客户端,提供了丰富的API来...

    spring-data-redis支持批量操作

    1、基于1.8.0的基础上提供批量的数据操作包括get set del hmget hmset方法 2、使用方法如下: public List&lt;V&gt; pipelineGet(Set&lt;K&gt; keys){ return rt.opsForPipeline().get(keys); } public void pipelineSet...

    Java 读取写Redis里的数据

    在Java编程环境中,Redis是一个非常流行的键值...通过理解和实践这些知识点,你就能成功地在Java中实现读取和写入Redis的数据。同时,结合提供的压缩包文件,你可以在测试类中实践不同的数据类型读写,进一步加深理解。

    redis在java中简单应用

    Redis是一款高性能的键值对数据...通过Jedis或Spring的集成,我们可以轻松地在Java项目中实现各种Redis功能,包括键值存储、数据结构操作、事务处理以及消息传递。记住,正确管理和关闭资源是确保程序稳定运行的关键。

    java redis增删改查样例

    在Java中操作Redis,我们通常会借助于一些客户端库,如Jedis、Lettuce等。本示例将重点讲解如何使用Java与Redis进行基本的增删改查操作。 1. **连接Redis** 在Java中,我们需要先导入相应的库,如Jedis,然后创建...

    jedisRedis的Java客户端

    Jedis作为Java开发者与Redis交互的主要工具,使得在Java应用中集成Redis变得简单而高效。 1. **Jedis的基本使用** - 连接Redis:Jedis实例化时需要指定Redis服务器的IP地址和端口号,可以通过`Jedis jedis = new ...

    Redis的Java客户端Jedis

    在2018年6月10日,Jedis的最新版本为2.9.0,这个版本包含了对Redis各种操作的支持,并且优化了性能,提升了稳定性。 1. **Jedis的基本使用** - **连接Redis服务器**:Jedis通过`Jedis jedis = new Jedis(...

    java操作redis数据库实例

    Java操作Redis数据库是一种常见的数据交互方式,特别是在高并发、低延迟的场景中,Redis作为内存数据库的优势被广泛应用。本文将详细讲解如何使用Java与Redis进行交互,并提供源码实例。 首先,我们需要了解Redis的...

    Redis集成Spring的Java代码

    本篇文章将详细探讨如何通过Java代码实现Redis与Spring的整合,并介绍相关的操作,如增删改查、列表操作以及批量操作,以提高性能。 首先,要集成Redis到Spring项目中,我们需要在项目的`pom.xml`文件中添加Redis的...

    redis实战pdf书和java版源代码

    Java版源代码和Jedis库的结合,让Java开发者可以方便地在Java应用程序中使用Redis。Jedis是Java语言的Redis客户端,它提供了丰富的API,涵盖了Redis的所有命令,包括连接管理、数据操作、事务处理、发布/订阅等功能...

    java操作redis代码和redis工具类相关包资料

    在Java开发中,Redis是一个非常流行的高性能键值...总的来说,这个资料包对于初学者和有一定经验的开发者都是宝贵的资源,它可以帮助你快速上手Java与Redis的集成,理解如何在Java应用中高效地使用Redis进行数据操作。

    Redis客户端Java服务接口封装

    在IT行业中,Redis作为一种高性能的键值数据存储系统,被广泛应用在缓存、数据库和消息队列等场景。本文将围绕“Redis客户端Java服务接口封装”这一主题进行深入探讨,结合给定的`RedisClientTemplate.java`文件,...

    redis导入到处数据备份

    Redis提供了`redis-cli`命令行工具进行数据导入,但如果你需要在Java程序中操作,可以使用Jedis或Lettuce等Java客户端。例如,你可以通过`keys *`获取所有键,然后遍历每个键并使用`get`命令获取其对应的值,最后将...

    redis批量删除以指定内容开头的key

    用java写了个redis批量删除以指定内容开头的key,使用时只需要修改config.json中的配置(host,port,database,delKey:指定的key值开头),然后java -jar demo.jar运行即可

    redis java调用代码

    在Java环境中与Redis进行交互,通常会使用Jedis或Lettuce等客户端库。本文将详细讲解如何使用Java调用Redis,并探讨相关知识点。 一、Jedis库的使用 1. 添加依赖:在你的`pom.xml`文件中添加Jedis的Maven依赖: ``...

    redis in action java代码

    《Redis in Action》是一本深入介绍Redis的书籍,它涵盖了Redis的基本概念、数据结构以及如何在实际项目中高效地使用Redis。这本书通过丰富的实例和Java代码来解释Redis的各种功能,帮助开发者更好地理解和应用Redis...

    详解Java使用Pipeline对Redis批量读写(hmset&hgetall)

    Java使用Pipeline对Redis进行批量读写,主要是针对Redis的hmset和hgetall操作,能够显著提高性能。在常规操作中,每次客户端向Redis发送一个命令,都需要等待服务器的响应,这种模式在网络延迟较大的情况下效率较低...

Global site tag (gtag.js) - Google Analytics