基于高速缓存redis的session,可以在多个平台下共享

来源:互联网 发布:阿里云青岛机房地址 编辑:程序博客网 时间:2024/05/20 16:09
1.安装
    npm install reids-sessions
2.方法/属性
    1.每一个session都属于一个app
    2.create :
        一个session通过接受一个appName,唯一id被创建,返回值是一个token
    3.get:
        通过appName 与 token可以查询一个session
    4.set:
        在session上附加数据
    5.kill:
        
        通过appName + token可以杀掉一个session
    6.killall:
        通过appName可以杀掉所有session
3.附加方法
    1.activity:
        获取最近n秒内的活动session数量
    2.soid:
        
        获取一个id的所有session
    3.killsoid:
        杀死一个id的所有session
    4.TODO:
        获取n秒内被激活的所有session数组
    5.Automatic
        清除所有旧session
4.性能
    测试环境描述:硬件:2011年的mac,部署在同一台机器的redis
    测试命令:npm test
    1.创建1000个session在170ms以内
    2.获取这1000个session并校验在155ms内
    3.移除这1000个session 18ms
5.在nodejs内使用

    //初始化redis-session
    RedisSession = require("redis-session");
    var rs = new RedisSession(
        {    
            //*optional* Default:6379,redis prot
            port:6379,

            //*optional* Defalut:127.0.0.1, redis host
            host:127.0.0.1,

            //*optional* Default:"rs", 这个模块的redis key前缀
            namespace:"rs",
        
            //*optional* Default:600,擦除过期session的时间间隔,最少是10
            wipe:600
        }
    );
    
    //应用程序名
    var appName="myapp";
    
    //创建一个session
    rs.create(
    {
        app:appName,
        
        //用户唯一id
        id:"user01",
        
        //用户ip
        ip:"192.168.22.58",
        
        //*optional* Default:7200 过期时间
        ttl:3600
    },
    function(err,resp)
    {
        // resp 应该是类似这样
        // {token: "r30kKwv3sA6ExrJ9OmLSm4Wo3nt9MQA1yG94wn6ByFbNrVWhcwAyOM7Zhfxqh8fe"}
    }
    );
    
    //在session附加数据
    rs.set(
    {    
        app:appName,
        token:"r30kKwv3sA6ExrJ9OmLSm4Wo3nt9MQA1yG94wn6ByFbNrVWhcwAyOM7Zhfxqh8fe",
        d:{
            "msg1":"asd",
            "msg2":"asd2"
        }
    },function(err,resp)
    {
        /*
        resp contains the session with the new values:

        {  
        "id":"user01",
        "r": 1,
        "w": 2,
        "idle": 1,
        "ttl": 3600,
        "d":
        {
            "msg1":"asd",
            "msg2":"asd2"
        }
        }
        */
    }
    );
    
    //通过一个token获取session
    rs.get(
    {
        app:appName,
        token:"r30kKwv3sA6ExrJ9OmLSm4Wo3nt9MQA1yG94wn6ByFbNrVWhcwAyOM7Zhfxqh8fe",
        funtion(err,resp){
            /*
            resp contains the session:

            {  
                "id":"user01",
                "r": 1,  // The number of reads on this token
                "w": 1,  // The number of writes on this token
                "idle": 21,  // The idle time in seconds.
                "ttl": 7200, // Timeout after 7200 idle time
                "d":
                {
                    "msg1":"asd",
                    "msg2":"asd2"
                }
            }

            */        
        }
    }
    );

    //设置/更新/删除
    rs.set(
    {
        app:rsapp,
        token:"r30kKwv3sA6ExrJ9OmLSm4Wo3nt9MQA1yG94wn6ByFbNrVWhcwAyOM7Zhfxqh8fe",
        d:{    
            //删除一个属性,设置为null即可
            "msg1":null,
            //设置一个新属性
            "msg3":123,    
        }
    }    
    );

    
    //通过appName + token可以杀掉一个session
    rs.kill({
        app: rsapp,
        token: "r30kKwv3sA6ExrJ9OmLSm4Wo3nt9MQA1yG94wn6ByFbNrVWhcwAyOM7Zhfxqh8fe"},
        function(err, resp) {
        /*
        resp contains the result:

        {kill: 1}
        */
        }
    });

    //获取活动session
    rs.activity({
        app: rsapp,

        //时间区间
        dt: 600},
        function(err, resp) {
        /*
        resp contains the activity:

        {activity: 12}
        */
        }
    });
    
    
    //获取一个用户的所有session
    rs.soid({
        app: rsapp,
        id: "bulkuser_999"},
        function(err, resp) {
        /*
        resp contains the sessions:

        { sessions:
        [
            {
                id: 'bulkuser_999',
                r: 1,
                w: 1,
                ttl: 30,
                idle: 0,
                ip: '127.0.0.2'
            },
            {
                id: 'bulkuser_999',
                r: 1,
                w: 1,
                ttl: 7200,
                idle: 0,
                ip: '127.0.0.1'
            }
        ]
        }
        */  
    });
    
    //杀死某用户的所有session
    rs.killsoid({app: appName, id: 'bulkuser_999'},
      function(err, resp) {
        /*
        resp contains the result:

        {kill: 2} // The amount of sessions that were killed
        */  
      });

    //杀死一个app内的所有session
    rs.killall({app: appName},
      function(err, resp) {
        /*
        resp contains the result:

        {kill: 12} // The amount of sessions that were killed
        */  
      });

    


原创粉丝点击