使用Jedis操作Redis

单机环境

使用JedisPool

package id;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class RedisStandAlone {
    // 声明一个池
    private static JedisPool pool = null;

    /**
     * 根据配置构建redis连接池
     *
     * @return JedisPool redis连接池
     */
    private static JedisPool getPool() {
        if (pool == null) {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxIdle(20);
            config.setMaxIdle(5);
            config.setMaxWaitMillis(1000 * 2);
            config.setTestOnBorrow(true);
            pool = new JedisPool(config, "127.0.0.1", 6379);
        }
        return pool;
    }

    /**
     * 回收到连接池
     *
     * @param pool 连接池
     * @param redis 连接实例
     */
    private static void returnResource(JedisPool pool, Jedis redis) {
        if (redis != null) {
            pool.close();
        }
    }

    /**
     * 获取数据
     *
     * @param key 键
     * @return 结果
     */
    public static String get(String key) {
        String result = null;

        JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getPool();
            jedis = pool.getResource();
            result = jedis.get(key);
        } catch (Exception e) {
            //释放redis对象
            pool.returnBrokenResource(jedis);
            e.printStackTrace();
        } finally {
            //返还到连接池
            returnResource(pool, jedis);
        }

        return result;
    }

    /**
     * 设置key的value
     *
     * @param key 键
     * @param value 值
     * @return 结果
     */
    public static String set(String key, String value) {
        String result = "";
        JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getPool();
            jedis = pool.getResource();
            result = jedis.set(key, value);
        } catch (Exception e) {
            //释放redis对象
            pool.returnBrokenResource(jedis);
            e.printStackTrace();
        } finally {
            //回收到连接池
            returnResource(pool, jedis);
        }
        return result;
    }
}

分布式环境

使用ShardedJedisPool,在spring中注入

<!-- JEDIS连接池配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxTotal" value="20"/>
    <property name="maxIdle" value="10"/>
    <property name="minIdle" value="2"/>
    <!--获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1-->
    <property name="maxWaitMillis" value="2000"/>
    <!--在获取连接的时候检查有效性, 默认false-->
    <property name="testOnBorrow" value="true"/>
</bean>

<!-- JEDIS SHARD 池配置 -->
<bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">
    <constructor-arg index="0" ref="jedisPoolConfig"/>
    <constructor-arg index="1">
        <list>
            <ref bean="jedis.shardInfo.default"/>
        </list>
    </constructor-arg>
</bean>

<!-- JEDIS SHARD 在此添加REDIS集群配置 -->
<bean id="jedis.shardInfo.default" class="redis.clients.jedis.JedisShardInfo">
    <constructor-arg index="0" value="127.0.0.1"/>
    <constructor-arg index="1" type="int" value="6379"/>
</bean>
<!-- JEDIS SHARD信息配置 -->
package id;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
* 分布式Redis操作工具类
*
* @Authur 17040479
*/
@Component("redisUtil")
public class RedisUtil {

private static final Logger LOGGER = LoggerFactory.getLogger(RedisUtil.class);

@Autowired
private ShardedJedisPool shardedJedisPool;

/**
 * 获取redis客户端连接实例
 *
 * @return shardJedis
 */
public ShardedJedis getRedisClient() {
    ShardedJedis shardJedis = null;
    try {
        shardJedis = shardedJedisPool.getResource();
        return shardJedis;
    } catch (Exception e) {
        LOGGER.error("[JedisDS] getRedisClent error:" + e.getMessage());
        if (null != shardJedis)
            shardJedis.close();
    }
    return null;
}

/**
 * 回收实例到连接池
 *
 * @param shardedJedis 回收实例
 */
public void returnResource(ShardedJedis shardedJedis) {
    shardedJedis.close();
}

/**
 * 回收实例到连接池
 *
 * @param shardedJedis 回收实例
 * @param broken       是否
 */
public void returnResource(ShardedJedis shardedJedis, boolean broken) {
    shardedJedis.close();
}

public String set(String key, String value) {
    String result = null;

    ShardedJedis shardedJedis = getRedisClient();
    if (shardedJedis == null) {
        return result;
    }
    boolean broken = false;
    try {
        result = shardedJedis.set(key, value);
    } catch (Exception e) {
        LOGGER.error(e.getMessage(), e);
        broken = true;
    } finally {
        returnResource(shardedJedis, broken);
    }
    return result;
}

/**
 * 获取单个key的值
 *
 * @param key 键
 * @return 值
 */
public String get(String key) {
    String result = null;
    ShardedJedis shardedJedis = getRedisClient();
    if (shardedJedis == null) {
        return result;
    }

    boolean broken = false;
    try {
        result = shardedJedis.get(key);
    } catch (Exception e) {
        LOGGER.error(e.getMessage(), e);
        broken = true;
    } finally {
        returnResource(shardedJedis, broken);
    }
    return result;
}

/**
 * 执行lua脚本
 *
 * @param luaScript
 * @param key
 * @param val
 * @param expireSeconds
 * @return
 */
public Object eval(final String luaScript, final String key, String val, final long expireSeconds) {
    ShardedJedis shardedJedis = getRedisClient();
    if (shardedJedis == null) {
        throw new RuntimeException("hmset 获取redis连接失败");
    }
    Jedis jedis = shardedJedis.getShard(key);
    boolean broken = false;
    try {
        // 参数KEY
        List<String> keys = new ArrayList<>();
        keys.add(key);
        keys.add(key);
        List<String> args = new ArrayList<>();
        args.add(val);
        args.add(String.valueOf(expireSeconds));
        return jedis.eval(luaScript, keys, args);
    } catch (Exception e) {
        LOGGER.error(e.getMessage(), e);
        broken = true;
    } finally {
        returnResource(shardedJedis, broken);
    }
    return null;
}

/**
 * setnx
 *
 * @param key
 * @param value
 * @param nx
 * @param px
 * @param expire
 * @return
 */
public String setnx(String key, String value, String nx, String px, long expire) {
    String result = "";

    ShardedJedis shardedJedis = getRedisClient();
    if (shardedJedis == null) {
        return result;
    }
    boolean broken = false;
    try {
        result = shardedJedis.set(key, value, nx, px, expire);
    } catch (Exception e) {
        LOGGER.error(e.getMessage(), e);
        broken = true;
    } finally {
        returnResource(shardedJedis, broken);
    }
    return result;
}

/**
 * del
 * @param key
 */
public void del(String key) {
    ShardedJedis shardedJedis = getRedisClient();
    if (shardedJedis == null) {
        throw new RuntimeException("del 获取redis连接失败");
    }
    boolean broken = false;
    try {
        shardedJedis.del(key);
    } catch (Exception e) {
        LOGGER.error(e.getMessage(), e);
        broken = true;
    } finally {
        returnResource(shardedJedis, broken);
    }
}

public void hmset(String key, Map<String, String> map) {
    ShardedJedis shardedJedis = getRedisClient();
    if (shardedJedis == null) {
        throw new RuntimeException("hmset 获取redis连接失败");
    }
    boolean broken = false;
    try {
        shardedJedis.hmset(key, map);
    } catch (Exception e) {
        LOGGER.error(e.getMessage(), e);
        broken = true;
    } finally {
        returnResource(shardedJedis, broken);
    }
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值