Redis商店用户定位策略

Redis商店用户定位策略,redis,Redis,我想在redis数据库中存储用户位置(long,lat)。在我最初的想法中,密钥将是用户ID。我需要两个功能:设置位置,获取所有位置。我应该如何执行它,或者应该将其存储在哪个结构中以方便快捷地访问。看起来是个好主意(如果需要位置唯一性): 用户ID作为密钥 对于设置位置(需要O(N),其中N是要添加的成员数) 对于获取所有位置功能 将long、lat作为分隔符分隔的字符串或序列化值(例如json) PHP示例 $location = json_encode(array('long' =>

我想在redis数据库中存储用户位置(long,lat)。在我最初的想法中,密钥将是用户ID。我需要两个功能:设置位置获取所有位置。我应该如何执行它,或者应该将其存储在哪个结构中以方便快捷地访问。

看起来是个好主意(如果需要位置唯一性):

  • 用户ID作为密钥
  • 对于设置位置(需要O(N),其中N是要添加的成员数)
  • 对于获取所有位置功能
  • 将long、lat作为分隔符分隔的字符串或序列化值(例如json)
PHP示例

$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->sAdd('locations:' . $userId, $location);
...
$redis->sAdd('locations:' . $userId, $location2);
...
$redis->sAdd('locations:' . $userId, $location2);
...
$userLocations = $redis->sMembers('locations:' . $userId); 
$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->rPush('locations:' . $userId, $location);
...
$redis->rPush('locations:' . $userId, $location2);
...
$redis->rPush('locations:' . $userId, $location2);
...
$userLocations = $redis->lRange('locations:' . $userId, 0, -1);
$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->hSet('locations', $userId, $location);
...
$userLocation = json_decode($redis->hGet('locations', $userId));
您没有这样说,但是如果不需要位置的唯一性,则最好选择:

  • 对于设置位置(需要O(1))
  • 对于获取所有位置功能
  • 键和值格式类似于case
PHP示例

$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->sAdd('locations:' . $userId, $location);
...
$redis->sAdd('locations:' . $userId, $location2);
...
$redis->sAdd('locations:' . $userId, $location2);
...
$userLocations = $redis->sMembers('locations:' . $userId); 
$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->rPush('locations:' . $userId, $location);
...
$redis->rPush('locations:' . $userId, $location2);
...
$redis->rPush('locations:' . $userId, $location2);
...
$userLocations = $redis->lRange('locations:' . $userId, 0, -1);
$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->hSet('locations', $userId, $location);
...
$userLocation = json_decode($redis->hGet('locations', $userId));
如果用户只有一个位置,则最好选择:

  • 所有用户一键,例如
    位置
  • 其中字段是用户ID,值是序列化数据
PHP示例

$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->sAdd('locations:' . $userId, $location);
...
$redis->sAdd('locations:' . $userId, $location2);
...
$redis->sAdd('locations:' . $userId, $location2);
...
$userLocations = $redis->sMembers('locations:' . $userId); 
$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->rPush('locations:' . $userId, $location);
...
$redis->rPush('locations:' . $userId, $location2);
...
$redis->rPush('locations:' . $userId, $location2);
...
$userLocations = $redis->lRange('locations:' . $userId, 0, -1);
$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->hSet('locations', $userId, $location);
...
$userLocation = json_decode($redis->hGet('locations', $userId));
看起来这是个好主意(如果需要位置唯一性):

  • 用户ID作为密钥
  • 对于设置位置(需要O(N),其中N是要添加的成员数)
  • 对于获取所有位置功能
  • 将long、lat作为分隔符分隔的字符串或序列化值(例如json)
PHP示例

$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->sAdd('locations:' . $userId, $location);
...
$redis->sAdd('locations:' . $userId, $location2);
...
$redis->sAdd('locations:' . $userId, $location2);
...
$userLocations = $redis->sMembers('locations:' . $userId); 
$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->rPush('locations:' . $userId, $location);
...
$redis->rPush('locations:' . $userId, $location2);
...
$redis->rPush('locations:' . $userId, $location2);
...
$userLocations = $redis->lRange('locations:' . $userId, 0, -1);
$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->hSet('locations', $userId, $location);
...
$userLocation = json_decode($redis->hGet('locations', $userId));
您没有这样说,但是如果不需要位置的唯一性,则最好选择:

  • 对于设置位置(需要O(1))
  • 对于获取所有位置功能
  • 键和值格式类似于case
PHP示例

$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->sAdd('locations:' . $userId, $location);
...
$redis->sAdd('locations:' . $userId, $location2);
...
$redis->sAdd('locations:' . $userId, $location2);
...
$userLocations = $redis->sMembers('locations:' . $userId); 
$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->rPush('locations:' . $userId, $location);
...
$redis->rPush('locations:' . $userId, $location2);
...
$redis->rPush('locations:' . $userId, $location2);
...
$userLocations = $redis->lRange('locations:' . $userId, 0, -1);
$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->hSet('locations', $userId, $location);
...
$userLocation = json_decode($redis->hGet('locations', $userId));
如果用户只有一个位置,则最好选择:

  • 所有用户一键,例如
    位置
  • 其中字段是用户ID,值是序列化数据
PHP示例

$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->sAdd('locations:' . $userId, $location);
...
$redis->sAdd('locations:' . $userId, $location2);
...
$redis->sAdd('locations:' . $userId, $location2);
...
$userLocations = $redis->sMembers('locations:' . $userId); 
$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->rPush('locations:' . $userId, $location);
...
$redis->rPush('locations:' . $userId, $location2);
...
$redis->rPush('locations:' . $userId, $location2);
...
$userLocations = $redis->lRange('locations:' . $userId, 0, -1);
$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->hSet('locations', $userId, $location);
...
$userLocation = json_decode($redis->hGet('locations', $userId));

我有很多用户,每个用户都有自己的id和很长的lat。我可以序列化我用户的json对象并将其存储在redis集中吗?我如何将其存储为map,id=>json对象?我会更新关于这个案例的答案。散列数据类型应该是您的选择。我有许多用户,每个用户都有自己的id和长lat。我可以序列化我用户的json对象并将其存储在redis集中吗?我如何将其存储为map,id=>json对象?我会更新关于此案例的答案。哈希数据类型应该是您的选择。