node.js中结合Redis实现session

x286 6年前

        这里的session机制很简单,用户登录之后,给用户生成一个session,包含用户的唯一编号ID,过期时间expires,以及用户的用户的sessionID。


        创建了session之后,将session存放到redis数据库中,现在也只是测试了可以存放数据,并没有进行redis的进一步操作,今后将对 redis进行集群操作,虽然小,但是一定要五脏俱全,会写两个类,一个专门用来写,针对主库,然后另一个专门用来读,针对从库。


        这需要一个key值与redis从库的连接地址相关联,因为当存在多个key值时,读取是随机的,但是想想,又觉得没有必要,因为主库对从库是完全同步的,就是主库的数据会拷贝完整的一份到从库,先这样想着吧。


        redis主要是用到了redis这个模块,模块很多的方法,现在只记录一下用到的:

    /**        * @description 存储hash结构的数据,同时设置数据的过期时间        * @param {string} 键的名称        * @param {json} 对应的值        * @returns {undefined}        */        exports.hmset = function (key, json, expires) {            try {                console.log("--hmset function begin--");                client.hmset(key, json);                if (expires) {                    client.expire(key,expires);                }                else {                    client.expire(key,60 * 30);                }            }            catch (err) {                console.log("lalalla:"+err);            }        }  

  存值的时候要注意参数的格式,注意redis的错误提示,可以很快的定位问题


        还有就是注意异步的特点,比如这里,虽然页面的代码在redis操作之后,但是页面重跳转之后,redis的操作才执行了。


        页面跳转之后设置cache保存sessionID,然后当页面跳转的时候,通过读取redis看看sessionID是否存在,来判断用户信息是否过期,没有的话,就更新一下redis的过期时间,因为redis中设置了过期时间,所以sessionID不存在的话,就跳转用户到登录页面