redis对大key实现分片存储

    //公共分片数量,一旦开始使用不能更改这个值,否则会位置错乱
    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);
    }

 

posted @ 2025-03-18 17:04  蓝色土耳其  阅读(43)  评论(0)    收藏  举报