복붙노트

[REDIS] 연관 배열을 저장하는 방법 레디 스? 설정 또는 해시 또는 목록?

REDIS

연관 배열을 저장하는 방법 레디 스? 설정 또는 해시 또는 목록?

나는 레디 스의 사용 가능한 저장 옵션을 사용하여 모든 혼동 조금입니다. 뭔가 간단하고 싶어하고 나는 이상을 엔지니어링하고 싶지 않아요. 나는 phpredis와 레디 스의 v2.8.6 함께 일하고 있어요.

내가 저장해야한다는 간단한 연관 배열을 가지고있다. 또한 항목 각지의 키와 루프에 의해 항목을 검색 할 수 있어야합니다.

$a = array(
    '12345' => array(
        'name' => 'Post A',
        'val2' => 'blah blah',
        'val3' => 'blah blah blah',
    ),
    '54321' => array(
        'name' => 'Post B',
        'val2' => 'blah blah',
        'val3' => 'blah blah blah',
    ),
    '998877' => array(
        'name' => 'Post C',
        'val2' => 'blah blah',
        'val3' => 'blah blah blah',
    )
);

이제 해시 유형을 사용했다 때까지 내가 무엇을하고 있었는지 그래서. 이처럼 내 배열을 저장 :

foreach ($a as $key => $value) {
    $this->redis->hSet('posts', $key, json_encode($value));
}

나는이 같은 키를 쉽게 액세스 할 수처럼 :

public function getPost($postId)
{
    return json_decode($this->redis->hGet('posts', $postId), true);
}

// This is returning the information of Post A
$post = getPost(12345);

하지만 지금은 내가 그것을 수행하는 방법을 알고 내 현재의 구조를 할 수 있다면하지 않는 모든 게시물을 통해 루프 필요합니다. 내가 게시물 모두를 반복 할 수 있도록 다른 목록에있는 모든 post_id를 저장해야하는 경우 나도 몰라?

제 질문은 그래서 어떤 데이터 유형 날의 ID로 하나의 게시물을 가져오고 온통 게시물을 반복 할 수 있도록 내가 게시물의 내 ​​목록을 저장하는 데 사용합니다 (들)?

감사, 막심

해결법

  1. ==============================

    1.당신은 조합 SET 및 해시 및 정렬을 사용할 수 있습니다

    당신은 조합 SET 및 해시 및 정렬을 사용할 수 있습니다

    redis 127.0.0.1:6379> HMSET TEST_12345 name "Post A" val2 "Blah Blah" val3 "Blah Blah Blah"
    OK
    redis 127.0.0.1:6379> HMSET TEST_54321 name "Post B" val2 "Blah Blah" val3 "Blah Blah Blah"
    OK
    redis 127.0.0.1:6379> HMSET TEST_998877 name "Post C" val2 "Blah Blah" val3 "Blah Blah Blah"
    OK
    redis 127.0.0.1:6379> SADD All_keys TEST_12345 TEST_54321 TEST_998877
    (integer) 3
    redis 127.0.0.1:6379> HGETALL TEST_12345
    

    하나의 해시를 얻을 수 있습니다 :

    redis 127.0.0.1:6379> HGETALL TEST_12345
    1) "name"
    2) "Post A"
    3) "val2"
    4) "Blah Blah"
    5) "val3"
    6) "Blah Blah Blah"
    

    모든 해시를 얻을 수

    redis 127.0.0.1:6379> SORT All_keys BY nosort GET *->name GET *->val2 GET *->val3
    1) "Post A"
    2) "Blah Blah"
    3) "Blah Blah Blah"
    4) "Post B"
    5) "Blah Blah"
    6) "Blah Blah Blah"
    7) "Post C"
    8) "Blah Blah"
    9) "Blah Blah Blah"
    

    당신이 일종의 사용하지 않을 경우 당신은 SMEMBERS를 사용하여 SET에서 모든 키 이름을 가져 오기 사용하고 모든 키를 가져 레디 스 파이프 라인을 사용할 수 있습니다

  2. ==============================

    2.그냥 PHP 코드를 찾는 사람들을 위해, 여기에 내가 사용하여 종료 한 것입니다 :

    그냥 PHP 코드를 찾는 사람들을 위해, 여기에 내가 사용하여 종료 한 것입니다 :

    // Create a post hash
    $key = 'post:'.$post->getId();
    $this->redis->hSet($key, 'data', serialize($post->toArray()));
    
    // Add a post in the account posts SET
    $this->redis->sAdd($account->getId().':posts', $post->getId());
    
    // You can execute the above code as many time as you need 
    // to add an object in a SET
    
    // Fetch the first $limit posts for this account
    // SORT <account_id>:posts BY nosort GET <account_id>:post:*->data
    $key = $account->getId().':posts';
    $keys = $this->redis->sort($key, array(
        'by' => 'nosort',
        'limit' => array($offset, $limit),
        'get' => 'post:*->data'
    ));
    
    // All Good !
    var_dump($keys);
    

    나는 이것이 당신의 일부를 도움이되기를 바랍니다)

  3. ==============================

    3.PHP에서 당신은 할 수 있습니다

    PHP에서 당신은 할 수 있습니다

    $redis->set($key, json_encode($value));
    

    그때

    $value = json_decode($redis->get($key));
    

    또는 당신이 선호하는 어떤 직렬화 기술을 사용합니다. JSON 인코딩 / 디코딩 나를 돌보는하지 않는 확대됨에 충분했다.

  4. from https://stackoverflow.com/questions/22001247/redis-how-to-store-associative-array-set-or-hash-or-list by cc-by-sa and MIT license