用springmvc写一个的javaweb项目,在这个项目中,我定义了一个static类型的map,用于存放一些记录数据。我希望,所有访问网站的用户,取到的该staitc类型的map都是同一个实例。比如A用户访问该map,并在这个map中添加了一条记录,那么当B用户请求时,可以看到这个map中有A刚刚添加的数据
这样操作能否实现『所有用户共享一个static变量』的要求呢?
为了实现这个要求,使用static变量是否合适?还是我应该用redis之类的把它存下来呢?
用springmvc写一个的javaweb项目,在这个项目中,我定义了一个static类型的map,用于存放一些记录数据。我希望,所有访问网站的用户,取到的该staitc类型的map都是同一个实例。比如A用户访问该map,并在这个map中添加了一条记录,那么当B用户请求时,可以看到这个map中有A刚刚添加的数据
这样操作能否实现『所有用户共享一个static变量』的要求呢?
为了实现这个要求,使用static变量是否合适?还是我应该用redis之类的把它存下来呢?
1.static 修饰的变量属于类,保存有一份。当多线程访问该代码的时候,需要考虑并发操作。如果你把锁都加好了,那么每个用户都可以看到一份数据,否则会有线程安全的问题存在。
这种情况建议使用concurrent下的map好一点
2.用redis也可以缓存这些东西。
不建议你这样使用静态变量,正像cauhn说的那样,如果网站规模大了,你很可能需要同时运行多个JVM进程(甚至跨服务器)做负载均衡,这时候进程内部的同步手段就不能用了,只能用跨进程的数据同步方式,比如数据库或者redis之类的缓存系统。
15 回答8.2k 阅读
8 回答5.9k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.2k 阅读✓ 已解决
1 回答2.9k 阅读✓ 已解决
3 回答9.2k 阅读
2 回答3k 阅读✓ 已解决
2 回答4.8k 阅读
2 回答10.7k 阅读✓ 已解决
static 变量可以,刚刚的回答有点错误,和是否单例模式没有关系。static 变量只存在一份。