如何高性能模糊匹配删除部分前缀相同的key

面对2亿reids数据,keys()去匹配响应的key,再去调delete() 这种方法显然性能太差,并且自己尝试用这种方法,redisTemplate.keys("keys:*")程序会报从连接池中获取不到连接的问题。
我的key类似这种形式:XXX:XXX:XXX:XXX_20190402....,匹配19年前2个月的数据并删除,
如何做到高性能模糊匹配删除。

String key_like = "*_20190402";
Set keys = RedisApi.searchLike(key_like);
if (list != null && list.size() > 0) {
//删除用户所有的cookie key
RedisApi.removeFromSet(setKey, list.toArray(new String[0]));
}

redis的模糊匹配是大多数公司在生产环境严禁执行的命令,因为redis是单线程,模糊匹配需要大量的扫描时间。
建议楼主可以从以下几点出发 希望可以给你带来灵感
1: 设置redis的回收策略,可以应用在这些缓存如果没有被删除也不会对业务产生影响的场景。
2: 如果是正常业务需要按批量删除数据 可以按批次将id存至一个固定id的list或set中, 如你的例子中可以设置60个固定以日期为key的list,里面存放XXX:XXX:XXX:XXX_yyyy-MM-dd的数据
3: 如果是版本更新带来的兼容性问题,可以使用部分key或者全部key前面加入版本号的方式

面对2亿数据量的级别肯定不能用模糊查询,会造成严重阻塞,可以试试SCAN,迭代查询,通过起止游标返回查询,然后一直遍历下去,性能肯定会比keys要好很多