分布式session管理之存储

分布式session的一种处理方式是集中存储和管理,通常可以采用缓存(redis等),考虑单点问题可以考虑双写备份。

在分布式应用中,如何保证session的并发处理是分布式session的重要问题之一。


这里我们分析一种解决方案:

1. 存储工具

ThreadLocal<T>,它是一个辅助存储的工具。

ThreadLocal中的基本存储结构是ThreadLocalMap,其中的基础对象为:WeakReference<T>

WeakReference(弱引用)指当需要某个指向某对象的引用,但又不影响此对象的垃圾收集,应该使用此对象代替一般的 reference。即,这个对象在除了WeakReference以外没有其他引用指向时,可以被垃圾回收,此时弱引用会变为null值。

ThreadLocalMap使用和普通Map相同的方式,只是每个元素都是WeakReference的子类。保证线程回收时,对象能够被垃圾回收。


ThreadLocal中的ThreadLocalMap是被注入存储到Thread中的。ThreadLocalMap的key是ThreadLocal本身(属性进行某种运算得到),而value是不同的ThreadLocal对应的set方法设置的值。每个Thread只会有一个ThreadLocalMap。需要注意的就是,ThreadLocal不是一个存储结构,也不会包含存储结构。所以ThreadLocal可以理解为一个帮助线程存储数据的工具类。

2. 存储

 存储可以选取k-v存储方案,利用框架自身工具获取唯一ID为Key,存储相应数据即可。


阅读更多

没有更多推荐了,返回首页