|
@@ -20,6 +20,7 @@ import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -98,20 +99,65 @@ public class HomeBookServiceImpl extends ServiceImpl<HomeBookMapper, HomeBook> i
|
|
|
list.add(homeBookRespDto);
|
|
|
});
|
|
|
|
|
|
+ // 如果从mysql中取数据 再将数据存储到redis中
|
|
|
+ saveHomeBook(homeBookList, collected);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
+ // 将数据存储到redis中
|
|
|
+ // 这里将已经从mysql中查到的数据传入 避免二次查询
|
|
|
+ public void saveHomeBook(List<HomeBook> homeBookList, Map<Long, BookInfo> bookInfoMap) {
|
|
|
+ ListOperations listOperations = redisTemplate.opsForList();
|
|
|
+ HashOperations hashOperations = redisTemplate.opsForHash();
|
|
|
+
|
|
|
+ List<String> bookIdList0 = new ArrayList<>();
|
|
|
+ List<String> bookIdList1 = new ArrayList<>();
|
|
|
+ List<String> bookIdList2 = new ArrayList<>();
|
|
|
+ List<String> bookIdList3 = new ArrayList<>();
|
|
|
+ List<String> bookIdList4 = new ArrayList<>();
|
|
|
+ Map<String, String> homeBookMap = new HashMap<>();
|
|
|
+ for (HomeBook homeBook : homeBookList) {
|
|
|
+ Long bookId = homeBook.getBookId();
|
|
|
+ switch (homeBook.getType().intValue()) {
|
|
|
+ case 0 -> bookIdList0.add(String.valueOf(bookId));
|
|
|
+ case 1 -> bookIdList1.add(String.valueOf(bookId));
|
|
|
+ case 2 -> bookIdList2.add(String.valueOf(bookId));
|
|
|
+ case 3 -> bookIdList3.add(String.valueOf(bookId));
|
|
|
+ case 4 -> bookIdList4.add(String.valueOf(bookId));
|
|
|
+ }
|
|
|
+
|
|
|
+ BookInfo bookInfo = bookInfoMap.get(bookId);
|
|
|
+ String json = gson.toJson(bookInfo);
|
|
|
+ homeBookMap.put(bookId.toString(), json);
|
|
|
+ }
|
|
|
+ String key0 = "book:homeBookList0";
|
|
|
+ String key1 = "book:homeBookList1";
|
|
|
+ String key2 = "book:homeBookList2";
|
|
|
+ String key3 = "book:homeBookList3";
|
|
|
+ String key4 = "book:homeBookList4";
|
|
|
+ listOperations.rightPushAll(key0, bookIdList0);
|
|
|
+ listOperations.rightPushAll(key1, bookIdList1);
|
|
|
+ listOperations.rightPushAll(key2, bookIdList2);
|
|
|
+ listOperations.rightPushAll(key3, bookIdList3);
|
|
|
+ listOperations.rightPushAll(key4, bookIdList4);
|
|
|
+
|
|
|
+ String hashKey = "book:bookHash";
|
|
|
+ hashOperations.putAll(hashKey, homeBookMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 从redis中取数据
|
|
|
public List<HomeBookRespDto> allHomeBookFromRedis() {
|
|
|
List<HomeBookRespDto> homeBookRespDtoList = new ArrayList<>();
|
|
|
ListOperations listOperations = redisTemplate.opsForList();
|
|
|
HashOperations hashOperations = redisTemplate.opsForHash();
|
|
|
|
|
|
- String key0 = "homeBookList0";
|
|
|
- String key1 = "homeBookList1";
|
|
|
- String key2 = "homeBookList2";
|
|
|
- String key3 = "homeBookList3";
|
|
|
- String key4 = "homeBookList4";
|
|
|
- String hashKey = "bookHash";
|
|
|
+ // 对应5个类型的数据 比如homeBookList0 对应home_book表中type=0
|
|
|
+ String key0 = "book:homeBookList0";
|
|
|
+ String key1 = "book:homeBookList1";
|
|
|
+ String key2 = "book:homeBookList2";
|
|
|
+ String key3 = "book:homeBookList3";
|
|
|
+ String key4 = "book:homeBookList4";
|
|
|
+ String hashKey = "book:bookHash";
|
|
|
List<String> bookIdList0 = listOperations.range(key0, 0, -1);
|
|
|
List<String> bookIdList1 = listOperations.range(key1, 0, -1);
|
|
|
List<String> bookIdList2 = listOperations.range(key2, 0, -1);
|
|
@@ -119,7 +165,9 @@ public class HomeBookServiceImpl extends ServiceImpl<HomeBookMapper, HomeBook> i
|
|
|
List<String> bookIdList4 = listOperations.range(key4, 0, -1);
|
|
|
|
|
|
List<String> current = bookIdList0;
|
|
|
+ // 兼容了数据为空的情况
|
|
|
for (int i = 0; i < 5; i++) {
|
|
|
+ // 从第一个list 处理到第五个
|
|
|
if (i == 1) current = bookIdList1;
|
|
|
if (i == 2) current = bookIdList2;
|
|
|
if (i == 3) current = bookIdList3;
|