业务场景
一次性取出redis一个field中的所有key,并遍历。
方案一
使用redisTemplate.opsForHash().keys("filed")
前期数据量少,未感知到性能问题。后查询资料得知,数据量上去后keys方法严重消耗CPU,一般在生产环境禁用keys方法。
防患于未然,该方式摒弃!
方案二
使用redisTemplate游标分批次获取
使用scan主要两个参数:match和count。
match:key的正则表达式
count:每次扫描的记录数。值越小,扫描次数越过、越耗时。建议设置在1000-10000
public void getKeysTest(){
try {
Cursor<Map.Entry<String, Set<String>>> cursor = deviceRedis.opsForHash().scan("filed",
ScanOptions.scanOptions().match("*").count(1000).build());
while (cursor.hasNext()) {
String key = cursor.next().getKey()
Set<String> valueSet = cursor.next().getValue();
}