//公共分片数量,一旦开始使用不能更改这个值,否则会位置错乱
private static final Integer SHARD_NUM = 100;
/**
* 判断value是否在zSet
* @param setKey
* @param value
* @return
*/
public boolean isMemberInSet(String setKey, String value) {
return redisTemplate.opsForSet().isMember(setKey, value);
}
/**
* Set对大数据量进行分片存储
* @param key 键
* @param value 值
* @param shardNum 分片数量
* @return
*/
public Long setShardSet(String key, String value,Integer shardNum) {
shardNum = ObjectUtil.isNotEmpty(shardNum) ? shardNum : this.SHARD_NUM;
int hash = value.hashCode() & Integer.MAX_VALUE;
int shard = hash % shardNum;
return this.setAdd(key + shard,value);
}
/**
* 分片查询,值是否在Set中
* @param key 键
* @param value 值
* @param shardNum 分片数量
* @return
*/
public boolean isMemberInShardSet(String key, String value,Integer shardNum) {
shardNum = ObjectUtil.isNotEmpty(shardNum) ? shardNum : this.SHARD_NUM;
int hash = value.hashCode() & Integer.MAX_VALUE;
int shard = hash % shardNum;
return this.isMemberInSet(key + shard,value);
}