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?
Jawaban:
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 -
appendfsync always
di file konfigurasi Anda. Dengan ini, Redis menjamin bahwa setiap operasi tulis disimpan ke disk. Kerugiannya adalah operasi tulis akan lebih lambat.appendfsync everysec
. Ini akan memberikan kinerja luar biasa dengan jaminan data yang wajarsumber
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 :)
sumber
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.
sumber