根据前缀keyPre 删除keys
String keyPre = "CONTROLLER_getTodayStocks_1";
Set keys = redisTemplate.keys(keyPre + "*");
if (ObjectUtil.isNotEmpty(keys)) {
redisTemplate.delete(keys);
}
debug看下执行流程:
1、keyPro不能为空
redisTemplate.keys()方法里面有个断言,为空就失败
2、序列化keyPre,把字符串变为字节数组
这里可以看到如果keyPre为null,序列化之后返回null
3、这里会拿到redis中所有匹配上的key,然后执行excute两个参数的方法
执行excute方法传入两个参数 1、连接对象,这个对象是后面创建的 2、true,表示暴露这个连接
然后执行三个参数的方法 1、回调 2、表示暴露连接 3、表示不使用管道
管道(pipeline)可以一次性发送多条命令并在执行完后一次性将结果返回,pipeline 通过减少客户端与 redis 的通信次数来实现降低往返延时时间,而且 Pipeline 实现的原理是队列,而队列的原理是时先进先出,这样就保证数据的顺序性。
现在执行三参数的excute
1、拿到连接工厂
2、创建redis连接对象,未开启事务支持
3、看一下redis事务同步管理器中是否存在连接
4、对redis连接对象前置处理
5、判断连接是否使用了pipeline,只有开启了pipeline这里才会开开pipeline
6、判断是否暴露连接,很显然两个参数的excute是暴露连接了的,这时使用前面创建好的连接对象,否则会创建一个代理连接对象
7、接下来redis该行动了
8、这里根据前面创建的连接和keyPre,执行keys方法
9、在这里执行keys方法,执行invoke方法返回一个Set集合
invoke执行doInvoke
这里调用redis连接池执行命令,这里会等待执行命令的线程返回结果
文章来源:https://www.toymoban.com/news/detail-413103.html
10、执行完doInRedis之后就拿到符合匹配条件的keys
11、判断是否有管道开启,开的的话就关闭
12、RedisTemplate对结果进行后置处理
13、断开连接,返回结果
14、可以看到此时已经获取到redis中匹配的key
文章来源地址https://www.toymoban.com/news/detail-413103.html
到了这里,关于RedisTemplate删除指定前缀Keys的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!