实现本地缓存
参考链接
@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;
}