Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

golang + redis masalah kinerja penjadwal konkurensi

Pada tingkat permukaan, satu-satunya hal yang saya punya pertanyaan adalah memesan grup tunggu yang bertambah dan mengquery pekerjaan:

func (s *Scheduler) Enqueue(req interface{}) {
    select {
    case s.reqChan <- req:
        s.wg.Add(1)
    }
}

Saya tidak berpikir hal di atas akan menyebabkan banyak masalah dalam praktik dengan beban kerja yang besar ini, tetapi saya pikir itu mungkin kondisi balapan yang logis. Pada tingkat konkurensi yang lebih rendah dan ukuran kerja yang lebih kecil, ini mungkin mengantrekan pesan, beralih ke goroutine yang mulai bekerja pada pesan itu, MAKA pekerjaan di grup tunggu.

Selanjutnya apakah Anda yakin process metode threadsafe?? Saya berasumsi demikian berdasarkan dokumentasi redis go, apakah berjalan dengan go run -race punya keluaran?

Pada titik tertentu Ini benar-benar masuk akal dan diharapkan kinerja menurun. Saya akan merekomendasikan memulai tes kinerja untuk melihat di mana latensi dan throughput mulai menurun:

mungkin kumpulan 10, 100, 500, 1000, 2500, 5000, 10000, atau apa pun yang masuk akal. IMO sepertinya ada 3 variabel penting untuk disetel:

  • Ukuran kumpulan pekerja
  • Ukuran Penyangga Antrian Kerja
  • Meredis MaxActive

Hal terbesar yang muncul adalah tampilannya seperti redis.Pool dikonfigurasi untuk memungkinkan jumlah koneksi yang tidak terbatas:

 pool := &redis.Pool{
        MaxIdle:     50,
        IdleTimeout: 240 * time.Second,
        TestOnBorrow: func(c redis.Conn, t time.Time) error {
            _, err := c.Do("PING")
            return err
        },
        Dial: func() (redis.Conn, error) {
            return dial("tcp", address, password)
        },
    }

// Jumlah maksimum koneksi yang dialokasikan oleh kumpulan pada waktu tertentu.// Ketika nol, tidak ada batasan jumlah koneksi di kumpulan.MaxActive int

Saya pribadi akan mencoba memahami di mana dan kapan kinerja mulai menurun sehubungan dengan ukuran kumpulan pekerja Anda. Hal ini dapat mempermudah untuk memahami batasan program Anda.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis Expire tidak berfungsi

  2. Bagaimana saya bisa memeriksa data di RedisCloud DB saya dari jarak jauh?

  3. Bisakah Redis menulis ke database seperti PostgreSQL?

  4. Tidak dapat terhubung ke server Redis menggunakan Penyedia Status Sesi ASP.NET

  5. Laravel 5.1 Session and Socket.IO + Redis - Mengirim Pemberitahuan ke Pengguna yang Masuk (Dikenal) dan Grup Pengguna