Rumah > Soal Jawab > teks badan
业务场景:
redis数据切换到Oracle,取消持久化,redis只做缓存
具体需求:
从redis从库里获得了400w个无过期时间的hashkey,需要在主库中将其删除
矛盾点:
1.如果直接批量删除会导致redis拥塞,影响正常业务
2.如果每删除一个key,sleep50ms,不会影响业务,但是根据经验要跑两天
最终问题:
在不影响性能的情况下,怎么快速批量删除redis数据?
天蓬老师2017-04-21 11:17:52
Redis memadamkan kunci dengan cepat, malah 4 juta kunci tidak menjadi masalah. Saya mengesyaki kesesakan sebenarnya adalah rangkaian.
Jika anda memadamkan kunci satu demi satu, setiap kali anda menghantar arahan, pelanggan akan menunggu balasan daripada redis, yang membazirkan banyak lebar jalur rangkaian.
Anda boleh cuba menggunakan saluran paip/urus niaga. Tanpa menepu lebar jalur rangkaian pada bahagian redis, arahan dihantar pada kelajuan maksimum dan kemudian dilaksanakan sekaligus.
Jika ini tidak berjaya, anda boleh menulis skrip Lua untuk mengenal pasti dan memadam kekunci yang tidak berguna, dan menghantarnya ke redis untuk dilaksanakan dengan eval. Ini tidak sepatutnya menyekat rangkaian.
Jika ini masih menjejaskan perniagaan. . Penyelesaian muktamad ialah mencipta tuan/hamba, memadamkan kunci pada hamba, dan menggunakan tuan untuk mengendalikan permintaan. Selepas memadamkan kunci, promosikan hamba kepada tuan, dan kemudian pindahkan permintaan kepadanya.
迷茫2017-04-21 11:17:52
Cuba perintah eval redis.
Sebagai contoh, padamkan semua KEY bermula dengan cara lama:
eval "redis.call('del', unpack(redis.call('keys','old-fashioned:*')))" 0
Jika satu pemadaman menggunakan banyak prestasi, anda boleh mempertimbangkan untuk memadam dalam kelompok.
伊谢尔伦2017-04-21 11:17:52
Pada pendapat saya, anda boleh memadamnya pada pukul 2 tengah malam Masa lag paling lama mungkin 1 minit tidak ramai yang menggunakannya pada masa ini, melainkan 24 laman web trafik jam seperti Baidu Taobao! Tidak perlu berterima kasih kepada saya, nama saya Lei Feng
巴扎黑2017-04-21 11:17:52
$ redis-cli --scan --pattern 'user:*' | xargs -L 1000 redis-cli del
bermula dengan Redis 3.4:
$ redis-cli --scan --pattern 'user:*' | xargs -L 1000 redis-cli unlink