实现本地缓存
参考链接
@Slf4j
public class ThreadLocalCacheTest {
private static final ThreadLocal<Map<Integer, User>> USER_THREAD_LOCAL = ThreadLocal.withInitial(HashMap::new);
@Test
public void test(){
try{
List<Integer> userIdList = Arrays.asList(1, 2, 3, 4, 3, 2);
for (Integer userId : userIdList) {
User userById = getUserById(userId);
log.info(JSON.toJSONString(userById));
}
}finally {
USER_THREAD_LOCAL .remove();
}
}
private User getUserById(Integer id){
User user = USER_THREAD_LOCAL .get().get(id);
if (Objects.nonNull(user)){
log.info("从本地缓存中获取, id:[{}], user:[{}]", id, JSON.toJSONString(user));
return user;
}
user = testData(id);
USER_THREAD_LOCAL .get().put(id, user);
return user;
}
private User testData(Integer id) {
List<User> list = Lists.newArrayList();
list.add(new User(1, "username1", "13000000001", "address1" ));
list.add(new User(2, "username2", "13000000002", "address2" ));
list.add(new User(3, "username3", "13000000003", "address3" ));
list.add(new User(4, "username4", "13000000004", "address4" ));
Map<Integer, User> collect = list.stream().collect(Collectors.toMap(User::getId, Function.identity()));
return collect.get(id);
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User{
private Integer id;
private String username;
private String moblie;
private String address;
}