Node-redis: рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рднреА NOAUTH рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 29 рдЬреВрди 2018  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: NodeRedis/node-redis

  • рд╕рдВрд╕реНрдХрд░рдг : рдиреЛрдб рд░реЗрдбрд┐рд╕ 2.8.0 / рд░реЗрдбрд┐рд╕ 4.0.9
  • рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо : NodeJS 8.11.3 Heroku-16 рд╕реНрдЯреИрдХ рдкрд░
  • рд╡рд┐рд╡рд░рдг : рдореИрдВ рд░реЗрдбрд┐рд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рд╣реИ рд▓реЗрдХрд┐рди рдиреЛрдб_рд░реЗрдбрд┐рд╕ рд╣рдореЗрд╢рд╛ рдПрдХ NOAUTH рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ
options = {
   'auth_pass': nconf.get('redis_pass')[nodeEnv],
   'no_ready_check': true,
};

рдЕрдЧрд░ рдореИрдВ redis-cli рдЯреВрд▓ рдХреЗ рд╕рд╛рде рд░реЗрдбрд┐рд╕ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ

29 Jun 2018 11:06:14.626136 <190>1 2018-06-29T18:06:14.346750+00:00 app web.1 - - ReplyError: NOAUTH Authentication required
    at new Command (/app/node_modules/redis/lib/command.js:12:22)
    at RedisClient.info (/app/node_modules/redis/lib/individualCommands.js:169:39)
    at RedisClient.ready_check (/app/node_modules/redis/index.js:534:10)
    at RedisClient.on_connect (/app/node_modules/redis/index.js:428:14)
    at Socket.<anonymous> (/app/node_modules/redis/index.js:268:14)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:111:20)
    at Socket.emit (events.js:208:7)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1173:10)Exception

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

рдореБрдЭреЗ рднреА рдпрд╣рд╛рдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред

рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢: ReplyError: NOAUTH Authentication required.

рд╕рдВрд╕реНрдХрд░рдг : рдиреЛрдб рд░реЗрдбрд┐рд╕ 3.0.0 / рд░реЗрдбрд┐рд╕ 5.0.8

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

рдХреЗрд╡рд▓ рдЖрдкрдХреЗ options рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдмрддрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рдорд╛рдирдХ рд╣реИ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдореБрдЭреЗ рд╢рд░реНрдд рд▓рдЧрд╛рдиреА рдкрдбрд╝реА рдХрд┐ рдЖрдк рдЧрд▓рдд рд░реЗрдбрд┐рд╕ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ nconf.get('redis_pass')[nodeEnv] рдЧрд▓рдд рдкрд╛рд╕рд╡рд░реНрдб (рдпрд╛ рд╢рд╛рдпрдж рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд) рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдЕрдкрдирд╛ рдЕрдзрд┐рдХ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдирдорд╕реНрддреЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдПрдХ рд╕рд╛рджреЗ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЕрднреА рднреА рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рднреЗрдЬрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдХреЗрд╡рд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ redis.conf рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЕрдирд╕реБрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ:

# use a very strong password otherwise it will be very easy to break.
#
requirepass foobared

# Command renaming.

рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдореЗрдВ рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

events.js:160
      throw er; // Unhandled 'error' event
      ^
ReplyError: Ready check failed: NOAUTH Authentication required.
    at parseError (/home/mauricio/Documents/lisapp/pos_lisa/node_modules/redis/node_modules/redis-parser/lib/parser.js:193:12)
    at parseType (/home/mauricio/Documents/lisapp/pos_lisa/node_modules/redis/node_modules/redis-parser/lib/parser.js:303:14)

рдпрд╣рд╛рдВ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рдиреЛрдбрдЬ рд╕рд░реНрд╡рд░ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реВрдВ:

const redisPassword = "foobared" ; 
const ClientRedisApi = redis.createClient({
          host : '127.0.0.1',  
          no_ready_check: true,
          auth_pass: redisPassword,                                                                                                                                                           
});                               

ClientRedisApi.on('connect', () => {   
          global.console.log("connected");
})                              

ClientRedisApi.on('error', err => {       
          global.console.log(err.message)
})                             

ClientRedisApi.set("foo", 'bar');         

ClientRedisApi.get("foo", function (err, reply) {
        global.console.log(reply.toString())
})

рдордЬреЗрджрд╛рд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдХреБрдВрдЬреА "рдлреВ" рдореЗрд░реЗ рд░реЗрдбрд┐рд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ "рдмрд╛рд░" рдорд╛рди рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдРрдк рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдпрд╣рд╛рдВ рд╕рднреА рдХреЛред рдореБрдЭреЗ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬрдм рдореИрдВрдиреЗ рд▓рд┐рдирдХреНрд╕ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд╛рд╕рд╡рд░реНрдб рдЬрдирд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдПрдХ рд▓рдВрдмреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдерд╛ред рдЬрдм рдореИрдВрдиреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдХреБрдЫ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдмрджрд▓ рджрд┐рдпрд╛, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣рд╛ред рдпрд╣ рдЗрд╕ Node.JS рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╣реА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдореИрдВ рд░реЗрдбрд┐рд╕-рдХреНрд▓реА рдореЗрдВ рдЧрдпрд╛ рдФрд░ рдЗрд╕реЗ рдСрде рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рддреЛ рд▓рдВрдмреЗ рдкрд╛рд╕рд╡рд░реНрдб рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, createClient() рд╡рд┐рдзрд┐ рдХреЗ рджреМрд░рд╛рди рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдареАрдХ рд╡рд╣реА рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рднрд▓реЗ рд╣реА рдореИрдВрдиреЗ рдХрд┐рд╕ рд╡рд┐рдзрд┐ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (рдпрд╛рдиреА - рдкреВрд░реНрдг рдпреВрдЖрд░рдПрд▓, рдпрд╛ рд╡рд┐рдХрд▓реНрдк рдмреНрд▓реЙрдХ рдореЗрдВ "auth_pass"/"рдкрд╛рд╕рд╡рд░реНрдб", рдпрд╛ redisClient.auth() рд╡рд┐рдзрд┐ - рд╡реЗ рд╕рднреА рд▓рдВрдмреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдП)ред

рд╣рд╛рдп @roschler , рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рд╕рдЪреНрдЪрд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, '123' рдЬреИрд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рднреА рдирд╣реАрдВред рдореИрдВ рдЙрди рд╕рднреА рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╣реИрдВ рдФрд░ рдХреБрдЫ рднреА рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╕рдЪ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдФрд░ рдХреЛрдИ рдЪрд╛рд░рд╛ рдирд╣реАрдВ рд╣реИред рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

@maooricio рдореБрдЭреЗ 99.999% рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рд╕рд░реНрд╡рд░ рдпрд╛ рдЧрд▓рдд рд╕рд░реНрд╡рд░ рдкрд░ рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИред рдЕрдХреНрдЯреВрдмрд░ 2018 рд╕реЗ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ redis-cli рдореЗрдВ MONITOR рдХреЗ рд╕рд╛рде рдЧреВрдВрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @roschler рдХреЗ рдкрд╛рд╕ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реИ (рдЙрджреНрдзрд░рдг?)

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдореЗрд░реЗ рд╕рд╛рде рд╣реБрдИ рд╣реИ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд░реЗрдбрд┐рд╕ рдбреАрдмреА рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИ

@nicollasmatheus рдЖрдкрдХреА рдХреНрдпрд╛ рддреНрд░реБрдЯрд┐ рд╣реИ?

рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИред рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд╣реА рд╣реИрдВред рдореИрдВрдиреЗ рд╕рднреА 3 рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдЙрди рд╕рднреА рдореЗрдВ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рд╣реИред

      // First method
      const client = redis.createClient(process.env.REDIS_PORT, process.env.REDIS_HOST);
      client.auth(process.env.REDIS_PASSWORD);

      // Second method
      const client = redis.createClient(process.env.REDIS_PORT, process.env.REDIS_HOST, {
        password: process.env.REDIS_PASSWORD
      });

      // Third method
      const client = redis.createClient(uri)

рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдмрд╛рдж NODE_DEBUG=redis

[0] Sending auth to redis:6379 id 0
[0] Send redis:6379 id 0: *2
[0] $4
[0] auth
[0] $14
[0] mypassword
[0]
[0] Stream connected redis:6379 id 0
[0] Redis: CONNECTED // CUSTOM MESSAGE
[0] Checking server ready state...
[0] Send redis:6379 id 0: *1
[0] $4
[0] info
[0]
[0] Net read redis:6379 id 0
[0] Redis server ready.
[0] on_ready called redis:6379 id 0
[0] Redis: READY // CUSTOM MESSAGE
[0] Stream connected redis:6379 id 1
[0] Checking server ready state...
[0] Send redis:6379 id 1: *1
[0] $4
[0] info
[0]
[0] Net read redis:6379 id 1
[0]
[0] /app/node_modules/redis/lib/command.js:12
[0]         this.error = new Error();
[0]                      ^
[0] ReplyError: NOAUTH Authentication required.
[0]     at new Command (/app/node_modules/redis/lib/command.js:12:22)
[0]     at RedisClient.info (/app/node_modules/redis/lib/individualCommands.js:169:39)
[0]     at RedisClient.ready_check (/app/node_modules/redis/index.js:534:10)
[0]     at RedisClient.on_connect (/app/node_modules/redis/index.js:428:14)
[0]     at Socket.<anonymous> (/app/node_modules/redis/index.js:268:14)
[0]     at Object.onceWrapper (events.js:299:28)
[0]     at Socket.emit (events.js:215:7)
[0]     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1115:10)
[0] npm ERR! code ELIFECYCLE

рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ docker-compose

  redis:
    container_name: redis
    image: redis:5.0.3-alpine
    restart: always
    env_file: .env
    command: ["redis-server", "--appendonly", "yes", "--requirepass", "${REDIS_PASSWORD}"]
    hostname: ${REDIS_HOST}
    volumes:
      - ~/.mydata/redis:/data
    ports:
      - ${REDIS_PORT}:6379
    networks:
      - my-network

рдФрд░ рдореИрдВ рдХреНрд▓реА redis-cli -h 127.0.0.1 -p 6379 -a 'mypassword' . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЗрдбрд┐рд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реВрдВ

@thellimist рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ redis-cli рдФрд░ MONITOR рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЖрдкрдХреА рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рдеред

@рд╕реНрдЯреЙрдХрд╣реЛрдордХреНрд╕

export default class Cache {
   static client: any

   static init(): Promise<any> {
      if (Cache.client) {
        logger.error("Client already exists")
        return new Promise((resolve, reject) => { reject() });
      }

      const client = redis.createClient(process.env.REDIS_PORT, process.env.REDIS_HOST, {
        password: process.env.REDIS_PASSWORD
      });
      Cache.client = asyncRedis.decorate(client);
      Cache.client.monitor(function (err, res) {
        logger.info("Entering monitoring mode.");
      });
      Cache.client.set('foo', 'bar');

      Cache.client.on("ready", (e: any) => {
        logger.info(`ready ${e}`);
      });

      Cache.client.on("reconnecting", (e: any) => {
        logger.info(`reconnecting ${e}`);
      });

      Cache.client.on("end", (e: any) => {
        logger.info(`end ${e}`);
      });

      Cache.client.on("warning", (e: any) => {
        logger.info(`warning ${e}`);
      });

      Cache.client.on("monitor", (e: any, res: any) => {
        logger.error(`monitor err: ${e}`);
        logger.info(`monitor res: ${res}`);
      });

      Cache.client.on("connect", () => {
        logger.info("connected");
      });
      Cache.client.on("error", (e: any) => {
        logger.error(`Error: :${e}`);
      });

      return new Promise((resolve, reject) => { resolve() }
   }

рдФрд░ рдореИрдВ await Cache.init() рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

[0] Sending auth to redis:6379 id 0
[0] Send redis:6379 id 0: *2
[0] $4
[0] auth
[0] $14
[0] mypassword
[0]
[0] Queueing monitor for next server connection.
[0] Queueing set for next server connection.
[0] Stream connected redis:6379 id 0
[0] 2019-12-17 06:49:48 error [server.ts]: connected
[0] Checking server ready state...
[0] Send redis:6379 id 0: *1
[0] $4
[0] info
[0]
[0] Net read redis:6379 id 0
[0] Redis server ready.
[0] on_ready called redis:6379 id 0
[0] Sending offline command: monitor
[0] Send redis:6379 id 0: *1
[0] $7
[0] monitor
[0]
[0] Sending offline command: set
[0] Send redis:6379 id 0: *3
[0] $3
[0] set
[0] $3
[0] foo
[0] $3
[0] bar
[0]
[0] 2019-12-17 06:49:48 info [server.ts]: ready undefined
[0] Net read redis:6379 id 0
[0] 2019-12-17 06:49:48 info [server.ts]: Entering monitoring mode.
[0] 2019-12-17 06:49:48 error [server.ts]: monitor err: 1576565388.385183
[0] 2019-12-17 06:49:48 info [server.ts]: monitor res: set,foo,bar
[0] Stream connected redis:6379 id 1
[0] Checking server ready state...
[0] Send redis:6379 id 1: *1
[0] $4
[0] info
[0]
[0] Net read redis:6379 id 1
[0]
[0] /app/node_modules/redis/lib/command.js:12
[0]         this.error = new Error();
[0]                      ^
[0] ReplyError: NOAUTH Authentication required.
[0]     at new Command (/app/node_modules/redis/lib/command.js:12:22)
[0]     at RedisClient.info (/app/node_modules/redis/lib/individualCommands.js:169:39)
[0]     at RedisClient.ready_check (/app/node_modules/redis/index.js:534:10)
[0]     at RedisClient.on_connect (/app/node_modules/redis/index.js:428:14)
[0]     at Socket.<anonymous> (/app/node_modules/redis/index.js:268:14)
[0]     at Object.onceWrapper (events.js:299:28)
[0]     at Socket.emit (events.js:215:7)
[0]     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1115:10)

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреА/рд╡реИрд▓ "рдлреВ: рдмрд╛рд░" рдХреЛ рд░реЗрдбрд┐рд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдпрд╣ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рд╣реА рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдлрд┐рд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдпрд╣ рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред рдореИрдВ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╕рд░реНрд╡рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ await Cache.init() рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред рд╕реБрдиреЛред

@thellimist рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЧрд▓рдд рд╕рдордЭрддреЗ рд╣реИрдВ - рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдареАрдХ рд╕реЗ рдирд┐рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ MONITOR _from_ redis-cli рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдКрдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рднреАрддрд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрд░ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЙрдирд┐рдЯрд░ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ)ред рдореИрдВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлреНрд▓рд╢ рдХрд┐рдП рдЧрдП рдбреАрдмреА рдкрд░ рднреА рдЪрд▓рд╛рдКрдВрдЧрд╛ред

рд╡реИрд╕реЗ рднреА, рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрдХрд░ (рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ), рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рджрд┐рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдЪрд┐рдд рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдмрд┐рдирд╛ redis.createClient рдкрд░ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рд╢рд╛рдпрдж рдПрдХ рдФрд░ рдореЙрдбреНрдпреВрд▓ рднреА)ред рдореБрдЭреЗ рдкреБрди: рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдбреАрдмрдЧ рд▓реЙрдЧ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ id 1 рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдЯреНрд░реАрдо рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

@рд╕реНрдЯреЙрдХрд╣реЛрдордХреНрд╕

рдЬреИрд╕рд╛ рдЖрдкрдиреЗ рдХрд╣рд╛, рдорд╛рдорд▓рд╛ рд╕рд░рд▓ рдерд╛ред рдореИрдВ рдЯрд╛рдЗрдкреЛрд░реНрдо рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдХреЙрдиреНрдлрд┐рдЧ рдлрд╛рдЗрд▓ рдереА рдЬреЛ рдЬреЗрдПрд╕/рдЯреАрдПрд╕ рдлрд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рдереАред рдиреЛрдб рд░реЗрдбрд┐рд╕ рд▓реЙрдЧ рдиреЗ рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рдХрд┐ рдЗрд╕реЗ рдХрд╣рд╛рдВ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдвреВрдВрдврдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ред

рдзрдиреНрдпрд╡рд╛рджред

рдпрджрд┐ рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЕрдкрдиреЗ redis.conf рдХреА рдлрд╝рд╛рдЗрд▓ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗрдЯрд┐рдВрдЧ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

bind 0.0.0.0

рдЙрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ред

@mariothedev рдЗрд╕рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред рдЙрдЪрд┐рдд рдлрд╛рдпрд░рд╡реЙрд▓ рдХреЗ рдмрд┐рдирд╛, рдЖрдкрдХрд╛ рд░реЗрдбрд┐рд╕ рдЙрд╕ bind рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЦреБрд▓рд╛ рд╣реИред

@stockholmux - рдореБрдЭреЗ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж :)

рдореБрдЭреЗ рднреА рдпрд╣рд╛рдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред

рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢: ReplyError: NOAUTH Authentication required.

рд╕рдВрд╕реНрдХрд░рдг : рдиреЛрдб рд░реЗрдбрд┐рд╕ 3.0.0 / рд░реЗрдбрд┐рд╕ 5.0.8

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЙрддреНрддрд░ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдпрд╣ рдзрд╛рдЧрд╛ рдЖрдпрд╛ред рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИред

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

рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЪреАрдЬ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдРрдк рдореЗрдВ рдХреБрдЫ рдФрд░ рд░реЗрдбрд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдирд┐рдХрд╛рд▓ рд░рд╣рд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рдмреБрд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рддреНрд░реБрдЯрд┐ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд░реЗрдбрд┐рд╕ рдХрдиреЗрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ password рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ auth_pass ред

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