복붙노트

[REDIS] 어떤 명령이나 LUA 스크립트를 사용하여 레디 스에 저장된 여러 설정을 읽는 방법

REDIS

어떤 명령이나 LUA 스크립트를 사용하여 레디 스에 저장된 여러 설정을 읽는 방법

나는 하나의 호출 키의 목록을 사용하여 레디 스에서 모든 세트를 싶어. 문서에 따라, 레디 스 그것에 대해 sscan을 명령을 제공하지만 나는 레디 스 어댑터로 StackExchange.Redis를 사용하고, 나는이 명령이 어댑터 그러한 방법이없는 것 같아요. 내가 찾고 있어요 두 가지가있다 그래서 :

감사

해결법

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

    1.나는 여기에 특정 요구 사항에 대한 불분명, 그래서 그렇게하는 방법은 여러 가지가 아마이 있습니다. 가장 간단한 순서 중복 제거하여 w / o 결과를 반환 SUNION를 호출한다.

    나는 여기에 특정 요구 사항에 대한 불분명, 그래서 그렇게하는 방법은 여러 가지가 아마이 있습니다. 가장 간단한 순서 중복 제거하여 w / o 결과를 반환 SUNION를 호출한다.

    또 다른 옵션은 같은 루아 스크립트를 사용하는 것입니다 :

    local reply = {}
    for i = 1,#KEYS do
      local elems = redis.call('SMEMBERS', KEYS[i])
      table.insert(reply, elems)
    end
    return reply
    

    레디 스-CLI 예 (죄송합니다, .NET 내 장점되지 않습니다)

    $ redis-cli SADD s1 foo bar
    (integer) 2
    $ redis-cli SADD s2 baz qaz
    (integer) 2
    $ redis-cli --eval script.lua s1 s2
    1) 1) "foo"
       2) "bar"
    2) 1) "baz"
       2) "qaz"
    

    참고 : 사용자의 설정은 다음에 관계없이 접근을 그들 모두를 받고 회원의 많은 경우, "비싼"가 될 것입니다 - 그의 필요성을 재고.

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

    2.단일 통화의 많은 세트를 얻을 수있는 샘플 C # 코드는 다음과 같습니다 : 나는 레디 스 커넥터로 StackExchange.Redis을 사용하고 있습니다 :

    단일 통화의 많은 세트를 얻을 수있는 샘플 C # 코드는 다음과 같습니다 : 나는 레디 스 커넥터로 StackExchange.Redis을 사용하고 있습니다 :

    using StackExchange.Redis;
    using System;
    using System.Text;
    
    namespace RedisGetMultipleKeys
    {
    /// <summary>
    /// Class to perofrme operations on SE.Redis
    /// </summary>
    class Program
    {
        /// <summary>
        /// Executes necessary pre-requisites 
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
    
            //Connect Redis
            var _cache = Program.Connect();
    
            //Store 10k Sets
            string prefix = "user";
            StringBuilder keys = new StringBuilder();
            for (int i = 0; i < 10000; i++)
            {
                keys.Append(" " + prefix + i);
                _cache.SetAdd(prefix + i, i);
            }
    
            var keyList = new RedisKey[10000];
            //Generate keys array
            for (int i = 0; i < 10000; i++)
            {
                var key = new RedisKey();
                key = prefix + i;
                keyList.SetValue(key, i);
            }
    
            var startTime = DateTime.Now;
            //Perform SUNION
            var values = _cache.SetCombine(SetOperation.Union, keyList);
    
            var endTime = DateTime.Now;
            TimeSpan diff = endTime.Subtract(startTime);
    
            Console.WriteLine("total time taken to read 10k keys = " + diff);
            Console.Read();
    
            //TODO: to be changed accordingly to read Set values returned other than String
            foreach (var value in values)
            {
                Console.WriteLine(value.ToString());
            }
    
            endTime = DateTime.Now;
            diff = endTime.Subtract(startTime);
    
            Console.WriteLine("total time taken to read 10k keys = " + diff);
            Console.Read();
    
        }
    
    
        /// <summary>
        /// Connects to Redis db
        /// </summary>
        /// <returns>Returns an instance of Redis db</returns>
        private static IDatabase Connect()
        {
            string redisConnection = "localhost:6379,ssl=false,allowAdmin=true,ConnectRetry=3,ConnectTimeout=5000,defaultDatabase=1";
            ConnectionMultiplexer connection = ConnectionMultiplexer.Connect(redisConnection);
            return connection.GetDatabase();
        }
    }
    

    }

    나는 그것이 솔루션을 찾고는 C # 개발자를 도움이되기를 바랍니다. 그의 제안으로 저를 도와 주셔서 SE.Redis dev에 팀 Mgravell에게 감사드립니다. 자세한 논의는 단일 호출에서 설정 키 목록을 전달하여 여러 세트를 얻기 위해 어떻게 GitHub의에서 여기 볼 수 있습니다

  3. from https://stackoverflow.com/questions/43359695/how-to-read-multiple-sets-stored-on-redis-using-some-command-or-lua-script by cc-by-sa and MIT license