Node-redis: Membuat klien redis menggunakan objek opsi tanpa host dan port.

Dibuat pada 16 Mar 2019  ·  18Komentar  ·  Sumber: NodeRedis/node-redis

Kode ini berjalan tanpa kesalahan, bahkan jika tidak ada server lokal yang berjalan. Apakah itu perilaku yang benar atau bug?

const redis = require('redis')
const redisClient = redis.createClient({ retry_strategy: () => 1000 })
  • Versi : 2.8.
  • Platform : Node.js 10.15.3 Mac OS X Mojave, Node.js 11 alpine, Node.js 10.15.3 alpine
  • Deskripsi : Membuat klien redis menggunakan objek opsi tanpa host dan port.
Evaluating

Semua 18 komentar

@mikhailsidorov - Ya, ini benar, karena opsi default masing-masing adalah 'localhost' dan 6379 .

Oh, tetapi Anda menyatakan tidak ada server Redis lokal yang berjalan? ha ha ha
Sekarang itu akan sangat aneh.

Saya jamin Anda masih menjalankan instance Redis ... buka konsol baris perintah linux Anda.

Lihat semua instance Redis yang sedang berjalan
ps -aux | grep redis-server

Bunuh semua instance Redis
killall redis-server

Tutup tiket?

Saya menjalankannya di buruh pelabuhan, tanpa redis. Biar saya cek lagi.

Redis harus berjalan di suatu tempat, saya mencobanya di lingkungan saya dan menjalankan /etc/init.d/redis-server stop . Pertama kali melakukan persis seperti yang Anda sebutkan karena saya bingung! Kemudian saya menjalankan ps -aux | grep redis-server mengetahui bahwa saya memiliki tujuh instance Redis yang berjalan di latar belakang, lol. Setelah membunuh semua, node redis segera error seperti yang diharapkan.

@mikhailsidorov - Ya, ini benar, karena opsi default masing-masing adalah 'localhost' dan 6379 .

Oh, tetapi Anda menyatakan tidak ada server Redis lokal yang berjalan? ha ha ha
Sekarang itu akan sangat aneh.

Saya jamin Anda masih menjalankan instance Redis ... buka konsol baris perintah linux Anda.

Lihat semua instance Redis yang sedang berjalan
ps -aux | grep redis-server

Bunuh semua instance Redis
killall redis-server

Tutup tiket?

Tidak ada proses redis-server di mesin saya dan di wadah buruh pelabuhan. Juga, saya tidak memiliki proses apa pun yang mendengarkan port 6379 ( netstat -an | grep 6379 tidak mengembalikan apa pun).

Redis harus berjalan di suatu tempat, saya mencobanya di lingkungan saya dan menjalankan /etc/init.d/redis-server stop . Pertama kali melakukan persis seperti yang Anda sebutkan karena saya bingung! Kemudian saya menjalankan ps -aux | grep redis-server mengetahui bahwa saya memiliki tujuh instance Redis yang berjalan di latar belakang, lol. Setelah membunuh semua, node redis segera error seperti yang diharapkan.

Saya tidak menemukan proses menjalankan redis-server.

Saya menyiapkan contoh untuk mereproduksi masalah, silakan lihat repo ini https://github.com/mikhailsidorov/redis-issue
Kode ini berjalan tanpa kesalahan, dan saya belum menjalankan proses redis-server pada mesin yang diuji dan pada wadah buruh pelabuhan.

Apakah Anda kebetulan menjalankan redis-mock, atau yang serupa? (Meragukan, hanya memeriksa ...)
https://github.com/faeldt/redis-mock

Inilah kesalahan yang saya terima ketika saya mematikan Redis dan menjalankan aplikasi saya ... (Ini bukan aplikasi buruh pelabuhan yang Anda berikan) Saya perlu mengatur buruh pelabuhan, saya masih tidak menggunakan buruh pelabuhan, saya harus mengikuti waktu. Akan mencoba sedikit nanti....

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14)
Emitted 'error' event at:
    at RedisClient.on_error (/mnt/c/indospace.io/services/node_modules/redis/index.js:406:14)
    at Socket.<anonymous> (/mnt/c/indospace.io/services/node_modules/redis/index.js:279:14)
    at Socket.emit (events.js:196:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:17)

Apakah Anda kebetulan menjalankan redis-mock, atau yang serupa? (Meragukan, hanya memeriksa ...)
https://github.com/faeldt/redis-mock

Inilah kesalahan yang saya terima ketika saya mematikan Redis dan menjalankan aplikasi saya ... (Ini bukan aplikasi buruh pelabuhan yang Anda berikan) Saya perlu mengatur buruh pelabuhan, saya masih tidak menggunakan buruh pelabuhan, saya harus mengikuti waktu. Akan mencoba sedikit nanti....

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14)
Emitted 'error' event at:
    at RedisClient.on_error (/mnt/c/indospace.io/services/node_modules/redis/index.js:406:14)
    at Socket.<anonymous> (/mnt/c/indospace.io/services/node_modules/redis/index.js:279:14)
    at Socket.emit (events.js:196:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:17)

Tidak, saya tidak menggunakan redis-mock. Ketika saya menjalankan const redisClient = redis.createClient() tanpa opsi, saya memiliki kesalahan yang sama, tetapi ketika saya melewati { retry_strategy: () => 1000 } saya mendapatkan masalah ini.

oh oke, pikir kita berada di halaman yang sama sekarang ...

Ya, kode koneksi/sambungan ulang node_redis tampaknya benar-benar rusak saat ini, ada banyak tiket terbuka yang mengacu pada masalah ini. Saya mengajukan permintaan PR pada modul nodeJS lain malam ini, akan mencoba menyelami ini dan mengirimkan PR yang valid ketika saya bisa.

oh oke, pikir kita berada di halaman yang sama sekarang ...

Ya, kode koneksi/sambungan ulang node_redis tampaknya benar-benar rusak saat ini, ada banyak tiket terbuka yang mengacu pada masalah ini. Saya mengajukan permintaan PR pada modul nodeJS lain malam ini, akan mencoba menyelami ini dan mengirimkan PR yang valid ketika saya bisa.

Terima kasih

Ini agak disengaja. Periksa connect_timeout : Default is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed. .

Tujuannya adalah untuk memiliki fungsi yang sangat kuat di mana semua logika reconnect ada di tangan pengguna. Itu mungkin tidak selalu ideal.

Ini agak disengaja. Periksa connect_timeout : Default is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed. .

Tujuannya adalah untuk memiliki fungsi yang sangat kuat di mana semua logika reconnect ada di tangan pengguna. Itu mungkin tidak selalu ideal.

Terimakasih atas klarifikasinya.

@mikhailsidorov - tutup masalah?

@knoxcard Saya ingin membiarkan ini terbuka untuk diri saya sendiri untuk melihat ini lagi ketika saya menemukan waktu.

@knoxcard terima kasih telah melihat beberapa masalah di sini! Apakah Anda tertarik untuk membantu lebih banyak secara umum?

@BridgeAR - benar-benar! bagaimana saya harus membantu lebih banyak?

@mikhailsidorov - tutup masalah?

Tentu, jika itu diperlukan. Terima kasih

@mikhailsidorov - tidak masalah menutup masalah, BridgeAr ingin masalah ini tetap terbuka, Terima kasih!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat