V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liudaqi
V2EX  ›  DevOps

服务器重启,缓存 session 被清,怎么避免用户的访问错误呢?

  •  
  •   liudaqi · 2017-12-15 11:05:04 +08:00 · 5428 次点击
    这是一个创建于 2543 天前的主题,其中的信息可能已经有所发展或是发生改变。
    服务器上遇到问题一般打个补丁,习惯性重启一下,但是缓存和 session 都被清了,造成已经登录过的用户来访问,就出错了,要再此刷新页面才能重新生成新的 session,然后正常返回数据到页面。

    虽然服务器上的业务逻辑没有问题,但是重启后,已经登录过的用户来请求刷两次才能访问,被 leader 批了好几次了
    20 条回复    2017-12-15 15:26:18 +08:00
    wxsm
        1
    wxsm  
       2017-12-15 11:05:50 +08:00
    简单,session 不要存内存,存 redis 或者其他数据库即可。
    p2pCoder
        2
    p2pCoder  
       2017-12-15 11:08:14 +08:00
    存入 redis,以后也方便 做 负债均衡
    Quarter
        3
    Quarter  
       2017-12-15 11:14:53 +08:00
    小白 不是很懂 但是觉得好像和把 token 存到数据库很像诶
    qs
        4
    qs  
       2017-12-15 13:22:14 +08:00
    负债均衡 2333
    p2pCoder
        5
    p2pCoder  
       2017-12-15 13:32:41 +08:00
    @qs。。。。以前用 redis 缓存 tomcat 应用的 session 就是为了实现 session 共享做 java web 应用的负债均衡
    Keyblade
        6
    Keyblade  
       2017-12-15 13:35:28 +08:00
    @p2pCoder #5 他 2333 的是你打错的字
    wekw
        7
    wekw  
       2017-12-15 13:46:17 +08:00
    session 不是默认存磁盘的吗。。。。现在比较好的解决方案是 redis,一台就能抗超多用户。
    w7938940
        8
    w7938940  
       2017-12-15 13:50:16 +08:00
    存 cookie 里啊,每次请求都有带
    yulitian888
        9
    yulitian888  
       2017-12-15 13:50:18 +08:00
    我们存 sql 的,asp.net 就是这么懒惰又暴力
    cout2013mr
        10
    cout2013mr  
       2017-12-15 14:04:13 +08:00
    楼上说得对,做 redis,搞个缓存服务器,做负载均衡都可以使用啊。并发高,还支持集群。偷懒的话,session 超时也可以用 redis 的超时机制去做
    heww
        11
    heww  
       2017-12-15 14:08:35 +08:00
    我倒是觉得这个话题不应该放到 devops 节点下,应该挪动到程序员节点或者运维节点。
    likuku
        12
    likuku  
       2017-12-15 14:12:24 +08:00
    session 从 web 服务器 独立出去就行了。
    likuku
        13
    likuku  
       2017-12-15 14:13:34 +08:00
    十几年前 session 放 memcched 服务器里,自带 ttl,纯内存效能足够,几乎免维护
    likuku
        14
    likuku  
       2017-12-15 14:14:06 +08:00
    #13 修正别字,是 memcached
    ray1888
        15
    ray1888  
       2017-12-15 14:29:28 +08:00
    存进 redis 里面或者像我们项目,前端直接在 mongodb 开多一个数据库,存进去就好了
    cominghome
        16
    cominghome  
       2017-12-15 14:35:21 +08:00
    居然没做持久化?
    openbsd
        17
    openbsd  
       2017-12-15 14:39:23 +08:00
    据说在后台服务器比较多的情况下,都建议用 cookie 实现
    notreami
        18
    notreami  
       2017-12-15 14:42:16 +08:00
    好奇下,使用 token 后,session 还有必要存在嘛?以及 java 如何关闭 session 功能??
    yingfengi
        19
    yingfengi  
       2017-12-15 14:44:43 +08:00 via Android
    我说个脑回路清奇的解决方案
    凌晨重启→_→
    togodo
        20
    togodo  
       2017-12-15 15:26:18 +08:00
    你有多台服务器挂在负载均衡后面,就可以随便重启其中几台了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2656 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:23 · PVG 15:23 · LAX 23:23 · JFK 02:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.