|
@@ -11,8 +11,10 @@ import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.data.redis.core.SessionCallback;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Collection;
|
|
|
import java.util.Date;
|
|
|
+import java.util.LinkedHashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Set;
|
|
@@ -90,7 +92,66 @@ public class RedisUtil {
|
|
|
* @return
|
|
|
*/
|
|
|
public <T> void multiSet(Map<String, T> map) {
|
|
|
- redisTemplate.opsForValue().multiSet(map);
|
|
|
+ putHashMap("ffff", map);
|
|
|
+ Map<String, T> sonMap = new LinkedHashMap<>();
|
|
|
+ int j = 1;
|
|
|
+ for (String key : map.keySet()) {
|
|
|
+ sonMap.put(key, map.get(key));
|
|
|
+ if (j / 5000 > 0 && j % 5000 == 0) {
|
|
|
+ redisTemplate.opsForValue().multiSet(sonMap);
|
|
|
+ System.out.println("添加redis");
|
|
|
+ sonMap.clear();
|
|
|
+ }
|
|
|
+ j++;
|
|
|
+ }
|
|
|
+ // System.out.println(map.size());
|
|
|
+ // int threadNum = 1; // 推荐的总线程数 = cpu个数 * 每个cpu的核数
|
|
|
+ // List<Map<String, T>> threadData = divideByCopies(map, threadNum);
|
|
|
+ // int sum = 0;
|
|
|
+ // for (Map<String, T> map1 : threadData) {
|
|
|
+ // sum += map1.size();
|
|
|
+ // }
|
|
|
+ // System.out.println(sum == map.size());
|
|
|
+ //
|
|
|
+ // List<Future<Boolean>> list = new ArrayList<>();
|
|
|
+ // ExecutorService executor = Executors.newFixedThreadPool(threadNum);
|
|
|
+ // for (int i = 0; i < threadNum; i++) {
|
|
|
+ // final int index = i; // 这一行代码很重要,如果使用成员变量,下面会报错
|
|
|
+ // Future<Boolean> future = executor.submit(new Callable<Boolean>() {
|
|
|
+ // @Override
|
|
|
+ // public Boolean call() {
|
|
|
+ // Map<String, T> data = threadData.get(index);
|
|
|
+ // redisTemplate.opsForValue().multiSet(data);
|
|
|
+ // return true;
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ // list.add(future);
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // 拼接返回数据
|
|
|
+ // System.out.println(list.size());
|
|
|
+ // for (int i = 0; i < list.size(); i++) {
|
|
|
+ // Future<Boolean> future = list.get(i);
|
|
|
+ // while (!future.isDone()) {
|
|
|
+ // ; // 这一行代码很重要
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ System.out.println("添加完毕");
|
|
|
+ }
|
|
|
+
|
|
|
+ public <T> List<Map<String, T>> divideByCopies(Map<String, T> originList, int num) {
|
|
|
+ List<Map<String, T>> list = new ArrayList<>();
|
|
|
+ if (originList == null || originList.isEmpty() || num < 0) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ for (int i = 0; i < num; i++) {
|
|
|
+ list.add(new LinkedHashMap<>());
|
|
|
+ }
|
|
|
+ int j = 0;
|
|
|
+ for (String key : originList.keySet()) {
|
|
|
+ list.get(j % num).put(key, originList.get(key));
|
|
|
+ }
|
|
|
+ return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -294,7 +355,7 @@ public class RedisUtil {
|
|
|
* @param key
|
|
|
* @param map
|
|
|
*/
|
|
|
- public void putHashMap(String key, Map<String, Object> map) {
|
|
|
+ public <T> void putHashMap(String key, Map<String, T> map) {
|
|
|
if (MapUtils.isNotEmpty(map)) {
|
|
|
redisTemplate.opsForHash().putAll(key, map);
|
|
|
}
|