JEDIS访问集群模式的api

本文介绍了一个名为 RedisClusterManager 的 Java 类实现,该类通过 JedisCluster 连接 Redis 集群,提供了多种用于操作 Redis 数据的方法,包括设置字符串值、获取字符串值、设置对象值、获取对象值等,并展示了如何初始化 JedisCluster 和执行基本的 Redis 命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.Serializable;
import java.util.*;

import org.apache.commons.lang3.SerializationUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.*;

@Component(IRedisManager._IMPL)
public class RedisClusterManager implements  IRedisManager {
    private static Logger  LOGGER= LoggerFactory.getLogger(RedisClusterManager.class);

    @Autowired
    JedisCluster jedisCluster;

    public RedisClusterManager() {
    }

    public static void main(String[] args) {
        Random random=new Random();

        RedisClusterManager redisClusterManager=new RedisClusterManager();
        JedisPoolConfig config=new JedisPoolConfig();
        config.setMaxTotal(2000
        );
        config.setMaxIdle(20);
        Set<HostAndPort> hostAndPorts=new HashSet<>();
        HostAndPort h1=new HostAndPort("127.0.0.1",7001);
        HostAndPort h2=new HostAndPort("127.0.0.1",7002);
        HostAndPort h3=new HostAndPort("127.0.0.1",7003);
        HostAndPort h4=new HostAndPort("127.0.0.1",7004);
        HostAndPort h5=new HostAndPort("127.0.0.1",7005);
        HostAndPort h6=new HostAndPort("127.0.0.1",7006);
        hostAndPorts.add(h1);
        hostAndPorts.add(h2);
        hostAndPorts.add(h3);
        hostAndPorts.add(h4);
        hostAndPorts.add(h5);
        hostAndPorts.add(h6);
        redisClusterManager.jedisCluster = new JedisCluster(hostAndPorts, config);
        System.out.println(redisClusterManager.jedisCluster.set("session" + 333, "" + 444));
        System.out.println(RedisResultStatus.OK.equals("OK"));

        System.out.println("保存结束");
        System.out.println(redisClusterManager.keys("session*").size());
    }

    @Override
    public Set<byte[]> keys(byte[] pattern) {
        HashSet<byte[]> keys = new HashSet();
        Iterator jedisPoolIterator = this.jedisCluster.getClusterNodes().values().iterator();

        while(jedisPoolIterator.hasNext()) {
            JedisPool pool = (JedisPool)jedisPoolIterator.next();
            Jedis jedis = null;

            try {
                jedis = pool.getResource();
                keys.addAll(jedis.keys(pattern));
            } finally {
                if(jedis != null) {
                    jedis.close();
                }

            }
        }

        return keys;
    }
    @Override
    public Set<String> keys(String pattern) {
        HashSet<String> keys = new HashSet();
        Iterator jedisPoolIterator = this.jedisCluster.getClusterNodes().values().iterator();

        while(jedisPoolIterator.hasNext()) {
            JedisPool pool = (JedisPool)jedisPoolIterator.next();
            Jedis jedis = null;

            try {
                jedis = pool.getResource();
                keys.addAll(jedis.keys(pattern));
            } finally {
                if(jedis != null) {
                    jedis.close();
                }

            }
        }
        return keys;
    }

    @Override
    public boolean setString(String sKey, String sValue, int expiredInSeconds) {
        return RedisResultStatus.OK.equals(this.jedisCluster.setex(sKey,expiredInSeconds,sValue));
    }

    @Override
    public boolean setString(String sKey, String sValue) {
        return RedisResultStatus.OK.equals(this.jedisCluster.set(sKey,sValue));
    }

    @Override
    public String getString(String sKey) {
        return this.jedisCluster.get(sKey);
    }

    @Override
    public boolean setObject(String sKey, Serializable object, int expiredInSeconds) {
        byte[] bk=sKey.getBytes();
        byte[] bv= SerializationUtils.serialize(object);
        return RedisResultStatus.OK.equals(this.jedisCluster.setex(bk,expiredInSeconds,bv));
    }

    @Override
    public boolean setObject(String sKey, Serializable object) {
        byte[] bk=sKey.getBytes();
        byte[] bv= SerializationUtils.serialize(object);
        return RedisResultStatus.OK.equals(this.jedisCluster.set(bk,bv));
    }

    @Override
    public <T> T getObject(String sKey) {
        byte[] bk=sKey.getBytes();
        byte[] bv=this.jedisCluster.get(bk);
        if (bv==null)
            return null;
        return SerializationUtils.deserialize(bv);
    }

    @Override
    public void putMap(String sKey, Map<String, String> oMap, int expiredInSeconds) {
        oMap.forEach((k,v)->{
            this.jedisCluster.hset(sKey,k,v);
        });
        this.jedisCluster.expire(sKey,expiredInSeconds);
    }

    @Override
    public void putMap(String sKey, Map<String, String> oMap) {
        oMap.forEach((k,v)->{
            this.jedisCluster.hset(sKey,k,v);
        });
    }

    @Override
    public boolean hset(String sKey, String sField, String sValue, int expiredInSeconds) {
        boolean result= this.jedisCluster.hset(sKey,sField,sValue)>0;
        if (result)
            this.jedisCluster.expire(sKey,expiredInSeconds);
        return result;
    }

    @Override
    public boolean hset(String sKey, String sField, String sValue) {
        return this.jedisCluster.hset(sKey,sField,sValue)>0;
    }

    @Override
    public Map<String, String> getMap(String sKey) {
        return this.jedisCluster.hgetAll(sKey);
    }

    @Override
    public Map<String, String> getMap(String sKey, String[] fields) {
        return null;
    }

    @Override
    public boolean existsMapItem(String sKey, String sField) {
        return false;
    }

    @Override
    public boolean hset(String sKey, String sField, Serializable oValue, int expiredInSeconds) {
        return false;
    }

    @Override
    public boolean hset(String sKey, String sField, Serializable oValue) {
        byte[] bv=SerializationUtils.serialize(oValue);
        return this.jedisCluster.hset(sKey.getBytes(),sField.getBytes(),bv)>0;
    }

    @Override
    public <T> T getMapValueAsObject(String sKey, String sField, Class<T> oClass) {
        return null;
    }

    @Override
    public void del(byte[] key){
        jedisCluster.del(key);
    }

    @Override
    public void del(String sKey) {
        jedisCluster.del(sKey);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值