Node-redis: рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 13 рдЬрдире░ 2014  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: NodeRedis/node-redis

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ,

рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ node_redis рдореЗрдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ?

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрддрд╛ рд╣реИ - рдФрд░ рдореИрдВ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдиреЛрдб_рд░реЗрдбрд┐рд╕ рдореЗрдВ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ

[ ec2-user@devops ~]$ redis-benchmark -n 100000 -t set, get -P 16 -q -h 10.0.1.10
рд╕реЗрдЯ: резрепрепремрежреж.реореж рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЕрдиреБрд░реЛрдз
рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ: резрепрейрежрелреж.резреп рдЕрдиреБрд░реЛрдз рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб

[ ec2-user@devops ~]$ redis-benchmark -n 100000 -t set, get -q -h 10.0.1.12
рд╕реЗрдЯ: 14098.41 рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЕрдиреБрд░реЛрдз
рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ: рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 13743.82 рдЕрдиреБрд░реЛрдз

рдпрд╣ рд░реЗрдбрд┐рд╕ рдиреЛрдб рдкрд░ 10 рдЧреБрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдВрддрд░ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж,
рджрд┐рдорд┐рддреНрд░реА

Feature Request fixed / done

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╕рднреА рдЖрджреЗрд╢ "рдкрд╛рдЗрдкрд▓рд╛рдЗрди" рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЗрдиреНрд╣реЗрдВ рдПрдХ рдпрд╛ рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдПрдХ рд╣реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд▓рд┐рдЦрдиреЗ рдХреЗ рдлреНрд░реЗрдо рдореЗрдВ рдХрднреА рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛:

  1. рд╕рд┐рд╕реНрдордореНрдмрд░ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рд╡рд╣ рд╣реИ рдЬреЛ рд╣реЗрдЧреЗрдЯрд▓ рдХреЙрд▓ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдЖрдк рдХрд┐рд╕реА рднреА рд╕рд┐рд╕реНрдордореНрдмрд░ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЗрди рдХрдорд╛рдВрдбреНрд╕ рдХреЛ рдПрдХ рд╕рд╛рде рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рд░реЛрдХ рд░рд╣реЗ рд╣реИрдВред рдЬрдм рддрдХ рд░реЗрдбрд┐рд╕ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ рддрдм рддрдХ рдХреЙрд▓рдмреИрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
  2. рдпрджрд┐ base рдФрд░ client рдЕрд▓рдЧ-рдЕрд▓рдЧ Redis рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИрдВ, рддреЛ рд╡реЗ рдПрдХ рд╣реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ _NEVER_ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рд╕реЗ рдХрд┐рд╕реА рднреА рд▓рд╛рдн рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХреЛ рдЙрд╕реА рд╕рдВрджрд░реНрдн * рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ рд░реЗрдбрд┐рд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдбреЙрдХреНрд╕ рдореЗрдВ рдкрд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди:

// These commands will all be pipelined together:
client.ping()
client.ping()
client.ping()
client.ping(function () {
  // This would *NEVER* be in the same pipeline frame as the other four because it requires a reply to be received first
  client.ping()
})

* рдпрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрджрд░реНрднреЛрдВ рд╕реЗ рдпрджрд┐ рд░реЗрдбрд┐рд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА рднреА рдЖрд╢реНрд░рд┐рдд рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рди рджреЗрдВ

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдпрд╣ client.multi рдФрд░ тАЛтАЛmulti.exec рдХрдорд╛рдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдирдорд╕реНрддреЗ @saritasa - рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реИред рдпрд╣ рд╣рдореЗрд╢рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЕрдВрджрд░ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╣реБ рдпрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╣рд╛рдп рдмреНрд░рд╛рдЗрд╕,

  1. рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБ, рдлрд┐рд░ node_redis рдХреЗ рдЕрдВрджрд░ "рдмрд╣реБ" рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреНрдпрд╛ рд╣реИ?
  2. рдХрдорд╛рдВрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреНрдпрд╛ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рдж,
рджрд┐рдорд┐рддреНрд░реА

рдорд▓реНрдЯреА рдСрдкрд░реЗрд╢рдВрд╕ рд░реЗрдбрд┐рд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реНрдкреЗрдХ рд╕реЗ рд╣реИрдВ, рдЙрдирдХреЗ рдкрд╛рд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рд▓реЗрдирджреЗрди рд╕рдВрдмрдВрдзреА рдЙрджреНрджреЗрд╢реНрдп рд╣реИ: http://redis.io/commands/multi

рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ: http://redis.io/topics/pipelining рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рд░реЗрдбрд┐рд╕ рдХреЛ рдХрдорд╛рдВрдб рд▓рд┐рдЦрдиреЗ рдХреА рдмрд╛рдд рд╣реИ рдЬрд┐рддрдиреА рддреЗрдЬреА рд╕реЗ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдЧрд▓реЗ рдПрдХ рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рднреЗрдЬрддреЗ рд╣реИрдВред рдХреНрд▓рд╛рдЗрдВрдЯ рднреЗрдЬреЗ рдЧрдП рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд░реЗрдбрд┐рд╕ рдХреЗ рдЬрд╡рд╛рдм рдХреЗ рдмрд╛рдж рднреЗрдЬреЗ рдЧрдП рдЖрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЙрддреНрддрд░реЛрдВ рдХреЛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж рдмреНрд░рд╛рдЗрд╕, рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ http://redis.io/topics/pipelining рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдиреЛрдб.рдЬреЗрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ - рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ?

рддреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ

hgetall рдФрд░ рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд - рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ? рдХреЙрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЙрд▓рдмреИрдХ рдХреЗ рдЕрдВрджрд░ рд╣реИред


рдлрд╝рдВрдХреНрд╢рди getByID (рддрд╛рд▓рд┐рдХрд╛, рдЖрдИрдбреА, рдЕрдЧрд▓рд╛) {
рдЕрдЧрд░ (! рд╕рдлрд▓рддрд╛) рд╡рд╛рдкрд╕реА рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ (рдлрд╝рдВрдХреНрд╢рди () {
getByID (рддрд╛рд▓рд┐рдХрд╛, рдЖрдИрдбреА, рдЕрдЧрд▓рд╛);
}, 2000);

var end = utils.getEndTime(),
    base = getBase(),
    client = getClient(PK2str(table, id)),
    key = getHashID(table, id);

base.sismember(table, key, function (err, val) {
    if (err || !val) return next();

    client.hgetall(key, function (err, val) {
        if (err || !val) return next(new Error('Expired'), id);

        val = arrays_parse(table, val);
        next(null, val);
        client.expire(key, cfg.ttl.shards);

        if (!exports.silent) {
            profiler.log('cache', {
                'table': table,
                'id': key,
                'method': 'getByID',
                'data': val,
                'time': end()
            });
        }
    });  
});

}

рд╕рднреА рдЖрджреЗрд╢ "рдкрд╛рдЗрдкрд▓рд╛рдЗрди" рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЗрдиреНрд╣реЗрдВ рдПрдХ рдпрд╛ рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдПрдХ рд╣реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд▓рд┐рдЦрдиреЗ рдХреЗ рдлреНрд░реЗрдо рдореЗрдВ рдХрднреА рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛:

  1. рд╕рд┐рд╕реНрдордореНрдмрд░ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рд╡рд╣ рд╣реИ рдЬреЛ рд╣реЗрдЧреЗрдЯрд▓ рдХреЙрд▓ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдЖрдк рдХрд┐рд╕реА рднреА рд╕рд┐рд╕реНрдордореНрдмрд░ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЗрди рдХрдорд╛рдВрдбреНрд╕ рдХреЛ рдПрдХ рд╕рд╛рде рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рд░реЛрдХ рд░рд╣реЗ рд╣реИрдВред рдЬрдм рддрдХ рд░реЗрдбрд┐рд╕ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ рддрдм рддрдХ рдХреЙрд▓рдмреИрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
  2. рдпрджрд┐ base рдФрд░ client рдЕрд▓рдЧ-рдЕрд▓рдЧ Redis рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИрдВ, рддреЛ рд╡реЗ рдПрдХ рд╣реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ _NEVER_ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рд╕реЗ рдХрд┐рд╕реА рднреА рд▓рд╛рдн рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХреЛ рдЙрд╕реА рд╕рдВрджрд░реНрдн * рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ рд░реЗрдбрд┐рд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдбреЙрдХреНрд╕ рдореЗрдВ рдкрд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди:

// These commands will all be pipelined together:
client.ping()
client.ping()
client.ping()
client.ping(function () {
  // This would *NEVER* be in the same pipeline frame as the other four because it requires a reply to be received first
  client.ping()
})

* рдпрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрджрд░реНрднреЛрдВ рд╕реЗ рдпрджрд┐ рд░реЗрдбрд┐рд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА рднреА рдЖрд╢реНрд░рд┐рдд рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рди рджреЗрдВ

рдЕрдм рд╕рдордЭ рдЧрдпрд╛ - рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдмрд╣реБрдд рдореВрд▓реНрдпрд╡рд╛рди рдЯрд┐рдкреНрдкрдгреА рд╣реИ!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреЛрдб_рд░реЗрдбрд┐рд╕ "рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ" рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реЗрдбрд┐рд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рд╕рдордп рдХреЛ RTT (рд░рд╛рдЙрдВрдб рдЯреНрд░рд┐рдк рдЯрд╛рдЗрдо) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдИ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕реВрдЪреА рдореЗрдВ рдХрдИ рддрддреНрд╡ рдЬреЛрдбрд╝рдирд╛, рдпрд╛ рдХрдИ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдирд╛)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдЖрд░рдЯреАрдЯреА рд╕рдордп 250 рдорд┐рд▓реАрд╕реЗрдХрдВрдб (рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдмрд╣реБрдд рдзреАрдореА рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рд╣реИ, рднрд▓реЗ рд╣реА рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 100k рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ, рд╣рдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЕрдзрд┐рдХрддрдо рдЪрд╛рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред
рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓реВрдкрдмреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рддреЛ RTT рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╣реЛрд╕реНрдЯ 0,044 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдкрд┐рдВрдЧ 127.0.0.1 рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдмрд╣реБрдд рдХреБрдЫ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдИ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реЗрдбрд┐рд╕ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдИ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдЖрд░рдЯреАрдЯреА рдХреЗ рдХрд╛рд░рдг рд╡рд┐рд▓рдВрдмрддрд╛ рдХрд╛ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдПрдХ рдмрд╛рд░ рднреЗрдЬрдирд╛, рдЬрд┐рд╕реЗ рдиреЛрдб_рд░реЗрдбрд┐рд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдиреЛрдб_рд░реЗрдбрд┐рд╕ рдореЗрдВ "рдСрдЯреЛрдореИрдЯрд┐рдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдиреЛрдб рдХреЗ рдПрд╕рд┐рдВрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдХрдорд╛рдВрдб рднреЗрдЬ рд░рд╣рд╛ рд╣реИред

рдпрд╣рд╛рдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд╣реИред http://informatikr.com/2012/redis-pipelining.html

@Vizwind @saritasa рджреЛрдиреЛрдВ .multi рдФрд░ тАЛтАЛ.batch рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 2.2 рд╕реЗ рд╕реЛрдЪрд╛ рдЧрдпрд╛ рдерд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕