用ThreadLocal去存储用户信息。如果是100w同时登录,你咋搞。
时间: 2024-10-19 22:12:14 浏览: 23
SpringBoot+SpringCloud用户信息微服务传递实现解析
ThreadLocal是一种线程本地变量,它保证每个线程都拥有独立的副本,可以在线程间共享数据而不会相互干扰。如果要在高并发场景下,如100万用户同时登录,使用ThreadLocal存储用户信息可以按以下方式进行:
1. **避免同步**:ThreadLocal的设计初衷就是为了解决线程安全问题,因此,在每个线程内部操作其ThreadLocal变量是非常快速的,不需要额外的锁竞争。
2. **用户唯一标识**:对于每一个用户的唯一标识,比如用户ID,可以作为ThreadLocal的key,每个新登录的用户都会得到一个新的ThreadLocal实例,存储其特定的信息。
3. **高效缓存**:由于每个请求对应的是独立的线程,可以直接从当前线程的ThreadLocal中获取或设置用户信息,减少了全局变量查找的时间开销。
4. **清理机制**:当用户会话结束或者线程生命周期结束后,应该考虑移除对应的ThreadLocal实例,释放内存资源。例如,可以在适当的地方手动清除,或者依赖于垃圾回收机制自动处理。
```java
// 示例代码
ThreadLocal<UserInfo> currentUser = new ThreadLocal<>();
public void login(User user) {
currentUser.set(new UserInfo(user));
// 用户操作...
}
public User getCurrentUser() {
return currentUser.get(); // 获取当前线程的用户信息
}
```
阅读全文