node.js | Redis缓存加载旧数据

用户8116198

我正在尝试设置一个 mongo、节点和 redis 服务器,除了似乎加载旧数据的 Redis 缓存之外,其他一切都运行良好。

取出 Redis 并使用纯 Mongo 返回正确的数据,如果我再次单击提交,它将加载上一次提交的数据,所以我知道缓存和 Mongo 正在更新。

这是我使用 Mongo 和 Redis 更新用户的当前代码...

updateUserById: (newUser, redis, id, callback) => {
    User.findByIdAndUpdate(id, {
        $set: {
            "firstName": newUser.firstName,
            "lastName": newUser.lastName,
            "email": newUser.email
        }
    }, (err, doc) => {
        if (err) { throw new Error(err); }
        else if (!doc) { callback('No user with that ID to update cache.') }
        else {
            redis.set(id, JSON.stringify(doc), (err) => {
                console.log('Caching updated user ' + id);
                if (err) { callback(err); throw new Error(err); }
                else {
                    const result = {
                        "success": "true",
                        "message": "User updated successfully"
                    };

                    callback(result);
                }
            })
        }
    });
}

而这就是redis和Mongo返回用户信息...

userById: async (redis, id, callback) => {
    redis.get(id, async (err, reply) => {
        if (err) {
            callback(null); throw new Error(err);
        } else if (reply) {
            callback(JSON.parse(reply));
        } else {
            await User.findById(id, (err, doc) => {
                if (err || !doc) { callback(null); throw new Error(err); }
                else {
                    redis.set(id, JSON.stringify(doc), () => {
                        callback(doc);
                    })
                }
            })
        }
    })
}

我发现这与doc包含旧信息有关updateUserById

用户8116198

问题出在更新方法内部。

当文档被传递时,它传递的是旧数据而不是新数据。为了解决这个问题,我使用了传递到方法中的 newUser。

这是更新后的代码:

updateUserById: (newUser, redis, id, callback) => {
    User.findByIdAndUpdate(id, newUser, (err) => {

        if (err) { throw new Error(err); }
        else {
            redis.set(id, JSON.stringify(newUser), (err) => {
                console.log('Caching updated user ' + id);
                if (err) { callback(err); throw new Error(err); }
                else {
                    const result = {
                        "success": "true",
                        "message": "User updated successfully"
                    };

                    callback(result);
                }
            })
        }
    });
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Node JS上缓存数据的最佳方法

来自分类Dev

在Node JS上缓存数据的最佳方法

来自分类Dev

使用旧数据库,新数据库和Redis缓存层的新node.js应用

来自分类Dev

NODE.JS缓存JSON

来自分类Dev

Node.js需要缓存

来自分类Dev

在node.js中缓存数据的最便宜方法?

来自分类Dev

缓存node.js json服务器数据

来自分类Dev

在node.js中缓存数据的最便宜方法?

来自分类Dev

Node JS、Redis 和 Heroku

来自分类Dev

Node.js 加载 css

来自分类Dev

使用node.js从Redis获取层次数据

来自分类Dev

使用node.js从Redis获取层次数据

来自分类Dev

使用Node.js通过AJAX请求从Redis检索数据

来自分类Dev

Node.js和Redis结构化数据

来自分类Dev

node js mongodb 获取数据

来自分类Dev

使用Node.js将数据加载到Redshift中

来自分类Dev

如何抓取使用node.js异步加载数据的网站?

来自分类Dev

从Node.js批量加载titan db中的数据

来自分类Dev

在Node.js中缓存的最佳方法

来自分类Dev

防止Nginx缓存Node.js响应

来自分类Dev

Node.js群集共享缓存

来自分类Dev

Node.js内存缓存线程安全

来自分类Dev

存储在数据库中时,是否需要清除旧的node.js会话?

来自分类Dev

Node.js Redis到期与最新内容

来自分类Dev

Node.js Redis连接池

来自分类Dev

Node.js Redis lpush错误

来自分类Dev

node.js全局数组与Redis

来自分类Dev

Node.js Redis lpush错误

来自分类Dev

Node.js / Redis-等待连接?