package com.mock.roulette.redis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.SortingParams;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Service("redis_service")
public class RedisService {
@Autowired
JedisPool jedisPool;
public interface Function<T, E> {
T callback(E e);
}
private <T> T execute(Function<T, Jedis> fun) {
Jedis jedis = null;
try {
// 从连接池中获取到jedisj对象
jedis = jedisPool.getResource();
return fun.callback(jedis);
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
return null;
}
public Boolean exists(final String key) {
return this.execute(e -> e.exists(key));
}
public List<String> Sort(final String key,
final SortingParams sortingParameters) {
Jedis jedis = jedisPool.getResource();
return jedis.sort(key, sortingParameters);
}
/**
* 判断表的字段是否存在
*
* @param key
* @param field
* @return
*/
public Boolean hexists(final String key, final String field) {
return this.execute(e -> e.hexists(key, field));
}
/**
* id 自增
*
* @param key
* @return
*/
public Long incr(final String key) {
return this.execute(e -> e.incr(key));
}
/**
* 执行SET操作
*
* @param key
* @param value
* @return
*/
public String set(final String key, final String value) {
return this.execute(e -> e.set(key, value));
}
/**
* 执行GET操作
*
* @param key
* @return
*/
public String get(final String key) {
return this.execute(e -> e.get(key));
}
/**
* hash key 表示hash 最外层的表名 field 代表表里的字段
*
* @param key
* @param field
* @return
*/
public String hget(final String key, final String field) {
return this.execute(e -> {
try {
return e.hget(key, field);
} catch (Exception ex) {
return "";
}
});
}
/**
* @param key
* @return
*/
public Map<String, String> hgetAll(final String key) {
return this.execute(e -> e.hgetAll(key));
}
/**
* 取出多个值
*
* @param key 表面,
* @param fields 字段名
* @return
*/
public List<String> hmget(final String key, final String... fields) {
return this.execute(e -> e.hmget(key, fields));
}
/**
* 设置一个hash 值
*
* @param key 表面
* @param field 字段
* @param value 值
* @return
*/
public Long hset(final String key, final String field, final String value) {
return this.execute(e -> e.hset(key, field, value));
}
/**
* 设置一个hash 值
*
* @param key 表面
* @param hash 值
* @return
*/
public String hmset(final String key, final Map<String, String> hash) {
return this.execute(e -> e.hmset(key, hash));
}
/**
* 移除hashkey
*/
public Long hdel(final String key, final String... fields) {
return this.execute(e -> e.hdel(key, fields));
}
/** * 清除
*
* @return
*/
public Long hclear(final String key) {
Long count = 0L;
Set<String> set = hkeys(key);
Iterator<String> it = set.iterator();
// it.forEachRemaining((field) ->
// {
//
// });
while (it.hasNext()) {
String field = it.next();
count += hdel(key, field);
}
return count;
}
/**
* 获取所有的hashkeys值
*/
public Set<String> hkeys(final String key) {
return this.execute(e -> e.hkeys(key));
}
/*** 获取所有 hash values
*/
public List<String> hvals(final String key) {
return this.execute(e -> e.hvals(key));
}
/**
* 删除key
*
* @param key
* @return
*/
public Long del(final String key) {
return this.execute(e -> e.del(key));
}
/**
* 按照位置取出数据 0 -1 ,表示取出所有数据
*
* @param key
* @param start
* @param end
* @return
*/
public List<String> lrange(final String key, final long start,
final long end) {
return this.execute(e -> e.lrange(key, start, end));
}
/**
* 存储数据 list
*
* @param key
* @param strings
* @return
*/
public Long lpush(final String key, final String... strings) {
return this.execute(e -> e.lpush(key, strings));
}
/**
* 阻塞的等待
*
* @param timeout
* @param key
* @return
*/
public List<String> blpop(final int timeout, final String key) {
return this.execute(e -> e.blpop(timeout, key));
}
/**
*
*/
/**
* 获取list 集合的长度
*
* @param key
* @return
*/
public Long llen(final String key) {
return this.execute(e -> e.llen(key));
}
/**
* 设置生存时间,单位为:秒
*
* @param key
* @param seconds
* @return
*/
public Long expire(final String key, final Integer seconds) {
return this.execute(e -> e.expire(key, seconds));
}
/**
* 设置String类型的值,并且指定生存时间,单位为:秒
*
* @param key
* @param value
* @param seconds
* @return
*/
public String set(final String key, final String value,
final Integer seconds) {
return this.execute(e -> {
String result = e.set(key, value);
// 设置生存时间
e.expire(key, seconds);
return result;
});
}
}
5,RedisService 类
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 今日内容介绍 1、Eclipse常用快捷键操作 2、Eclipse文档注释导出帮助文档 3、Eclipse项目的j...