我想在redis数据库中存储用户位置(long,lat)。在我最初的想法中,密钥将是用户ID。我需要2个功能:设置位置,获取所有位置。我应该如何执行它,或者我应该将它存储在哪种结构中以便于快速访问。
答案 0 :(得分:1)
看起来SETS
是个好主意(如果需要位置唯一性):
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);
你没有这么说,但如果不需要唯一性的地点LISTS
最好选择:
PHP示例
$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);
如果用户只有一个位置HASH
,最好选择:
locations
HSET
其中field是您的userId,value是序列化数据PHP示例
$location = json_encode(array('long' => '...', 'lat' => '...'));
$redis->hSet('locations', $userId, $location);
...
$userLocation = json_decode($redis->hGet('locations', $userId));