redission 从redis set集合随机返回部分数据 抛出类型转换错误

java.lang.ClassCastException: java.util.LinkedHashSet cannot be cast to java.util.List
    at org.redisson.spring.data.connection.RedissonConnection.sRandMember(RedissonConnection.java:993)
    at org.springframework.data.redis.core.DefaultSetOperations.lambda$distinctRandomMembers$8(DefaultSetOperations.java:204)
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:224)
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:184)
    at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:95)
    at org.springframework.data.redis.core.DefaultSetOperations.distinctRandomMembers(DefaultSetOperations.java:203)

 

程序中使用 redisTemplate.opsForSet().distinctRandomMembers(key,count)  来实现功能

 

redission中报错的方法(RedissonConnection#sRandMember)如下 :

public List<byte[]> sRandMember(byte[] key, long count) {
    return read(key, ByteArrayCodec.INSTANCE, RedisCommands.SRANDMEMBER, key, count);
}

 

断点跟踪了 read方法的返回值 是LinkHashSet   而sRandMember方法要求返回list所以抛出了异常  

 

没有办法,后来改为使用redisTemplate.opsForSet().members(key) 查所有的数据,然后在程序里过滤返回部分数据。

求解!!!!

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

保存数据之前规范一下名称的前缀,这样读取就更好控制。