Maven项目搭配redis!!!运用三种方式序列化50000对象存储进redis,以及三种序列化的特点总结!!!

首先,创建Maven项目,还要保证自己的虚拟机、redis处于正常启动状态下!

一、配置文件

导入对应的配置文件,以及pom文件

确认项目能正常运行,需要用到的jar包都有依赖
确认项目能正常运行,需要用到的jar包都有依赖

二、创建实体类

创建自己的实体类,并实现Serializable接口

实现对应的构造方法,getter和setter方法,以及toString方法
实现对应的构造方法,getter和setter方法,以及toString方法

三、创建对应的测试类

创建测试类

启动spring-redis.xml,并且创建RedisTemplate对象,并且注入该对象
启动spring-redis.xml,并且创建RedisTemplate对象,并且注入该对象

四、编写测试代码

测试jdk序列化并存储
@Test
	public void JDKTest() {
		List<User> users=new ArrayList<User>();
		//定义邮箱结尾数组
		String []email= {"@qq.com","@163.com","@sian.com","@gmail.com","@sohu.com","@hotmail.com","@foxmail.com"};
		//定义性别数组
		String []gender= {"男","女"};
		for (int i = 1; i <= 50000; i++) {
			User user=new User();
			//ID使用1-5万的顺序号
			user.setId(i);
			//姓名使用3个随机汉字模拟,可以使用以前自己编写的工具方法
			user.setName(StringUtil.randomChineseString(3));
			//性别在女和男两个值中随机
			user.setGender(gender[RandomUtil.random(0,1)]);
			//手机以13开头+9位随机数模拟
			user.setPhone("13"+RandomUtil.randomNumber(9));
			//邮箱以3-20个随机字母 + @qq.com  | @163.com | @sian.com | @gmail.com | @sohu.com | @hotmail.com | @foxmail.com模拟
			user.setEmail(RandomUtil.randomString(RandomUtil.random(3,20))+email[RandomUtil.random(0,6)]);
			//生日要模拟18-70岁之间,即日期从1949年到2001年之间
			Calendar calendar=Calendar.getInstance();
			//设置初始时间
			calendar.set(1949,0,1);
			//设置关闭时间
			Calendar calendar2=Calendar.getInstance();
			calendar2.set(2001,11,31);
			//格式化时间
			SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
			user.setBirthday(""+format.format(DateUtil.randomDate(calendar.getTime(),calendar2.getTime())));
			users.add(user);
			}
			ListOperations opsForList = redisTemplate.opsForList();
			//设置存储启动时间
			Long long1=System.currentTimeMillis();
			//开始存储
			opsForList.leftPushAll("user_jdk",users);
			//设置存数结束时间
			Long long2=System.currentTimeMillis();
			//输出结果
			System.out.println("序列化方式:jdk,保存数量:"+users.size()+",所耗时间:"+(long2-long1));
	}
测试json序列化并存储
@Test
public void JSONTest() {
	List<User> users=new ArrayList<User>();
	String []email= {"@qq.com","@163.com","@sian.com","@gmail.com","@sohu.com","@hotmail.com","@foxmail.com"};
	String []gender= {"男","女"};
	for (int i = 1; i <= 50000; i++) {
		User user=new User();
		//ID使用1-5万的顺序号
		user.setId(i);
		//姓名使用3个随机汉字模拟,可以使用以前自己编写的工具方法
		user.setName(StringUtil.randomChineseString(3));
		//性别在女和男两个值中随机
		user.setGender(gender[RandomUtil.random(0,1)]);
		//手机以13开头+9位随机数模拟
		user.setPhone("13"+RandomUtil.randomNumber(9));
		//邮箱以3-20个随机字母 + @qq.com  | @163.com | @sian.com | @gmail.com | @sohu.com | @hotmail.com | @foxmail.com模拟
		user.setEmail(RandomUtil.randomString(RandomUtil.random(3,20))+email[RandomUtil.random(0,6)]);
		//生日要模拟18-70岁之间,即日期从1949年到2001年之间
		Calendar calendar=Calendar.getInstance();
		calendar.set(1949,0,1);
		Calendar calendar2=Calendar.getInstance();
		calendar2.set(2001,11,31);
		SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
		user.setBirthday(""+format.format(DateUtil.randomDate(calendar.getTime(),calendar2.getTime())));
		users.add(user);
		}
		ListOperations opsForList = redisTemplate.opsForList();
		Long long1=System.currentTimeMillis();
		opsForList.leftPushAll("user_json",users);
		Long long2=System.currentTimeMillis();
		System.out.println("序列化方式:json,保存数量:"+users.size()+",所耗时间:"+(long2-long1));
}
测试hash序列化并存储
@Test
public void HashTest() {
	Map<String,User> map=new HashMap<String, User>();
	String []email= {"@qq.com","@163.com","@sian.com","@gmail.com","@sohu.com","@hotmail.com","@foxmail.com"};
	String []gender= {"男","女"};
	for (int i = 1; i <= 50000; i++) {
		User user=new User();
		//ID使用1-5万的顺序号
		user.setId(i);
		//姓名使用3个随机汉字模拟,可以使用以前自己编写的工具方法
		user.setName(StringUtil.randomChineseString(3));
		//性别在女和男两个值中随机
		user.setGender(gender[RandomUtil.random(0,1)]);
		//手机以13开头+9位随机数模拟
		user.setPhone("13"+RandomUtil.randomNumber(9));
		//邮箱以3-20个随机字母 + @qq.com  | @163.com | @sian.com | @gmail.com | @sohu.com | @hotmail.com | @foxmail.com模拟
		user.setEmail(RandomUtil.randomString(RandomUtil.random(3,20))+email[RandomUtil.random(0,6)]);
		//生日要模拟18-70岁之间,即日期从1949年到2001年之间
		Calendar calendar=Calendar.getInstance();
		calendar.set(1949,0,1);
		Calendar calendar2=Calendar.getInstance();
		calendar2.set(2001,11,31);
		SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
		user.setBirthday(""+format.format(DateUtil.randomDate(calendar.getTime(),calendar2.getTime())));
		map.put("user"+i,user);
	}
	HashOperations opsForHash = redisTemplate.opsForHash();
	Long long1=System.currentTimeMillis();
	opsForHash.putAll("user_hash",map);
	Long long2=System.currentTimeMillis();
	System.out.println("序列化方式:hash_jdk,保存数量:"+map.size()+",所耗时间:"+(long2-long1));
}
五、代码测试

1、修改配置文件

配置文件如下

<?xml version="1.0" encoding="UTF-8"?>

<!-- 第1步:加载配置文件 -->
<context:property-placeholder location="classpath:redis.properties"/>

<!-- 配置redis的操作 -->
<!-- redis连接池 -->  
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
	<property name="maxTotal" value="${redis.maxActive}" />
	<property name="maxIdle" value="${redis.maxIdle}" />
	<property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean>

<!-- 连接池配置,类似数据库连接工厂-->
<bean id="jedisConnectionFactory"
	class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
	<property name="hostName" value="${redis.host}"></property>
	<property name="port" value="${redis.port}"></property>
	<!-- <property name="password" value="${redis.pass}"></property> -->
	<property name="poolConfig" ref="poolConfig"/>
</bean>

<!--redis操作模版,使用该对象可以操作redis  -->  
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >    
    <property name="connectionFactory" ref="jedisConnectionFactory" />    
    <!--如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!!  -->    
    <property name="keySerializer" >    
        <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />    
    </property>    
   <!--  <property name="valueSerializer" >    
        <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />    
    </property>  -->   
    <property name="valueSerializer" >    
        <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />    
    </property>    
    
    
    <property name="hashKeySerializer">    
        <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>    
    </property>    
    <property name="hashValueSerializer">    
        <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>    
    </property>    
    <!--开启事务  -->  
    <property name="enableTransactionSupport" value="true"/>  
</bean > 

2、修改序列化方式

依次启用图中两种序列化方式、hash的不用修改。
在这里插入图片描述
在这里插入图片描述

3、运行代码

注意:存储数量相同,才有对比性。
在这里插入图片描述
查询jdk存储的个别数据
在这里插入图片描述

在这里插入图片描述
查询json存储的个别数据

在这里插入图片描述

在这里插入图片描述
查询hash存储的个别数据
在这里插入图片描述

总结、

使用jdk序列化所需时间较长,数据加密比较好,比较安全.
使用json序列化用时较短,但是加密方式容易被破解,比较不安全。
使用hash序列化,用时一般,加密也很棒,比较安全。
建议使用hash_jdk存储!

需要具体项目

有些详情看不懂的可以去github,看具体代码

github链接:
https://github.com/xiaochuang2019/xiaochuang-redis-test.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值