전체 HASH를 GET과 내가 지금까지 :)은 어떻게 SET를 정렬하고 내가 레디 스에 새로 온 사람
나는 문제에 부딪 치는거야 내가 해결하는 방법을 잘 모르겠어요 그것을 사랑 해요 '라고해야합니다 더 효율적인 방법으로. 저는 SET
이 HASH
입니다. 각 HASH
은 게시물을 설명합니다. 여기
HASH
:
// Create the HASH
$key = 'post:'.$post->getId();
$this->redis->hSet($key, 'created', $post->getCreated());
$this->redis->hSet($key, 'author', $post->getAuthor());
$this->redis->hSet($key, 'message', $post->getMessage());
// Store the HASH in the SET
$this->redis->sAdd('posts', $post->getId());
이제, 이전에 내가 HASH
의 data
필드에있는 모든 게시물의 속성을 저장했다 (json_encoded)와이 같은 정보를 가져 오는했다 :
$key = 'posts';
$data = $this->redis->sort($key, array(
'by' => 'nosort',
'limit' => array($offset, $limit),
'get' => 'post:*->data '
));
if (!is_array($data)) {
return array();
}
foreach ($data as &$post) {
$post = json_decode($post, true);
}
그것은 좋은 일하고, 나는 모든 게시물 정보 :
했다 하지만 Redis (동시 업데이트)에서 게시물을 업데이트 할 때 충돌이 있었기 때문에 모든 게시물의 속성을 fields
(HASH
)으로 구분하여 충돌 문제를 해결했습니다.
이제 문제는 내 SET
에서 HASH
을 가져 오는 것입니다.
$key = 'posts';
$data = $this->redis->sort($key, array(
'by' => 'nosort',
'limit' => array($offset, $limit),
'get' => array('post:*->created', 'post:*->author', 'post:*->message')
));
을 또는 SET
에서 직접 전체 HASH
를 가져올 수있는 또 다른 방법이있다 :이 같은 모든 단일 필드를 지정해야합니까?
UPDATE
막심
, 이 나는 약pipeline
를 들었지만 나는 내가 위해 내가
phpredis
환호와 함께 사용할 수 있는지 찾고 있어요 무엇 확실하지 않다 나는 내가 분명히 자신을 설명했는지 확신 할 수 없다. 한 세트에 몇 가지 요소가 있습니다 (post_id
). SET
의 처음 10 개의 게시물을 가져오고 싶습니다. 즉 post
개체를 만들기 위해 10hash
(모든 필드와 값을 사용)을 원합니다.
해시 (data
)의 한 필드에 이전에 모든 개체 정보를 저장했지만 개체의 특성 당 하나의 필드가 있습니다.
전에 지금
myHash:<id> data
:
myHash:<id> id "1234" created "2010-01-01" author "John"
내가 같이, 상위 10 게시물 가져 오기 (쉽게 페이지를 매기)에 SORT
를 사용되기 전에 :
$key = 'posts';
$data = $this->redis->sort($key, array(
'by' => 'nosort',
'limit' => array(0, 10),
'get' => 'post:*->data '
));
이제 해시에 X 멤버가 생겼습니다. 무엇이 가장 좋은 솔루션인지 궁금합니다.
$key = 'posts';
$data = $this->redis->sort($key, array(
'by' => 'nosort',
'limit' => array($offset, $limit),
'get' => 'post:*->data '
));
아니면 :
$key = 'posts';
$data = $this->redis->sort($key, array(
'by' => 'nosort',
'limit' => array($offset, $limit),
'get' => '#'
));
foreach($data as $post_id) {
$posts[] = $this->redis->hGetAll('post:'.$post_id);
}
또는 마지막 :
는인가
$key = 'posts';
$data = $this->redis->sort($key, array(
'by' => 'nosort',
'limit' => array($offset, $limit),
'get' => '#'
));
$pipeline = $this->redis->multi();
foreach ($data as $post_id) {
$pipeline->hGetAll('post:'.$post_id);
}
return $pipeline->exec();
아니면 내가 아직 모르는 뭔가? 가장 빠르고 가장 빠른 방법은 무엇입니까?
각 해시 키의 'X 멤버'는 일정합니까? 그냥 'id', 'created', 'author'입니까? – yinqiwen
네,하지만 3 개 이상의 필드가 있습니다. 10 개가 있습니다. – maxwell2022
음, 정렬 명령에 10 '패턴 가져 오기'를 쓸 수 있습니다. 제한이 없습니다. 이것은 가장 빠른 방법입니다. – yinqiwen