不需要进数据库,直接在业务层里加锁,需要修改时检查该条数据是否被锁,同时设置超时策略
可以用全局的cache来做

解决方案 »

  1.   

    呵呵,楼主的这需求有些特殊一般像你第一次说的,一用户编辑一行数据时,为防止别的用户操作该行数据,这种需求,我一般是选择使用数据库自身带有的锁,也就是我们常说的事务锁,如果你没玩过,可以谷歌一下  排他锁  共享锁 这几个关键字。这种事务锁对于像在线抽奖之类的网站,非常有用,它可以直接锁住整个表,细一点的,锁住表中的某一行,据官方说的,终极控制的话,可以锁住表中的某一行的某一列去。
    而你说的第二种需求,数据表里增加特殊字段来控制用户不能同 时在多地登录,对于这一点,使用事务锁解决不了问题的,我给你个思路,你除了增加现在的字段外,额外添加另外两个字段,比如,再增加一个 锁住人ID  , 还增加一个 最近被锁住的时间   这两个字段这时候,你每次在用户请求编辑该行记录前,首先是 判断该行是否被锁住了? 如果被锁住了,则判断 之前锁住它的  锁住人ID   是否与当前请求的用户相同,相同,则允许, 不同? 不同的话,那说明之前锁住这行记录的是别人哦,那么,只能是被锁日期来判断了,比如锁住了2天了,那基本上可以确定之前锁住它的那个用户已掉线了,这时候就可以允许操作了,否则,继续等待吧
      

  2.   

    我也赞同“likevs ”的做好!
      再加个锁定人还及锁定时间,因为。你这里加锁的目的是防止多人同时更新,实际上是并发处理。而这种更新所占用的时间一般都不会太长。从画面更改到提交到数据库,一般也就是几分钟的时间。因此,如果上次更新时间和现在的时间相差太大,可以认为上次更新时异常退出。本次可以无视这把“锁”,直接更新数据。
      

  3.   

    数据库表里追加一列【更新时间】,Page_OnLoad时取得每行数据的【更新时间】,更新数据库表时再和数据库里对应行的的【更新时间】比进行较,看是否相等。 不等的话,就是被别人该过了。。