使用Redis并发问题的Spring会话

时间:2016-03-24 17:50:46

标签: java spring session redis spring-session

我使用Spring Session和Redis建立了一个Web服务。 当我调用每个Web服务操作时,会话对象从redis实现,并且当操作完成时,此对象将保存到redis服务器。 当我想要更改会话的值并且同一会话同时运行多个操作时,会出现问题。如果更改会话的操作不是最新完成,则执行更改将丢失(每个操作都会保存自己的会话)。是否可以避免此问题向webservice指示只能保存会话对象的一些特殊操作而不是所有操作?

对我来说错误的代码是这样的:

@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION,  
       proxyMode=ScopedProxyMode.TARGET_CLASS)
public class SessionInfo implements Serializable
{
    private String sellerName;
    public String getSellerName() { 
         return (sellerName==null) ? "" : sellerName; }
    public void setSellerName(String sellerName) { 
         this.sellerName = sellerName;}
}

如果我调用操作A()并且它更改卖方名称调用setSellerName()并且此调用是在执行另一个名为B()的操作期间加载SessionInfo但不更改它且{ {1}}在A()之前完成我丢失了卖家名称更改,因为B()完成时会覆盖B()

设置的值

0 个答案:

没有答案