文章出处:http://my.oschina.net/ydsakyclguozi/blog/465859#navbar-header
spring版本:4.1.6.RELEASE
redis客户端:2.4.2
redis服务端:2.6.12
spring配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config />
<context:component-scan base-package="com.heli.jedis" />
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>file:/usr/heliConfig/redis/redis.properties</value>
</list>
</property>
</bean>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxActive" value="${redis.pool.maxActive}" />
<property name="maxIdle" value="${redis.pool.maxIdle}" />
<property name="maxWait" value="${redis.pool.maxWait}" />
<property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
</bean>
<!-- redis的连接池pool,不是必选项:timeout/password -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg index="0" ref="jedisPoolConfig" />
<constructor-arg index="1" value="${redis.hostname}" />
<constructor-arg index="2" value="${redis.port}" type="int" />
<constructor-arg index="3" value="60000" type="int" />
</bean>
</beans>
redis.properties:
#redis config
redis.hostname=192.168.1.236
redis.port=6379
redis.database=0
redis.pool.maxActive=50
redis.pool.maxIdle=10
redis.pool.maxWait=3000
redis.pool.testOnBorrow=true
工具类:
package com.heli.jedis;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import redis.clients.jedis.BinaryClient.LIST_POSITION;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.SortingParams;
import redis.clients.util.SafeEncoder;
/**
* @author Mr.hu
* @version crateTime:2013-10-30 下午5:41:30 Class Explain:JedisUtil
*/
@Service
public class JedisUtil {
/**
* 缓存生存时间
*/
private final int expire = 60000;
/** 操作Key的方法 */
public Keys KEYS;
/** 对存储结构为String类型的操作 */
public Strings STRINGS;
/** 对存储结构为List类型的操作 */
public Lists LISTS;
/** 对存储结构为Set类型的操作 */
public Sets SETS;
/** 对存储结构为HashMap类型的操作 */
public Hash HASH;
/** 对存储结构为Set(排序的)类型的操作 */
public SortSet SORTSET;
@Autowired
private JedisPool jedisPool;
private ApplicationContext context;
public JedisPool getPool() {
return jedisPool;
}
/**
* 从jedis连接池中获取获取jedis对象
*
* @return
*/
public Jedis getJedis() {
return jedisPool.getResource();
}
/**
* 回收jedis
*
* @param jedis
*/
public void returnJedis(Jedis jedis) {
jedisPool.returnResource(jedis);
}
/**
* 设置过期时间
*
* @author ruan 2013-4-11
* @param key
* @param seconds
*/
public void expire(String key, int seconds) {
if (seconds <= 0) {
return;
}
Jedis jedis = getJedis();
jedis.expire(key, seconds);
returnJedis(jedis);
}
/**
* 设置默认过期时间
*
* @author ruan 2013-4-11
* @param key
*/
public void expire(String key) {
expire(key, expire);
}
// *******************************************Keys*******************************************//
public class Keys {
/**
* 清空所有key
*/
public String flushAll() {
Jedis jedis = getJedis();
String stata = jedis.flushAll();
returnJedis(jedis);
return stata;
}
/**
* 更改key
*
* @param String
* oldkey
* @param String
* newkey
* @return 状态码
* */
public String rename(String oldkey, String newkey) {
return rename(SafeEncoder.encode(oldkey), SafeEncoder.encode(newkey));
}
/**
* 更改key,仅当新key不存在时才执行
*
* @param String
* oldkey
* @param String
* newkey
* @return 状态码
* */
public long renamenx(String oldkey, String newkey) {
Jedis jedis = getJedis();
long status = jedis.renamenx(oldkey, newkey);
returnJedis(jedis);
return status;
}
/**
* 更改key
*
* @param String
* oldkey
* @param String
* newkey
* @return 状态码
* */
public String rename(byte[] oldkey, byte[] newkey) {
Jedis jedis = getJedis();
String status = jedis.rename(oldkey, newkey);
returnJedis(jedis);
return status;
}
/**
* 设置key的过期时间,以秒为单位
*
* @param String
* key
* @param 时间
* ,已秒为单位
* @return 影响的记录数
* */
public long expired(String key, int seconds) {
Jedis jedis = getJedis();
long count = jedis.expire(key, seconds);
returnJedis(jedis);
return count;
}
/**
* 设置key的过期时间,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00,格里高利历)的偏移量。
*
* @param String
* key
* @param 时间
* ,已秒为单位
* @return 影响的记录数
* */
public long expireAt(String key, long timestamp) {
Jedis jedis = getJedis();
long count = jedis.expireAt(key, timestamp);
returnJedis(jedis);
return count;
}
/**
* 查询key的过期时间
*
* @param String
* key
* @return 以秒为单位的时间表示
* */
public long ttl(String key) {
// ShardedJedis sjedis = getShardedJedis();
Jedis sjedis = getJedis();
long len = sjedis.ttl(key);
returnJedis(sjedis);
return len;
}
/**
* 取消对key过期时间的设置
*
* @param key
* @return 影响的记录数
* */
public long persist(String key) {
Jedis jedis = getJedis();
long count = jedis.persist(key);
returnJedis(jedis);
return count;
}
/**
* 删除keys对应的记录,可以是多个key
*
* @param String
* ... keys
* @return 删除的记录数
* */
public long del(String... keys) {
Jedis jedis = getJedis();
long count = jedis.del(keys);
returnJedis(jedis);
return count;
}
/**
* 删除keys对应的记录,可以是多个key
*
* @param String
* ... keys
* @return 删除的记录数
* */
public long del(byte[]... keys) {
Jedis jedis = getJedis();
long count = jedis.del(keys);
returnJedis(jedis);
return count;
}
/**
* 判断key是否存在
*
* @param String
* key
* @return boolean
* */
public boolean exists(String key) {
// ShardedJedis sjedis = getShardedJedis();
Jedis sjedis = getJedis();
boolean exis = sjedis.exists(key);
returnJedis(sjedis);
return exis;
}
/**
* 对List,Set,SortSet进行排序,如果集合数据较大应避免使用这个方法
*
* @param String
* key
* @return List<String> 集合的全部记录
* **/
public List<String> sort(String key) {
// ShardedJedis sjedis = getShardedJedis();
Jedis sjedis = getJedis();
List<String> list = sjedis.sort(key);
returnJedis(sjedis);
return list;
}
/**
* 对List,Set,SortSet进行排序或limit
*
* @param String
* key
* @param SortingParams
* parame 定义排序类型或limit的起止位置.
* @return List<String> 全部或部分记录
* **/
public List<String> sort(String key, SortingParams parame) {
// ShardedJedis sjedis = getShardedJedis();
Jedis sjedis = getJedis();
List<String> list = sjedis.sort(key, parame);
returnJedis(sjedis);
return list;
}
/**
* 返回指定key存储的类型
*
* @param String
* key
* @return String string|list|set|zset|hash
* **/
public String type(String key) {
// ShardedJedis sjedis = getShardedJedis();
Jedis sjedis = getJedis();
String type = sjedis.type(key);
returnJedis(sjedis);
return type;
}
/**
* 查找所有匹配给定的模式的键
*
* @param String
* key的表达式,*表示多个,?表示一个
* */
public Set<String> keys(String pattern) {
Jedis jedis = getJedis();
Set<String> set = jedis.keys(pattern);
returnJedis(jedis);
return set;
}
}
// *******************************************Sets*******************************************//
public class Sets {
/**
* 向Set添加一条记录,如果member已存在返回0,否则返回1
*
* @param String
* key
* @param String
* member
* @return 操作码,0或1
* */
public long