Java 之 批量从mysql导入Redis
一、pom
从插入 redis 数据需要转成 JSON => 需要 jackson 的三个包!
java 操作 redis => 使用 Jedis
<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!-- java 拿到 List<Object> => 转成 JSON --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.10.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.10.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.10.0</version> </dependency> <!-- redis --> <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.1.0</version> </dependency> </dependencies>
二、目录
三、配置
mybatis.cfg.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <typeAlias type="com.njbdqn.mor.entity.SalrsOrder" alias="so"></typeAlias> </typeAliases> <environments default="cm"> <environment id="cm"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://192.168.56.111:3306/sales_source"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/so.xml"></mapper> </mappers> </configuration>
mapper/so.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.njbdqn.mor.dao.SalesOrderDao">
<select id="findAll" resultType="so">
SELECT order_number AS orderNumber,
customer_number AS customerNumber,
product_code AS productCode,
order_date AS orderDate,
entry_date AS entryDate,
order_amount AS orderAmount FROM sales_order
</select>
</mapper>
四、代码
实体类:
public class SalesOrder { private int orderNumber; private int customerNumber; private int productCode; private Date orderDate; private Date entryDate; private int orderAmount ;
dao 层:
public interface SalesOrderDao { List<SalesOrder> findAll();}
Test 层:
public static String tucketNo(int i){ // 此方法如果 String 值特别大会出现负数 // hadoop 默认的 hashpartitioner 中为了解决这个问题,使用与运算:(key.hashCode() & Integer.MAX_VALUE) % numReduceTasks; return (i+"").hashCode()%100000+""; }</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> main(String[] args) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception { Reader read </span>= Resources.getResourceAsReader("mybatis.cfg.xml"<span style="color: rgba(0, 0, 0, 1)">); SqlSessionFactory factory </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> SqlSessionFactoryBuilder().build(read); SqlSession session </span>=<span style="color: rgba(0, 0, 0, 1)"> factory.openSession(); SalesOrderDao sod </span>= session.getMapper(SalesOrderDao.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">); List</span><SalesOrder> all =<span style="color: rgba(0, 0, 0, 1)"> sod.findAll(); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 转化成json,在redis默认第0个hashmap中,salesorder这个key中存所有记录</span> ObjectMapper om = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ObjectMapper(); Jedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> Jedis("192.168.56.111",6379<span style="color: rgba(0, 0, 0, 1)">); </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> (SalesOrder so :all){ <span style="color: rgba(51, 153, 102, 1)">// 存JSON格式的String</span> jedis.lpush(</span>"salesorder"<span style="color: rgba(0, 0, 0, 1)">,om.writeValueAsString(so)); } jedis.close(); session.close();</span></pre></code-box>
五、验证 Redis 中数据
192.168.56.111:6379> LLEN salesorder (integer) 100000 192.168.56.111:6379> LINDEX salesorder 100 "{\"orderNumber\":99900,\"customerNumber\":2,\"productCode\":3,\"orderDate\":1531929600000,\"entryDate\":1531929600000,\"orderAmount\":1454}"
__EOF__