import redis import time redis_cache = redis.Redis(host="", port=0000, password="xxxx", db=1) print("begin") print(redis_cache.dbsize()) begin_pos = 0 while True: result = redis_cache.scan(begin_pos, "xxxxx_*", 100000) return_pos, datalist = result print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())), return_pos) if len(datalist) > 0: print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())), "delete", len(datalist)) redis_cache.delete(*datalist) if return_pos == 0: break begin_pos = return_pos print("over")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import
redis
import
time
redis_cache
=
redis
.
Redis
(
host
=
""
,
port
=
0000
,
password
=
"xxxx"
,
db
=
1
)
print
(
"begin"
)
print
(
redis_cache
.
dbsize
(
)
)
begin_pos
=
0
while
True
:
result
=
redis_cache
.
scan
(
begin_pos
,
"xxxxx_*"
,
100000
)
return_pos
,
datalist
=
result
print
(
time
.
strftime
(
"%Y-%m-%d %H:%M:%S"
,
time
.
localtime
(
time
.
time
(
)
)
)
,
return_pos
)
if
len
(
datalist
)
&
gt
;
0
:
print
(
time
.
strftime
(
"%Y-%m-%d %H:%M:%S"
,
time
.
localtime
(
time
.
time
(
)
)
)
,
"delete"
,
len
(
datalist
)
)
redis_cache
.
delete
(
*
datalist
)
if
return_pos
==
0
:
break
begin_pos
=
return_pos
print
(
"over"
)
|
有几个知识点:
- scan命令的第一个入参从0开始代表从头扫描
- scan命令的返回是(pos, [])元组,第一个pos可以作为下次扫描的入参pos,第二个值就是扫描到的KEY
- scan命令的第三个参数,是本次扫描的KEY数目,比如传递10万个,但是返回的LIST可能是0,因为有0个匹配
- redis的delete命令传递的是array参数,可以用*list传递