springmvc中,定义一个static变量,那么所有用户请求取到的该static变量是同一个吗

zaihuilvcha
  • 65

用springmvc写一个的javaweb项目,在这个项目中,我定义了一个static类型的map,用于存放一些记录数据。我希望,所有访问网站的用户,取到的该staitc类型的map都是同一个实例。比如A用户访问该map,并在这个map中添加了一条记录,那么当B用户请求时,可以看到这个map中有A刚刚添加的数据
这样操作能否实现『所有用户共享一个static变量』的要求呢?
为了实现这个要求,使用static变量是否合适?还是我应该用redis之类的把它存下来呢?

回复
阅读 5k
7 个回答
Simeone_xu
  • 1.3k
✓ 已被采纳

static 变量可以,刚刚的回答有点错误,和是否单例模式没有关系。static 变量只存在一份。

业务大了之后,一个javaweb实例肯定是不够的,建议使用redis。

可以使用application对象

1.static 修饰的变量属于类,保存有一份。当多线程访问该代码的时候,需要考虑并发操作。如果你把锁都加好了,那么每个用户都可以看到一份数据,否则会有线程安全的问题存在。
这种情况建议使用concurrent下的map好一点
2.用redis也可以缓存这些东西。

static变量是可以的,但是不建议直接使用map,建议使用线程安全的map

不建议你这样使用静态变量,正像cauhn说的那样,如果网站规模大了,你很可能需要同时运行多个JVM进程(甚至跨服务器)做负载均衡,这时候进程内部的同步手段就不能用了,只能用跨进程的数据同步方式,比如数据库或者redis之类的缓存系统。

static修饰的变量单独存在分区里,只有一份

宣传栏