Rumah  >  Soal Jawab  >  teks badan

tomcat - masalah penyimpanan data java

Seperti tajuknya, terdapat sistem log masuk, tetapi projek lama tidak mempunyai cache (saya tidak mempunyai hak untuk menambahnya), tetapi perkhidmatan yang berbeza perlu menggunakan data dari permintaan http sebelumnya (dibezakan oleh pengguna) , dan saya ingin menyimpannya untuk mengelakkan menghantar http berulang kali setiap kali.

Backend springmvc

Buat masa ini saya boleh fikirkan 3 kaedah:

1. Buangnya ke dalam sesi (HttpSessionListener), ia sepatutnya menjadi yang paling mudah, tetapi saya tidak tahu masalah yang mungkin berlaku
2 Buangnya ke dalam threadlocal (pengawal membuat pembolehubah threadlocal statik, atau menulis pemegang konteks)
3. . Pengawal menjadikan ahli ConcurrentHashMap, Masukkan data mengikut <ID Pengguna, data yang diperolehi oleh permintaan http> Tetapi ini pastinya tidak boleh dilaksanakan dan boleh menyebabkan kawasan timbunan OOF

Mari kita bercakap tentang kemungkinan masalah dengan pilihan kedua.
1. Terdapat kemungkinan masalah kebocoran memori yang disebut di Internet, yang menyebabkan OOF dalam PermGen Teks asal disambungkan kepada analisis kes kebocoran memori ThreadLocal

Saya tidak pasti sama ada akan ada masalah (teks asal agak tidak jelas), kerana set ThreadLocalMap mempunyai mekanisme perlindungan

2. Adakah rentetan data dalam utas permintaan akan muncul? benang permintaan Semasa menyajikan A, saya mendapat data B. .

迷茫迷茫2686 hari yang lalu660

membalas semua(1)saya akan balas

  • 给我你的怀抱

    给我你的怀抱2017-06-12 09:23:38

    Kaedah 1 adalah yang paling mudah dan paling biasa digunakan Jika bilangan pengguna terlalu besar, atau pengimbangan beban dilakukan, adalah perlu untuk melaksanakan storan berpusat Sesi Terdapat banyak penyelesaian siap yang boleh menyokong storan berpusat HttpSession , termasuk Redis, MongoDB dan MySQL Terdapat kesemuanya, cari di GitHub.

    Kaedah 2 tidak menyelesaikan masalah, terutamanya kerana selepas pengguna log masuk, berbilang permintaan mungkin jatuh ke dalam berbilang benang. Perkara kedua yang anda sebutkan juga adalah alasan.

    Kaedah 3 juga merupakan kaedah pelaksanaan Malah, HttpSession Tomcat dilaksanakan menggunakan ConcurrentHashMap (hanya ia menggunakan sessionId dan bukannya userId sebagai kunci), tetapi satu perkara yang perlu diambil perhatian ialah anda mesti mengurus sendiri setiap Nilai-Kekunci dalam Peta. Kitaran hayat, sebagai contoh, jika Sesi tamat, ia mesti dialih keluar tepat pada masanya.

    balas
    0
  • Batalbalas