Java操作Redis报错:java.util.HashSet无法转换为java.util.List求解决
解决Java操作Redis时
HashSet cannot be cast to List的错误 这个错误的根源很明确:你调用的jeproduto.keys("*")方法返回的是**Set<String>类型**,而非List<String>,直接强制类型转换自然会触发类型转换异常。
几种可行的解决方法:
1. 直接用Set接收结果(最直接)
既然方法本身返回的是Set,那就直接用Set类型存储结果,没必要强行转成List:
public void verProduto(){ Set<String> keySet = jeproduto.keys("*"); for(String key : keySet) { System.out.println("List of stored keys:: "+key); } }
2. 将Set转换为List(若业务确实需要List)
如果后续逻辑必须依赖List类型,可以把返回的Set转换成ArrayList或其他List实现类:
public void verProduto(){ Set<String> keySet = jeproduto.keys("*"); List<String> list = new ArrayList<>(keySet); // 利用ArrayList构造器直接完成转换 for(int i = 0; i<list.size(); i++) { System.out.println("List of stored keys:: "+list.get(i)); } }
3. 推荐:用scan代替keys(生产环境最佳实践)
额外提个重要的点:keys("*")命令在Redis存储大量键时会阻塞服务器,因为它会遍历所有键。生产环境更推荐使用scan命令分批获取键,避免服务阻塞:
public void verProduto(){ ScanOptions options = ScanOptions.scanOptions().match("*").build(); Cursor<String> cursor = jeproduto.scan(options); while(cursor.hasNext()){ System.out.println("List of stored keys:: "+cursor.next()); } cursor.close(); // 记得关闭游标释放资源 }
内容的提问来源于stack exchange,提问作者zungzx
相关产品推荐
相关产品推荐

