org/opengoofy/index12306/biz/userservice/service/impl/UserLoginServiceImpl.java
代码片段
@Override
public Boolean hasUsername(String username) {
boolean hasUsername = userRegisterCachePenetrationBloomFilter.contains(username);
if (hasUsername) {
StringRedisTemplate instance = (StringRedisTemplate) distributedCache.getInstance();
return instance.opsForSet().isMember(USER_REGISTER_REUSE_SHARDING + hashShardingIdx(username), username);
}
return true;
}
- 当bloomFilter判断username为false,username一定不存在,则应该返回false;
- 并且,hasUsername为true时,应返回
!instance.opsForSet().isMember(USER_REGISTER_REUSE_SHARDING + hashShardingIdx(username), username);,表示username已复用;
- 此外,还有一种情况没有考虑,username不存在,但bloomFilter误判为true,此时isMember() 为 false,按 2. 的 逻辑为 true,实际应为 false;
故感觉逻辑不正确,若我理解错误,请多指教。
org/opengoofy/index12306/biz/userservice/service/impl/UserLoginServiceImpl.java
代码片段
!instance.opsForSet().isMember(USER_REGISTER_REUSE_SHARDING + hashShardingIdx(username), username);,表示username已复用;故感觉逻辑不正确,若我理解错误,请多指教。