Node.js 使用redis发送好友状态
我在互联网上四处寻找,想知道如何使用socket io将用户状态(如脱机和联机等)发送给朋友。有人说要用Redis。所以我看了一眼,然后玩了玩。我还使用mongodb存储朋友和用户 这是我现在的设置:Node.js 使用redis发送好友状态,node.js,mongodb,redis,socket.io,Node.js,Mongodb,Redis,Socket.io,我在互联网上四处寻找,想知道如何使用socket io将用户状态(如脱机和联机等)发送给朋友。有人说要用Redis。所以我看了一眼,然后玩了玩。我还使用mongodb存储朋友和用户 这是我现在的设置: //Status List: // 0 - offline // 1 - online // 2 - away // 3 busy //Set the status redisClient.hmset ("online_status:userID", "status", "1"); //Ch
//Status List:
// 0 - offline
// 1 - online
// 2 - away
// 3 busy
//Set the status
redisClient.hmset ("online_status:userID", "status", "1");
//Check if someone is online
redisClient.hgetall ("online_status:userID", (err, reply) => {
console.log(reply)
})
如果我这样使用它来获取用户状态可以吗?还是有更好的方法
另一个问题是,是否可以继续循环hgetall,还是有更好的方法一次获取多个状态?您使用散列类型存储单个信息,并且使用hgetall检索信息,因此我假设您还不太熟悉redis数据类型。因此,首先让我简短地解释一下我将要讨论的三种数据类型(在这里的文档中查找所有类型):
- 字符串:是一种简单的键/值类型,使用
和set(键,值)
get(键,值)
- 散列:是存储在一个redis密钥下的一组密钥/值。用于存储实体的属性,例如您可以有一个“userdata:userID”键和存储名称、化身、状态。。。用它。使用
,hset(键、字段、值)
,hget(键、字段)
hgetall(键)
- 集合:是唯一字符串的集合,使用
,sadd(键,成员)
,sismember(键,成员)
smembers(键)
hget(“userdata:userID”,“status”)
进行检查,并仅使用hgetall
检索所有属性
另一种方法是将所有用户存储在一个集合中:sadd('users:online',userID)
,并使用sismember('users:online',userID)
检查,或者使用smembers('users:online')获取所有在线用户。
。假设您将所有好友存储在另一个集合friends:userID
,您可以通过一个intersect命令sinter('friends:userID','users:online')
-非常漂亮和优雅的IMHO,但这种get因更多不同的状态而变得复杂,并且不适用于redis集群
我更喜欢固定的方法。多个HGET也应该可以,直到您遇到问题,因为只有一个家伙(总是有一个)拥有数千个联系人并随时刷新。在这一点上,您仍然可以引入一些友谊限制或缓存。非常感谢。我有个问题,我以为这是缓存?因为我正在尝试将mongodb与redis结合使用。我还有一个问题。在服务器端mongodb中循环浏览某人的好友列表是否合适?我一直害怕在服务器端使用循环。