Redis Serialization Compress menggunakan Snappy Compression (🇮🇩)
Well, hello semua! Perkenalkan nama gue Adib. Gue seorang backend engineer disalah satu quick commerce di Indonesia. Mau coba coba aja nih buat nulis beberapa blog terkait kerjaan, kehidupan dan karier kali aja ada yang sama sama butuh dan gw bisa sharing sebisa gw aja nih. Jadi mohon maaf sebelumnya kalau tulisan gw kali ini kurang rapi, dan mungkin masih acakadut ini, hehe.
Oke jadi apa yang akan kita bahas ditulisan kali ini? Long story short, gue yang bertanggung jawab akan service cart dibackend menemui kendala yang lumayan krusial, redis yang dipake buat caching di sisi service cart ini sering penuh banget karena meningkatnya transaksi yang masuk beberapa bulan ini (agustus). Redis yang dipake sekarang itu punya memory 8GB dan sering penuh. Sebenernya dampak penuhnya ini kagak berpengaruh secara langsung, cuman, kalau semisal penuh mulu takutnya experience user jadi jelek nih karena lemot dan sebagainya.
Maka dari itu ada beberapa hal yang gue dan team gue lakukan salah satunya naikin memory redis, yang which is, kudu matiin service cart dan matiin redis nya baru deh upgrade memorynya. Itu udah berhasil dilakukan. Namun gue juga kudu ngasih solusi long term sehingga kagak perlu untuk ngelakuin upgrade memory lagi semisal transaksi selalu meningkat. Nah ini yang akan gue bahas disini, service cart gue mau implementasi yang namanya Snappy Compression waktu nulis ke redis yang sebelumnya cuman pake string biasa tanpa ada nya compression.
Berdasarkan rekomendasi dari redis, https://docs.redis.com/latest/ri/memory-optimizations/, sangat disarankan untuk mengimplementasikan Snappy compression dalam melakukan operasi redis.
Mulai dah tuh gue googling kan ya gimana sih caranya pakenya di Java Spring Boot, turns out gue nemu github ini https://github.com/cboursinos/java-spring-redis-compression-snappy-kryo
Langsung gas ajalah kita pake modal copas doang, hehe.
Kondisi Awal
waktu itu gue cek dulu nih berapa sih memory usage yang dipake rata rata di satu key pake command
MEMORY USAGE key
di redis-cli

hasil check redis dilocal gue
3136 ini jadi patokan awal gue sebeleum nanti implementasi compressionnya. Dan ini konfigurasi sebelum gue pake compression. Anyway gue pake redisson buat client redis di service gue.
RedissonClient redissonClient = Redisson.create(config);
RedissonConnectionFactory connectionFactory = new RedissonConnectionFactory(redissonClient);
RedisTemplate<String, String> template = *new *RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
template.setValueSerializer(*new *StringRedisSerializer());
template.setKeySerializer(*new *StringRedisSerializer());
template.afterPropertiesSet();
return template;
Kondisi Setelah implementasi Snappy Compression
Duar setelah gue lumayan pusing walapun copas doang, akhirnya gue bisa implementasiin si snappynya dan gue lumayan kaget dengan hasil compressionnya yang mencapai 50% di redisnya

Goks gak sih ampe 50%? apa gue norak?
3136 -> 1856 lumayan banget kan? ternyata implementasi ini lumayan banget buat ngecompress data gede di redis jadi setengahnya wkwkwk. Gue lumayan kaget apa mungkin guenya yang norak? wkwk. Dan ini konfigurasi yang gue pake waktu implementasi compressionnya
RedissonClient redissonClient = Redisson.create(config);
RedissonConnectionFactory connectionFactory = new RedissonConnectionFactory(redissonClient);
RedisTemplate<String, String> template = *new *RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
template.setValueSerializer(*new *SnappyRedisSerializer<>());
template.setKeySerializer(*new *StringRedisSerializer());
template.afterPropertiesSet();
return template;
dan hasil yang gw otak atik dari github tadi seperti ini

lumayan kan walaupun pasti ada trade-off nya, cuman kalau buat jangka panjang, solusi compression ini termasuk worth it dibanding menggunakan solusi naikin memory si redisnya ahaha
Mungkin itu dulu yang bisa gue share, kalau mungkin pengen sharing balik bisa comment atau hubungin ke dm gue langsung aja di twitter twitter.com/adibaulia_. Thank you!