自己写的工具类,写好后可以用现代码Set<String> cache=UtoolsClient .Scan1();替代以下的代码就OK 示例: 原代码Set<String> cache = stringRedisTemplate.keys("menu_auth_*");
package com.sunyard.system.admin.utils;/* @author fuqing @version 1.8 */ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.ScanOptions; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import sun.reflect.generics.tree.ByteSignature; import javax.annotation.PostConstruct; import java.nio.charset.StandardCharsets; import java.util.HashSet; import java.util.Set; @Component public class UtoolsClient implements ApplicationRunner { @Autowired StringRedisTemplate stringRedisTemplate; public static UtoolsClient utoolsClient; /* * 工具类 redis集群模式下用Scan方法替代redis中的keys*命令 * */ @PostConstruct public void init(){ utoolsClient = this; utoolsClient.stringRedisTemplate= this .stringRedisTemplate; } public static Set<String> Scan1(){ Set<String> excute =utoolsClient.stringRedisTemplate.execute(new RedisCallback<Set<String>>() { @Override public Set<String> doInRedis(RedisConnection connection) throws DataAccessException { HashSet<String> result = new HashSet<>(); //curdor用完要关闭,这里利用java7新特性紫东关闭 try { Cursor<byte[]> cursor = connection.scan(ScanOptions.scanOptions().match("menu_*").count(1000).build()); assert cursor != null; while (cursor.hasNext()){ byte[] bytes = cursor.next(); result.add(new String(bytes, StandardCharsets.UTF_8)); } } catch (Exception e) { e.printStackTrace(); } return result; } }); System.out.println(excute); return excute; } @Override public void run(ApplicationArguments args) throws Exception { System.out.println(""); } }
最后说一下,写好工具类后如何调用:相信我们在替换之前keys*命令的代码一般是这样写
如下举例:
Set<String> cache = stringRedisTemplate.keys("menu_*");
将这行代码替换成工具类.方法调用:按照我上面的代码就改成这样:
Set<String> cache =UtoolsClient .Scan1();
搞定!
版权声明:本文为m0_65057585原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。