高性能框架

本文通过实验对比了使用JDK序列化、JSON序列化和Hash类型在Redis中存储大量数据的性能。结果显示,JSON序列化在速度上表现最优,而Hash类型虽然在某些场景下可能更适用,但在速度上落后于前两者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第二周周考

JAVA 操纵Redis系列化性能

随机生成数据

随机生成数据

使用JDK系列化方式保存5万条数据

jdk的配置文件

	<!-- jdk序列化 -->
		<property name="valueSerializer">
			<bean
				class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
		</property>

运行代码

@Test
	public void testJDK() {

		long t1 = System.currentTimeMillis();

		for (int i = 0; i < 50000; i++) {
			User u = new User();
			u.setId(i);
//			随机生成姓名
			u.setName(StringUtil.generateChineseName());
//			随机生成性别
			u.setGender(UserUtils.getSex());
//			随机生成13开头的号码
			u.setPhone("13" + RandomUtil.randomNumber(9));
//			随机生成邮箱
			u.setEmail(UserUtils.getMail());
//			随机生成生日
			u.setBirthday(UserUtils.getBirthday());

			redisTemplate.opsForList().leftPushAll("user_jdk", u);

		}

		long t2 = System.currentTimeMillis();

		System.out.println("使用的是jdk的序列化方式");
		System.out.println("共保存了50000条数据");
		System.out.println("总时间" + (t2 - t1));

	}

运行结果

在这里插入图片描述

使用JSON系列化方式保存5万条数据

配置文件

	<!-- json序列化 -->
		<property name="valueSerializer">
			<bean		
			class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
		</property>

运行代码

@Test
	public void testJSON() {

		long t1 = System.currentTimeMillis();

		for (int i = 0; i < 50000; i++) {
			User u = new User();
			u.setId(i);
//			随机生成姓名
			u.setName(StringUtil.generateChineseName());
//			随机生成性别
			u.setGender(UserUtils.getSex());
//			随机生成13开头的号码
			u.setPhone("13" + RandomUtil.randomNumber(9));
//			随机生成邮箱
			u.setEmail(UserUtils.getMail());
//			随机生成生日
			u.setBirthday(UserUtils.getBirthday());

			redisTemplate.opsForList().leftPushAll("user_json", u);

		}

		long t2 = System.currentTimeMillis();

		System.out.println("使用的是jdk的序列化方式");
		System.out.println("共保存了50000条数据");
		System.out.println("总时间" + (t2 - t1));

	}

运行结果

在这里插入图片描述

利用hash类型保存5万条数据

配置文件

<!-- hash小键的序列化 -->
		<property name="hashKeySerializer">
			<bean
				class="org.springframework.data.redis.serializer.StringRedisSerializer" />
		</property>
		
		<!-- hash值jdk序列化 -->
<!-- 		<property name="hashValueSerializer">
			<bean
				class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
		</property> -->
		<!-- hash值json序列化 -->
		<property name="hashValueSerializer">
			<bean
				class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
		</property>

运行代码


	@Test
	public void testHash() {

		long t1 = System.currentTimeMillis();

		HashMap<String, User> map = new HashMap<String, User>();

		for (int i = 0; i < 50000; i++) {
			User u = new User();
			u.setId(i);
//			随机生成姓名
			u.setName(StringUtil.generateChineseName());
//			随机生成性别
			u.setGender(UserUtils.getSex());
//			随机生成13开头的号码
			u.setPhone("13" + RandomUtil.randomNumber(9));
//			随机生成邮箱
			u.setEmail(UserUtils.getMail());
//			随机生成生日
			u.setBirthday(UserUtils.getBirthday());
			map.put(i + "", u);
			
			redisTemplate.opsForHash().put("users"+i, "user"+i, u.toString());
		}

		redisTemplate.opsForHash().putAll("user_hash", map);

		long t2 = System.currentTimeMillis();

		System.out.println("使用的是jdk的序列化方式");
		System.out.println("共保存了50000条数据");
		System.out.println("总时间" + (t2 - t1));

	}

运行结果

在这里插入图片描述

测试结果

用JDK方法存入redis使用时间为13361s
已成功存入JDK方法50000条redis数据

用JSON方法存入redis使用时间为11915s
已成功存入JSON方法50000条redis数据

用Hash方法存入redis使用时间为27997s
已成功存入Hash方法50000条redis数据

总结:每个方法最少运行两次 JSON最快 hash最慢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值