Seberapa amankah menyimpan sesi dengan Redis?

94

Saya saat ini menggunakan MySql untuk menyimpan sesi saya. Ini berfungsi dengan baik, tetapi agak lambat.

Saya telah diminta untuk menggunakan Redis, tetapi saya bertanya-tanya apakah itu ide yang bagus karena saya pernah mendengar bahwa Redis menunda operasi tulis. Saya agak takut karena sesi harus real-time.

Apakah ada yang mengalami masalah seperti itu?

Trent
sumber
1
Karena Redis mengatakan itu memiliki daya tahan opsional, maka menurut saya aman untuk menggunakannya jika Anda memilih persistensi pada HDD. Namun, untuk data sesi - saya pasti akan menyimpannya ke RAM (artinya saya tidak akan khawatir tentang bagian daya tahan dari keseluruhan cobaan). Hal terburuk yang harus terjadi jika Anda kehilangan data sesi adalah membuat pengguna Anda keluar.
NB
1
ya tapi ini adalah bagian dari persyaratan saya, pengguna tidak harus masuk kembali, dengan cara beberapa data pengguna disimpan di seluruh sesi sementara pengguna tidak masuk (pengguna tamu). Mereka akan menggunakan RAM Redis tetapi dengan logging dan / atau backup diaktifkan. Jika kami kehilangan beberapa sesi, itu dapat diterima.
Trent
1
kekhawatiran utama saya adalah tentang penulisan yang tertunda, apa yang terjadi jika pengguna masuk dan sesi ditulis dengan penundaan, dia akan dialihkan tetapi tidak masuk
Trent
2
bayangkan sebuah situs e-niaga, jika sesi hilang, keranjang saat ini juga hilang, itu tidak buruk, tetapi itu mungkin aneh bagi pengguna. Pengguna tamu hanya diidentifikasi dengan satu sesi, jadi tidak ada cara untuk memulihkan keranjang mereka.
Boris Guéry
1
@ BorisGuéry - bukan berarti saya tidak setuju, tetapi jika seseorang harus meningkatkan kinerja - kompromi harus dilakukan ketika terjadi kesalahan. Ya, akan aneh bagi pengguna untuk tiba-tiba keluar, itu pasti - tetapi pertanyaannya adalah seberapa sering hal itu diharapkan terjadi? Jika sekali atau dua kali setahun semua node Redis turun, maka saya tidak melihat alasan untuk menurunkan kinerja untuk beberapa waktu yang terisolasi ketika seluruh cluster tidak tersedia. Tapi itu hanya aku.
NB

Jawaban:

149

Redis sangat cocok untuk menyimpan sesi. Semua operasi dilakukan dalam memori, sehingga pembacaan dan penulisan akan cepat.

Aspek kedua adalah ketekunan status sesi. Redis memberi Anda banyak fleksibilitas tentang bagaimana Anda ingin mempertahankan status sesi ke hard-disk Anda. Anda dapat mengunjungi http://redis.io/topics/persistence untuk mempelajari lebih lanjut, tetapi pada tingkat tinggi, berikut adalah pilihan Anda -

  1. Jika Anda tidak mampu kehilangan sesi apa pun, atur appendfsync alwaysdi file konfigurasi Anda. Dengan ini, Redis menjamin bahwa setiap operasi tulis disimpan ke disk. Kerugiannya adalah operasi tulis akan lebih lambat.
  2. Jika Anda tidak keberatan kehilangan data sekitar 1 detik, gunakan appendfsync everysec. Ini akan memberikan kinerja luar biasa dengan jaminan data yang wajar
Sripathi Krishnan
sumber
14

Pada dasarnya ada dua tipe utama yang tersedia: async snapsnots dan fsync(). Mereka masing-masing disebut RDB dan AOF. Lebih lanjut tentang mode persistensi di halaman resmi .

Penanganan sinyal dari proses daemonisasi disinkronkan ke disk ketika menerima SIGTERM misalnya, sehingga data akan tetap ada setelah reboot. Saya pikir daemon atau OS harus macet sebelum Anda melihat kerusakan integritas, bahkan dengan pengaturan default (snapshot RDB).

Pengaturan AOF menggunakan Append Only File yang mencatat perintah yang diterima server, dan membuat ulang DB dari awal saat cold start, dari file yang disimpan. Kebijakan sinkronisasi disk default adalah mengosongkan setiap detik (IIRC) tetapi dapat disetel untuk mengunci dan menulis di setiap perintah.

Menggunakan snapshot dan log inkremental tampaknya menawarkan pendekatan data jangka panjang jangan-keberatan-jika-saya-melewatkan-beberapa-detik dengan log tambahan yang lebih aman, tetapi mahal. Redis mendukung pengelompokan di luar kotak, sehingga tampaknya replikasi juga dapat dilakukan.

Saya menggunakan pengaturan RDB default sendiri dan menyimpan snapshot ke FTP jarak jauh. Saya belum melihat kegagalan yang menyebabkan kehilangan data. Kegagalan perangkat keras akut atau pemadaman listrik kemungkinan besar akan terjadi, tetapi saya dihosting di VPS. Kesempatan kecil untuk itu terjadi :)

Morten Jensen
sumber
12

Pertanyaan ini benar-benar tentang sesi waktu nyata, dan tampaknya muncul sebagian karena kesalahpahaman tentang frasa 'operasi tulis tertunda' Sementara detailnya akhirnya diejek di komentar, saya hanya ingin membuatnya sangat jelas. ..

Anda tidak akan mengalami masalah dalam menerapkan sesi waktu nyata.

Redis adalah penyimpanan nilai kunci dalam memori dengan persistensi opsional ke disk. 'Operasi tulis tertunda' mengacu pada penulisan ke disk , bukan database secara umum, yang ada di memori. Jika Anda MENGATUR pasangan kunci / nilai, Anda dapat MENDAPATKANnya segera (mis. Dalam waktu nyata). Kebijakan yang Anda pilih berkaitan dengan persistensi (seberapa banyak Anda menunda penulisan) akan menentukan batas atas berapa banyak data yang bisa hilang dalam sebuah error.

Jordan Dodson
sumber