详解java操作Redis数据库的redis工具(RedisUtil,jedis工具JedisUtil,JedisPoolUtil)

该工具包含是封装了jedis,包含redis.properties和jedisPool,序列化使用的是protostuff,map类型操作使用的是fastjson

自己抽空写的,基本只要理解什么是get,什么是set就可以使用redis数据库了

下载地址:点击打开链接

JedisPoolUtil的源码:

package com.bsy.common;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

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

public class JedisPoolUtil {

	private static final String PROPERTIES_PATH = "redis.properties";
	private static JedisPool jedisPool;

	static {
		if (jedisPool == null) {
			try {
				init();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 初始化Jedis连接池
	 *
	 * @throws IOException
	 */
	private static void init() throws IOException {
		URL resource = JedisPoolUtil.class.getClassLoader().getResource(PROPERTIES_PATH);
		if (resource == null) {
			throw new FileNotFoundException("没有找到指定redis的配置文件:" + PROPERTIES_PATH);
		}
		//加载配置文件
		InputStream input = new FileInputStream(resource.getFile());
		Properties p = new Properties();
		p.load(input);
		//开始配置JedisPool
		String host = p.getProperty("redis.host") == null ? "localhost" : p.getProperty("redis.host");
		int port = p.getProperty("redis.port") == null ? 6379 : Integer.parseInt(p.getProperty("redis.port"));
		String auth = p.getProperty("redis.auth");
		int poolTimeOut = p.getProperty("connectionTimeOut") == null ? 2000
				: Integer.parseInt(p.getProperty("connectionTimeOut"));
		//判断使用默认的配置方式还是采用自定义配置方式,
		boolean isSetDefault = p.getProperty("defaultSetting") == null ? true
				: Boolean.parseBoolean(p.getProperty("defaultSetting"));
		if (isSetDefault) {
			jedisPool = new JedisPool(new GenericObjectPoolConfig(), host, port, poolTimeOut, auth);
		} else {
			JedisPoolConfig config = new JedisPoolConfig();
			String blockWhenExhausted = p.getProperty("redis.blockWhenExhausted");
			if (blockWhenExhausted != null) {
				config.setBlockWhenExhausted(Boolean.parseBoolean(blockWhenExhausted));
			}
			String evictionPolicyClassName = p.getProperty("redis.evictionPolicyClassName");
			if (evictionPolicyClassName != null) {
				config.setEvictionPolicyClassName(evictionPolicyClassName);
			}
			String jmxEnabled = p.getProperty("redis.jmxEnabled");
			if (jmxEnabled != null) {
				config.setJmxEnabled(Boolean.parseBoolean(jmxEnabled));
			}
			String lifo = p.getProperty("redis.lifo");
			if (lifo != null) {
				config.setLifo(Boolean.parseBoolean(lifo));
			}
			String maxIdle = p.getProperty("redis.maxIdle");
			if (maxIdle != null) {
				config.setMaxIdle(Integer.parseInt(maxIdle));
			}
			String maxTotal = p.getProperty("redis.maxTotal");
			if (maxTotal != null) {
				config.setMaxTotal(Integer.parseInt(maxTotal));
			}
			String maxWaitMillis = p.getProperty("redis.maxWaitMillis");
			if (maxWaitMillis != null) {
				config.setMaxWaitMillis(Long.parseLong(maxWaitMillis));
			}
			String minEvictableIdleTimeMillis = p.getProperty("redis.minEvictableIdleTimeMillis");
			if (minEvictableIdleTimeMillis != null) {
				config.setMinEvictableIdleTimeMillis(Long.parseLong(minEvictableIdleTimeMillis));
			}
			String minIdle = p.getProperty("redis.minIdle");
			if (minIdle != null) {
				config.setMinIdle(Integer.parseInt(minIdle));
			}
			String numTestsPerEvictionRun = p.getProperty("redis.numTestsPerEvictionRun");
			if (numTestsPerEvictionRun != null) {
				config.setNumTestsPerEvictionRun(Integer.parseInt(numTestsPerEvictionRun));
			}
			String softMinEvictableIdleTimeMillis = p.getProperty("redis.softMinEvictableIdleTimeMillis");
			if (softMinEvictableIdleTimeMillis != null) {
				config.setSoftMinEvictableIdleTimeMillis(Long.parseLong(softMinEvictableIdleTimeMillis));
			}
			String testOnBorrow = p.getProperty("redis.testOnBorrow");
			if (testOnBorrow != null) {
				config.setTestOnBorrow(Boolean.parseBoolean(testOnBorrow));
			}
			String testWhileIdle = p.getProperty("redis.testWhileIdle");
			if (testWhileIdle != null) {
				config.setTestWhileIdle(Boolean.parseBoolean(testWhileIdle));
			}
			String timeBetweenEvictionRunsMillis = p.getProperty("redus.timeBetweenEvictionRunsMillis");
			if (timeBetweenEvictionRunsMillis != null) {
				config.setTimeBetweenEvictionRunsMillis(Long.parseLong(timeBetweenEvictionRunsMillis));
			}
			jedisPool = new JedisPool(config, host, port, poolTimeOut, auth);
		}

	}

	public static Jedis getJedis() {
		return jedisPool.getResource();
	}

	public static void closeJedis(Jedis jedis) {
		if (jedis != null) {
			jedis.close();
		}
	}

}

redis.properties源码:

#redis地址
redis.host=localhost
#redis端口号
redis.port=6379
#redis的密码
#redis.auth=

#是否使用JedisPool默认的配置,确定true,默认true
#defaultSetting=false;
#jedisPool的timeout时间,默认2000
#connectionTimeOut=
#连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
#redis.blockWhenExhausted=true
#设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数)
#redis.evictionPolicyClassName=org.apache.commons.pool2.impl.DefaultEvictionPolicy
#是否启用pool的jmx管理功能, 默认true
#redis.jmxEnabled=true
#是否启用后进先出, 默认true
#redis.lifo=true
#最大空闲连接数, 默认8个
#redis.maxIdle=8
#最大连接数, 默认8个
#redis.maxTotal=8
#获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
#redis.maxWaitMillis=-1
#逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
#redis.minEvictableIdleTimeMillis=1800000
#最小空闲连接数, 默认0
#redis.minIdle=0
#每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
#redis.numTestsPerEvictionRun=3
#对象空闲多久后逐出, 当空闲时间>该值 且 空闲连接>最大空闲数 时直接逐出,不再根据MinEvictableIdleTimeMillis判断  (默认逐出策略)
#redis.softMinEvictableIdleTimeMillis=1800000
#在获取连接的时候检查有效性, 默认false
#redis.testOnBorrow=false
#在空闲时检查有效性, 默认false
#redis.testWhileIdle=false
#逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
#redus.timeBetweenEvictionRunsMillis=-1

JedisUtil源码:

package com.bsy.common;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.alibaba.fastjson.JSON;
import com.dyuproject.protostuff.LinkedBuffer;
import com.dyuproject.protostuff.ProtostuffIOUtil;
import com.dyuproject.protostuff.runtime.RuntimeSchema;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.exceptions.JedisDataException;

/**
 * jedis的帮助工具 本类map依赖fastjson,对象与集合使用protostuff序列化框架 jedis版本2.9.0
 * protostuff相关版本1.0.8 fastjson版本1.2.32 使用maven自动添加依赖
 *
 * @author Mirren
 *
 */
public class JedisUtil {
	private static final int DEFAULT_SETEX_TIMEOUT = 60 * 60;// setex的默认时间

	/**
	 * 添加一个字符串值,成功返回1,失败返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	public static int set(String key, String value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			if (jedis.set(key, value).equalsIgnoreCase("ok")) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}

	}

	/**
	 * 缓存一个字符串值,成功返回1,失败返回0,默认缓存时间为1小时,以本类的常量DEFAULT_SETEX_TIMEOUT为准
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	public static int setEx(String key, String value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			if (jedis.setex(key, DEFAULT_SETEX_TIMEOUT, value).equalsIgnoreCase("ok")) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 缓存一个字符串值,成功返回1,失败返回0,缓存时间以timeout为准,单位秒
	 *
	 * @param key
	 * @param value
	 * @param timeout
	 * @return
	 */
	public static int setEx(String key, String value, int timeout) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			if (jedis.setex(key, timeout, value).equalsIgnoreCase("ok")) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 添加一个指定类型的对象,成功返回1,失败返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	public static <T> int set(String key, T value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			byte[] data = enSeri(value);
			if (jedis.set(key.getBytes(), data).equalsIgnoreCase("ok")) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 缓存一个指定类型的对象,成功返回1,失败返回0,默认缓存时间为1小时,以本类的常量DEFAULT_SETEX_TIMEOUT为准
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	public static <T> int setEx(String key, T value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			byte[] data = enSeri(value);
			if (jedis.setex(key.getBytes(), DEFAULT_SETEX_TIMEOUT, data).equalsIgnoreCase("ok")) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 缓存一个指定类型的对象,成功返回1,失败返回0,缓存时间以timeout为准,单位秒
	 *
	 * @param key
	 * @param value
	 * @param timeout
	 * @return
	 */
	public static <T> int setEx(String key, T value, int timeout) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			byte[] data = enSeri(value);
			if (jedis.setex(key.getBytes(), timeout, data).equalsIgnoreCase("ok")) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 将一个数值+1,成功返回+后的结果,失败返回null
	 *
	 * @param key
	 * @return
	 * @throws JedisDataException
	 */
	public static Long incr(String key) throws JedisDataException {
		if (isValueNull(key)) {
			return null;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			return jedis.incr(key);
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 将一个数值-1,成功返回-后的结果,失败返回null
	 *
	 * @param key
	 * @return
	 * @throws JedisDataException
	 */
	public static Long decr(String key) throws JedisDataException {
		if (isValueNull(key)) {
			return null;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			return jedis.decr(key);
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 添加一个字符串值到list中,,成功返回1,失败返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	public static int setList(String key, String... value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			Long result = jedis.rpush(key, value);
			if (result != null && result != 0) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 缓存一个字符串值到list中,全部list的key默认缓存时间为1小时,成功返回1,失败返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	public static int setExList(String key, String... value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			Long result = jedis.rpush(key, value);
			jedis.expire(key, DEFAULT_SETEX_TIMEOUT);
			if (result != null && result != 0) {
				return 1;
			} else {
				return 0;
			}

		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 缓存一个字符串值到list中,全部list的key缓存时间为timeOut,单位为秒,成功返回1,失败返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	public static int setExList(String key, int timeOut, String... value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			Long result = jedis.rpush(key, value);
			jedis.expire(key, timeOut);
			if (result != null && result != 0) {
				return 1;
			} else {
				return 0;
			}

		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 添加一个<T>类型对象值到list中,成功返回1,失败返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	@SafeVarargs
	public static <T> int setList(String key, T... value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			int res = 0;
			for (T t : value) {
				byte[] data = enSeri(t);
				Long result = jedis.rpush(key.getBytes(), data);
				if (result != null && result != 0) {
					res++;
				}
			}
			if (res != 0) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 缓存一个<T>类型对象值到list中,全部list的key默认缓存时间为1小时,成功返回1,失败返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	@SafeVarargs
	public static <T> int setExList(String key, T... value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			int res = 0;
			for (T t : value) {
				byte[] data = enSeri(t);
				Long result = jedis.rpush(key.getBytes(), data);
				if (result != null && result != 0) {
					res++;
				}
			}
			jedis.expire(key, DEFAULT_SETEX_TIMEOUT);
			if (res != 0) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 缓存一个<T>类型对象值到list中,全部list的key缓存时间为timeOut,单位秒,成功返回1,失败返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	@SafeVarargs
	public static <T> int setExList(String key, int timeOut, T... value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			int res = 0;
			for (T t : value) {
				byte[] data = enSeri(t);
				Long result = jedis.rpush(key.getBytes(), data);
				if (result != null && result != 0) {
					res++;
				}
			}
			jedis.expire(key, timeOut);
			if (res != 0) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 添加一个List集合成功返回1,失败返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 * @throws IOException
	 * @throws RuntimeException
	 */
	public static <T> int setList(String key, List<T> value) throws RuntimeException, IOException {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			byte[] data = enSeriList(value);
			if (jedis.set(key.getBytes(), data).equalsIgnoreCase("ok")) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 缓存一个List<T>集合,成功返回1,失败返回0,默认缓存时间为1小时,以本类的常量DEFAULT_SETEX_TIMEOUT为准
	 *
	 * @param key
	 * @param value
	 * @return
	 * @throws IOException
	 * @throws RuntimeException
	 */

	public static <T> int setExList(String key, List<T> value) throws RuntimeException, IOException {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			byte[] data = enSeriList(value);
			if (jedis.setex(key.getBytes(), DEFAULT_SETEX_TIMEOUT, data).equalsIgnoreCase("ok")) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 缓存一个List<T>集合,成功返回1,失败返回0,缓存时间以timeout为准,单位秒
	 *
	 * @param key
	 * @param value
	 * @param timeout
	 * @return
	 * @throws IOException
	 * @throws RuntimeException
	 */
	public static <T> int setExList(String key, List<T> value, int timeout) throws RuntimeException, IOException {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			byte[] data = enSeriList(value);
			if (jedis.setex(key.getBytes(), timeout, data).equalsIgnoreCase("ok")) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 添加一个字符串到set,如果key存在就在就最追加,如果key不存在就创建,成功返回1,失败或者没有受影响返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	public static int setSet(String key, String... value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			Long result = jedis.sadd(key, value);
			if (result != null && result != 0) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 添加一个字符串set,如果key存在就在就最追加,整个set的key默认一小时后过期,如果key存在就在可以种继续添加,如果key不存在就创建,成功返回1,失败或者没有受影响返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	public static int setExSet(String key, String... value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			Long result = jedis.sadd(key, value);
			jedis.expire(key, DEFAULT_SETEX_TIMEOUT);
			if (result != null && result != 0) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 添加一个字符串set,如果key存在就在就最追加,整个set的key有效时间为timeOut时间,单位秒,如果key存在就在可以种继续添加,如果key不存在就创建,,成功返回1,失败或者没有受影响返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	public static int setExSet(String key, int timeOut, String... value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			Long result = jedis.sadd(key, value);
			jedis.expire(key, timeOut);
			if (result != null && result != 0) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 添加一个<T>类型到set集合,如果key存在就在就最追加,成功返回1,失败或者没有受影响返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	@SafeVarargs
	public static <T> int setSet(String key, T... value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			int res = 0;
			for (T t : value) {
				byte[] data = enSeri(t);
				Long result = jedis.sadd(key.getBytes(), data);
				if (result != null && result != 0) {
					res++;
				}
			}
			if (res != 0) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 缓存一个<T>类型到set集合,如果key存在就在就最追加,整个set的key默认有效时间为1小时,成功返回1,失败或者没有受影响返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	@SafeVarargs
	public static <T> int setExSet(String key, T... value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			int res = 0;
			for (T t : value) {
				byte[] data = enSeri(t);
				Long result = jedis.sadd(key.getBytes(), data);
				if (result != null && result != 0) {
					res++;
				}
			}
			jedis.expire(key, DEFAULT_SETEX_TIMEOUT);
			if (res != 0) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 缓存一个<T>类型到set集合,如果key存在就在就最追加,整个set的key有效时间为timeOut,单位秒,成功返回1,失败或者没有受影响返回0
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	@SafeVarargs
	public static <T> int setExSet(String key, int timeOut, T... value) {
		if (isValueNull(key, value)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			int res = 0;
			for (T t : value) {
				byte[] data = enSeri(t);
				Long result = jedis.sadd(key.getBytes(), data);
				if (result != null && result != 0) {
					res++;
				}
			}
			jedis.expire(key, timeOut);
			if (res != 0) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 添加一个Map<K, V>集合,成功返回1,失败返回0
	 *
	 * @param key
	 * @param value
	 * @param timeout
	 * @return
	 */
	public static <K, V> int setMap(String key, Map<K, V> value) {
		if (value == null || key == null || "".equals(key)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			String data = JSON.toJSONString(value);
			if (jedis.set(key, data).equalsIgnoreCase("ok")) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 缓存一个Map<K, V>集合,成功返回1,失败返回0,默认缓存时间为1小时,以本类的常量DEFAULT_SETEX_TIMEOUT为准
	 *
	 * @param key
	 * @param value
	 * @param timeout
	 * @return
	 */
	public static <K, V> int setExMap(String key, Map<K, V> value) {
		if (value == null || key == null || "".equals(key)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			String data = JSON.toJSONString(value);
			if (jedis.setex(key, DEFAULT_SETEX_TIMEOUT, data).equalsIgnoreCase("ok")) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 缓存一个Map<K, V>集合,成功返回1,失败返回0,缓存时间以timeout为准,单位秒
	 *
	 * @param key
	 * @param value
	 * @param timeout
	 * @return
	 */
	public static <K, V> int setExMap(String key, Map<K, V> value, int timeout) {
		if (value == null || key == null || "".equals(key)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			String data = JSON.toJSONString(value);
			if (jedis.setex(key, timeout, data).equalsIgnoreCase("ok")) {
				return 1;
			} else {
				return 0;
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 获取一个字符串值
	 *
	 * @param key
	 * @return
	 */
	public static String get(String key) {
		if (isValueNull(key)) {
			return null;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			return jedis.get(key);
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 获得一个指定类型的对象
	 *
	 * @param key
	 * @param value
	 * @return
	 */
	public static <T> T get(String key, Class<T> clazz) {
		if (isValueNull(key)) {
			return null;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();

			byte[] data = jedis.get(key.getBytes());
			T result = deSeri(data, clazz);
			return result;
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 获得一个字符串集合,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1
	 * 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
	 *
	 * @param key
	 * @param start
	 * @param end
	 * @return
	 */
	public static List<String> getList(String key, long start, long end) {
		if (isValueNull(key)) {
			return null;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			List<String> result = jedis.lrange(key, start, end);
			return result;
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 获得一个<T>类型的对象集合,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。
	 * 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
	 *
	 * @param key
	 * @param start
	 * @param end
	 * @return
	 */
	public static <T> List<T> getList(String key, long start, long end, Class<T> clazz) {
		if (isValueNull(key)) {
			return null;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			List<byte[]> lrange = jedis.lrange(key.getBytes(), start, end);
			List<T> result = null;
			if (lrange != null) {
				for (byte[] data : lrange) {
					if (result == null) {
						result = new ArrayList<>();
					}
					result.add(deSeri(data, clazz));
				}
			}
			return result;
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 获得list中存了多少个值
	 *
	 * @return
	 */
	public static long getListCount(String key) {
		if (isValueNull(key)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			return jedis.llen(key);
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 获得一个List<T>的集合,
	 *
	 * @param key
	 *            键
	 * @param clazz
	 *            返回集合的类型
	 * @return
	 * @throws IOException
	 */
	public static <T> List<T> getList(String key, Class<T> clazz) throws IOException {
		if (isValueNull(key)) {
			return null;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			byte[] data = jedis.get(key.getBytes());
			List<T> result = deSeriList(data, clazz);
			return result;
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 获得一个字符串set集合
	 *
	 * @param key
	 * @return
	 */
	public static Set<String> getSet(String key) {
		if (isValueNull(key)) {
			return null;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			Set<String> result = jedis.smembers(key);
			return result;
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 获得一个字符串set集合
	 *
	 * @param key
	 * @return
	 */
	public static <T> Set<T> getSet(String key, Class<T> clazz) {
		if (isValueNull(key)) {
			return null;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			Set<byte[]> smembers = jedis.smembers(key.getBytes());
			Set<T> result = null;
			if (smembers != null) {
				for (byte[] data : smembers) {
					if (result == null) {
						result = new HashSet<>();
					}
					result.add(deSeri(data, clazz));
				}
			}
			return result;
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 获得集合中存在多少个值
	 *
	 * @param key
	 * @return
	 */
	public static long getSetCount(String key) {
		if (isValueNull(key)) {
			return 0;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			return jedis.scard(key);
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 获得一个Map<v,k>的集合
	 *
	 * @param key
	 * @param v
	 * @param k
	 * @return
	 */
	public static <K, V> Map<K, V> getMap(String key, Class<K> k, Class<V> v) {
		if (key == null || "".equals(key)) {
			return null;
		}
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			String data = jedis.get(key);
			@SuppressWarnings("unchecked")
			Map<K, V> result = (Map<K, V>) JSON.parseObject(data);
			return result;
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	/**
	 * 删除一个值
	 *
	 * @param key
	 */
	public static void del(String... key) {
		Jedis jedis = null;
		try {
			jedis = JedisPoolUtil.getJedis();
			for (int i = 0; i < key.length; i++) {
				jedis.del(key);
			}
		} finally {
			JedisPoolUtil.closeJedis(jedis);
		}
	}

	// --------------------------公用方法区------------------------------------
	/**
	 * 检查值是否为null,如果为null返回true,不为null返回false
	 *
	 * @param obj
	 * @return
	 */
	private static boolean isValueNull(Object... obj) {
		for (int i = 0; i < obj.length; i++) {
			if (obj[i] == null || "".equals(obj[i])) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 序列化一个对象
	 *
	 * @param value
	 * @return
	 */
	private static <T> byte[] enSeri(T value) {
		@SuppressWarnings("unchecked")
		RuntimeSchema<T> schema = (RuntimeSchema<T>) RuntimeSchema.createFrom(value.getClass());
		byte[] data = ProtostuffIOUtil.toByteArray(value, schema,
				LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE));
		return data;
	}

	/**
	 * 反序列化一个对象
	 *
	 * @param t
	 * @return
	 */
	private static <T> T deSeri(byte[] data, Class<T> clazz) {
		if (data == null || data.length == 0) {
			return null;
		}
		RuntimeSchema<T> schema = RuntimeSchema.createFrom(clazz);
		T result = schema.newMessage();
		ProtostuffIOUtil.mergeFrom(data, result, schema);
		return result;
	}

	/**
	 * 序列化List集合
	 *
	 * @param list
	 * @return
	 * @throws IOException
	 */
	private static <T> byte[] enSeriList(List<T> list) throws RuntimeException, IOException {
		if (list == null || list.size() == 0) {
			throw new RuntimeException("集合不能为空!");
		}
		@SuppressWarnings("unchecked")
		RuntimeSchema<T> schema = (RuntimeSchema<T>) RuntimeSchema.getSchema(list.get(0).getClass());
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		ProtostuffIOUtil.writeListTo(out, list, schema, LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE));
		byte[] byteArray = out.toByteArray();
		return byteArray;
	}

	/**
	 * 反序列化List集合
	 *
	 * @param data
	 * @param clazz
	 * @return
	 * @throws IOException
	 */
	private static <T> List<T> deSeriList(byte[] data, Class<T> clazz) throws IOException {
		if (data == null || data.length == 0) {
			return null;
		}
		RuntimeSchema<T> schema = RuntimeSchema.createFrom(clazz);
		List<T> result = ProtostuffIOUtil.parseListFrom(new ByteArrayInputStream(data), schema);
		return result;
	}

}

到此这篇关于java操作Redis数据库的redis工具的文章就介绍到这了,更多相关java操作Redis数据库的redis工具内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java之理解Redis回收算法LRU案例讲解

    如何通俗易懂的理解LRU算法? 1.LRU是什么? LRU全称Least Recently Used,也就是最近最少使用的意思,是一种内存管理算法,最早应用于Linux操作系统. LRU算法基于一种假设:长期不被使用的数据,在未来被用到的几率也不大.因此,当数据所占内存达到一定阈值时,我们要移除掉最近最少被使用的数据. LRU算法应用:可以在内存不够时,从哈希表移除一部分很少访问的用户. LRU是什么?按照英文的直接原义就是Least Recently Used,最近最久未使用法,它是按照一个非

  • Java之操作Redis案例讲解

    首先 下载 jedis.jar包 然后再 工程设置里面找到Libraries,点击+.添加下载好的jedis.jar包.点击OK退出即可 创建Java_Control_Redis类 测试链接 package ccit.redis; import redis.clients.jedis.Jedis; public class Java_Control_Redis { public static void main(String[] args) { //连接本地的 Redis 服务 Jedis je

  • Java实现Redis延时消息队列

    目录 什么是延时任务 延时任务的特点 实现思路: 代码实现 1.消息模型 2.RedisMq 消息队列实现类 3.消息生产者 4.消息消费者 5. 消息执接口 6. 任务类型的实现类:可以根据自己的情况去实现对应的队列需求 什么是延时任务 延时任务,顾名思义,就是延迟一段时间后才执行的任务.举个例子,假设我们有个发布资讯的功能,运营需要在每天早上7点准时发布资讯,但是早上7点大家都还没上班,这个时候就可以使用延时任务来实现资讯的延时发布了.只要在前一天下班前指定第二天要发送资讯的时间,到了第二天

  • IDEA版使用Java操作Redis数据库的方法

    首先 下载 jedis.jar包 然后再 工程设置里面找到Libraries,点击+.添加下载好的jedis.jar包.点击OK退出即可 创建Java_Control_Redis类 测试链接 package ccit.redis; import redis.clients.jedis.Jedis; public class Java_Control_Redis { public static void main(String[] args) { //连接本地的 Redis 服务 Jedis je

  • java若依框架集成redis缓存详解

    目录 1.添加依赖 2.修改配置 3.增加配置 4.增加工具类 总结 1.添加依赖 ruoyi-common\pom.xml模块添加整合依赖 <!-- springboot整合redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dep

  • 详解java连接mysql数据库的五种方式

    第一种方式:将用户名和密码封装在Properties类中 首先,导入数据库连接包这个是毋庸置疑的.创建一个jdbc驱动dirver.将数据库(以MySQL为例)的url保存在所创建的字符串url中.如果mysql版本低于8.0,则url保存形式应该为: String url = "jdbc:mysql://localhost:3306/test" 如果mysql版本为8.0版本或以上,url保存形式为: String url = "jdbc:mysql://localhost

  • 详解java操作Redis数据库的redis工具(RedisUtil,jedis工具JedisUtil,JedisPoolUtil)

    该工具包含是封装了jedis,包含redis.properties和jedisPool,序列化使用的是protostuff,map类型操作使用的是fastjson 自己抽空写的,基本只要理解什么是get,什么是set就可以使用redis数据库了 下载地址:点击打开链接 JedisPoolUtil的源码: package com.bsy.common; import java.io.FileInputStream; import java.io.FileNotFoundException; imp

  • 详解Java MyBatis 插入数据库返回主键

    最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User(); user.setUserName("chenzhou"); user.setPassword("xxxx"); user.setComment("测试插入数据返回主键功能"); System.out.println("插入前主键为:

  • 详解Java使用sqlite 数据库如何生成db文件

    Java 使用Sqllite 数据库如何生成db文件            本文主要介绍Java 使用Sqllite 数据库如何生成db文件的实现实例,网上资料不是很多,自己上网搜资料看到的一个实例,希望可以帮助到读者 实现代码: import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import javax.sql.DataSource; import org.apac

  • 详解java 客户端链接不上redis解决方案

    出现问题描述: 1.Could not get a resource from the pool, Connection refused: connect windows Java这边客户端链接被拒接了,想想问题 1.Vmware里面的Linux所安装的Redis已经正常启动 2.在windows用ssh客户端链接linux可以操作redis 3.linux防火墙已经关闭 4.拼linux的ip也能拼通 按理说应该没问题,下利用telnet测试下端口 telnet 192.168.0.104 6

  • 详解nodejs操作mongodb数据库封装DB类

    这个DB类也算是我经历了3个实际项目应用的,现分享出来,有需要的请借鉴批评. 上面的注释都挺详细的,我使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关于mongoose的安装就是 npm install -g mongoose 这个DB类的数据库配置是基于auth认证的,如果您的数据库没有账号与密码则留空即可. /** * mongoose操作类(封装mongodb) */ var fs = require('fs'); var path = r

  • 详解Java目录操作与文件操作教程

    目录 目录操作 创建目录 判断这个文件或目录是否存在 判断是否是目录 读取目录 删除目录 文件操作 创建文件 删除文件 File对象常用函数 目录操作 创建目录 File类中有两个方法可以用来创建文件夹: mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false.失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建. mkdirs()方法创建一个文件夹和它的所有父文件夹. 创建目录AAA路径为D:AAA public class Mk { pu

  • 详解Java redis中缓存穿透 缓存击穿 雪崩三种现象以及解决方法

    目录 前言 一.缓存穿透 二.缓存击穿 三.雪崩现象 总结 前言 本文主要阐述redis中的三种现象 1.缓存穿透 2.缓存击穿 3.雪崩现象 本文主要说明本人对三种情况的理解,如果需要知道redis基础请查看其他博客,加油! 一.缓存穿透 理解:何为缓存穿透,先要了解穿透,这样有助于区分穿透和击穿,穿透就类似于伤害一点一点的累计,最终打到穿透的目的,类似于射手,一下一下普通攻击,最终杀死对方,先上图 先来描述一下缓存穿透的过程: 1.由于我们取数据的原则是先查询redis上,如果redis上有

  • 详解Java数据库连接JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库.比如建立数据库连接.执行SQL语句进行数据的存取操作. JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创

  • 详解springboot中各个版本的redis配置问题

    今天在springboot中使用数据库,springboot版本为2.0.2.RELEASE,通过pom引入jar包,配置文件application.properties中的redis配置文件报错,提示例如deprecated configuration property 'spring.redis.pool.max-active',猜想应该是版本不对,发现springboot在1.4前后集成redis发生了一些变化.下面截图看下. 一.不同版本RedisProperties的区别 这是spri

随机推荐