测试Java操纵Redis系列化性能

使用JDK系列化方式保存5万个user随机对象到Redis
JdkSerializationRedisSerializer是最高效的(毕竟是JDK原生的),但是是序列化的结果字符串是最长的。
系列化方式为JDK存储,保存数量为50000所耗时间:632ms。
使用JSON系列化方式保存5万个user随机对象到Redis
JSON由于其数据格式的紧凑性,序列化的长度是最小的,时间比前者要多一些。
系列化方式为JSON存储,保存数量为50000所耗时间:343ms。
使用Redis的Hash类型保存5万个user随机对象到Redis
系列化方式为Hash存储,保存数量为50000所耗时间:590ms。
将具有同一类规则的数据放到redis中的一个数据容器里,便于查找数据,
使用hash 省内存。在hash类型中,一个key可以对应多个多个field,一个field对应一个value。

@Resource
	private RedisTemplate redisTemplate;
	
	List<User> u = new ArrayList<User>();

	@Test
	public void test() {
		for (int i = 1; i <= 50000; i++) {
			//(1)	ID使用1-5万的顺序号
			Integer id = i;
			//(2)	姓名使用3个随机汉字模拟,可以使用以前自己编写的工具方法
			String name = StringUtil.randomChineseString(3);
			//(3)	性别在女和男两个值中随机
			String sex = StringUtil.randomSex();
			//(4)	手机以13开头+9位随机数模拟
			String iphone = "13" + RandomUtil.randomNumber(9);
			//(5)	邮箱以3-20个随机字母 + @qq.com  | @163.com | @sian.com | @gmail.com | @sohu.com | @hotmail.com | @foxmail.com模拟
			String [] str = {"@qq.com","@163.com","@sian.com","@gmail.com","@sohu.com","@hotmail.com","@foxmail.com"};
			String mailbox = RandomUtil.randomLenthChar(RandomUtil.random(3, 20)) + str[RandomUtil.random(0, str.length-1)];
			//(6生日要模拟18-70岁之间,即日期从1949年到2001年之间
			int birthday = RandomUtil.random(1949, 2001);
			User user = new User(id, name,sex, iphone, mailbox, birthday);
			u.add(user);
		}
		
		//存入redis,JDK方式
		  ListOperations<String,User> opsForList = redisTemplate.opsForList(); long
		  start = System.currentTimeMillis(); opsForList.leftPushAll("user_jdk", u);
		  long end = System.currentTimeMillis(); Long size =
		  opsForList.size("user_jdk");
		  System.out.println("系列化方式为JDK存储,保存数量为"+size+"所耗时间:"+(end-start));
		 
		 
		
		//存入redis,JSON方式
		  ListOperations<String,User> opsForList1 = redisTemplate.opsForList(); long
		  start1 = System.currentTimeMillis(); opsForList1.leftPushAll("user_json", u);
		  long end1 = System.currentTimeMillis(); Long size1 =
		  opsForList1.size("user_json");
		  System.out.println("系列化方式为JSON存储,保存数量为"+size1+"所耗时间:"+(end1-start1));
		 
		 
	}
	
	@Test
	public void HashTest() {
		Map<String,User> hashMap = new HashMap<String,User>();
		for (int i = 1; i <= 50000; i++) {
			//(1)	ID使用1-5万的顺序号
			Integer id = i;
			//(2)	姓名使用3个随机汉字模拟,可以使用以前自己编写的工具方法
			String name = StringUtil.randomChineseString(3);
			//(3)	性别在女和男两个值中随机
			String sex = StringUtil.randomSex();
			//(4)	手机以13开头+9位随机数模拟
			String iphone = "13" + RandomUtil.randomNumber(9);
			//(5)	邮箱以3-20个随机字母 + @qq.com  | @163.com | @sian.com | @gmail.com | @sohu.com | @hotmail.com | @foxmail.com模拟
			String [] str = {"@qq.com","@163.com","@sian.com","@gmail.com","@sohu.com","@hotmail.com","@foxmail.com"};
			String mailbox = RandomUtil.randomLenthChar(RandomUtil.random(3, 20)) + str[RandomUtil.random(0, str.length-1)];
			//(6生日要模拟18-70岁之间,即日期从1949年到2001年之间
			int birthday = RandomUtil.random(1949, 2001);
			
			User user = new User(id, name,sex, iphone, mailbox, birthday);
			hashMap.put(i+"", user);
		}
				HashOperations<String,String,User> opsForHash = redisTemplate.opsForHash();
				 //获取时间
				long start = System.currentTimeMillis();
				//存储
				opsForHash.putAll("user_hash", hashMap);
				 //获取时间
				long end = System.currentTimeMillis();
				//获取大小
				Long size = opsForHash.size("user_hash");
				System.out.println("系列化方式为Hash存储,保存数量为"+size+"所耗时间:"+(end-start));
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值