Nodejs redis 用户表3个字段id,username,pwd如何操作

Nodejs redis 用户表3个字段id,username,pwd如何操作

var adduser = function (user, pwd, callback) {
var userid;
client.incr(“userid”, function (err, reply) {
userid = reply.toString();
});
client.lpush(“user_id”, userid, function (err, reply) {
if (!err) {
client.set(“user_name_” + userid, user);
clinet.set(“user_pwd_” + userid, pwd);

    }
});

}

注册用户这样写对不对? 但是如果判断用户是否重复怎么写?

是不是这样写?

var adduser = function (user, pwd, callback) {
    client.get("user_" + user, function (reply) {
        if (reply == null) {//这里判断
            var userid;
            client.incr("userid", function (err, reply) {
                userid = reply.toString();
            });
            client.lpush("user_id", userid, function (err, reply) {
                if (!err) {
                    client.set("user_name_" + userid, user);
                    clinet.set("user_pwd_" + userid, pwd);
                    client.set("user_" + user, userid);//这里一加行
                    callback("注册成功");
                }
            });
        }
        else {
            callback("用户已存在");
        }
    });
    client.end();

}


3 回复

为了实现一个简单的用户注册功能,并且能够检查用户是否已经存在,我们可以使用Redis的数据结构和命令。以下是一个改进的版本,展示了如何使用Node.js和Redis来处理用户注册,包括用户是否存在的情况。

改进后的代码

const redis = require('redis');
const client = redis.createClient();

client.on('error', (err) => {
    console.error(`Redis error: ${err}`);
});

function addUser(username, password, callback) {
    // 检查用户是否已存在
    client.get('user:' + username, (err, reply) => {
        if (err) return callback(err);

        if (reply !== null) {
            return callback(null, "用户已存在");
        }

        // 如果用户不存在,生成新的用户ID并添加用户信息
        client.incr('nextUserId', (err, id) => {
            if (err) return callback(err);

            const userId = 'user:' + id;

            // 存储用户名和密码
            client.set(userId + ':username', username, (err) => {
                if (err) return callback(err);

                client.set(userId + ':password', password, (err) => {
                    if (err) return callback(err);

                    // 更新用户名到ID的映射
                    client.set('user:' + username, userId, (err) => {
                        if (err) return callback(err);

                        callback(null, "注册成功");
                    });
                });
            });
        });
    });
}

// 使用示例
addUser('newUser', 'password123', (err, result) => {
    if (err) {
        console.error(err);
    } else {
        console.log(result);
    }
});

解释

  1. 连接Redis:首先创建一个Redis客户端。
  2. 检查用户是否已存在:通过get命令查询指定用户名是否存在。
  3. 生成新用户ID:使用incr命令自增一个计数器nextUserId,为新用户分配唯一的ID。
  4. 存储用户信息:将用户的ID、用户名和密码存储在Redis中,分别存储在不同的键下。
  5. 更新用户名到ID的映射:为了方便通过用户名快速查找用户信息,我们还存储了一个映射关系。
  6. 回调函数:最后,根据结果调用回调函数返回给调用者。

这种方法不仅确保了用户信息的安全存储,还通过合理的数据结构设计提高了查询效率。


可以这样,一般的注册 入库的时候都先查一次。。

你的实现方式基本上是正确的,但有一些地方需要改进。首先,使用 lpush 来存储用户 ID 可能不是最佳实践,因为列表不适合用于快速查找操作。更好的做法是使用哈希(hash)来存储用户信息,这样可以更方便地进行增删改查操作。

下面是改进后的示例代码:

const redis = require('redis');
const client = redis.createClient();

client.on('error', (err) => {
    console.log(`Redis error: ${err}`);
});

const addUser = (user, pwd, callback) => {
    // 检查用户是否已经存在
    client.hget('users', 'username:' + user, (err, reply) => {
        if (err) return callback(err);

        if (reply) {
            return callback('用户已存在');
        }

        // 如果不存在,则创建新用户
        client.incr('nextUserId', (err, id) => {
            if (err) return callback(err);

            const userId = id.toString();
            client.hmset('users', [
                'username:' + userId, user,
                'pwd:' + userId, pwd,
                'username:' + user, userId
            ], (err) => {
                if (err) return callback(err);

                callback(null, '注册成功');
            });
        });
    });
};

// 测试
addUser('testuser', 'testpwd', (err, res) => {
    if (err) {
        console.error(err);
    } else {
        console.log(res);
    }
});

解释

  1. 引入 Redis 客户端:首先,我们需要引入 Redis 客户端并创建一个客户端实例。
  2. 错误处理:添加错误处理逻辑,确保在发生错误时能够及时捕获并反馈。
  3. 检查用户是否存在:使用 hget 方法查询用户是否存在。如果用户已存在,则返回错误。
  4. 生成新的用户 ID:使用 incr 方法自动生成一个新的用户 ID。
  5. 设置用户信息:使用 hmset 方法将用户信息存储到哈希中。这里我们使用两个键分别存储用户名到 ID 和 ID 到用户名的映射。
  6. 回调函数:在完成操作后调用回调函数返回结果。

这种方法不仅解决了用户重复的问题,还提高了数据存储和检索的效率。

回到顶部