Rumah Java javaTutorial redis怎么删除数据?

redis怎么删除数据?

May 20, 2019 pm 02:33 PM

由于需求的更改,之前做的一个项目需要对redis中存储的数据格式进行修改。为防止新包发布后,老数据会导致新数据无法插入。所以,必须在发布前删除掉所有的老数据。当前redis是一个公用的集群,里面涉及好几个业务。那么问题来了,如何删除大量的老数据(目前库中的key总数为1200w),而又不影响其他业务的使用。

redis怎么删除数据?

###常见批量删除redis数据的方法:

如果待删除数据的key是已知的,可以使用redis-cli的del命令 /usr/local/redis/bin/redis-cli del key 或者也可以使用其他高级语言对应的redis包或库。如java下的jedis,python下的redis库

java:   jdeis.del(key)
python: redis.delete(key)
Salin selepas log masuk

如果待删除数据的key是未知的,只知道满足特定模式的key。 这种情况下,就需要使用redis的keys 命令找出满足特定模式的key

找到满足前缀是video的所有key

/usr/local/redis/bin/redis-cli keys video_*
Salin selepas log masuk

可以使用linux的xargs来完成批量删除 /usr/local/redis/bin/redis-cli keys video* | xargs /usr/local/redis/bin/redis-cli del 3. 如果待删除的数据是库中所有的数据,可以使用flushdb清除整个库 /usr/local/redis/bin/redis-cli flushdb

###几种方法的说明

第一种方法需要明确知道特定的key

使用keys命令,当库中数据量过大,keys命令会阻塞redis的其他所有请求。无疑,这种方式对公用redis集群是不可取的。当然,具体还得考虑业务的需要。实在不行,也可以把删除脚本放到业务访问量比较小的时间点上执行。

使用flushdb这种方式,会对整个库中的数据进行清理。

###我的解决方法 线上redis集群使用的是matser-slave的结构。所以可以把阻塞请求的keys命令放到slave节点上执行,找出所有满足特定前缀的key。然后使用shell脚本或高级语言在master节点上删除数据。

#获取前缀是video,album,actor所有的key,并把这些key追加导出到文件/data/keys.txt中

#!/bin/bash

keys=('video' 'album' 'actor');
host='localhost';
port='6378';
for key in ${keys[@]};
do
  cmd="/usr/local/redis/bin/redis-cli -h ${host} -p ${port} keys gal.video.${key}*  >> /data/keys.txt";
  echo ${cmd}; 
  eval ${cmd};
done;
# 根据前面生成的key,删除数据
#!/bin/bash
host='localhost';
port='6378';
file="/data/keys.txt";
i=0;
cat ${file} | while read key;
do
  let i=i+1;
  cmd="/usr/local/redis/bin/redis-cli -h ${host} -p ${port} del ${key}";
  echo "line:"${i}",cmd:"${cmd};
  eval ${cmd}; 
done;
Salin selepas log masuk

脚本2由于是逐条发送del命令,执行效率相当的低。测试中大概是1小时删除120w条数据。1200w条需要删除10小时!!! 考虑到每次发送请求的耗时,想到可以使用redis的pipeline来实现批量提交。

__author__ = 'litao'
from redis import Redis
host="127.0.0.1"
port=6379
db=0
r =Redis(host,port,db)
pl=r.pipeline()
per_pipe_size=10000
count=0
file = open("/data/keys.txt")
print "start del all keys in "+file.name
while 1:
    lines = file.readlines(10000)
    if not lines:
        break
    for key in lines:
        key=key.strip('\n')
        pl.delete(key)
        count=count+1
        if(count==per_pipe_size):
            count=0
            pl.execute()
pl.execute()
file.close()
print 'finish del all keys'
Salin selepas log masuk

改进后的脚本2在线上执行时间仅需要2min左右!!

Atas ialah kandungan terperinci redis怎么删除数据?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Mar 17, 2025 pm 05:35 PM

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Mar 17, 2025 pm 05:44 PM

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas? Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas? Mar 17, 2025 pm 05:43 PM

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Mar 17, 2025 pm 05:46 PM

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul? Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul? Mar 17, 2025 pm 05:45 PM

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.

See all articles