package com.common.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* @ClassName: SerializeUtil
* @Desc: 序列化、反序列化
* @date 2014-8-20下午2:21:41
*/
public class SerializeUtil {
/** 写日志文件 */
public final static Logger logger = LoggerFactory.getLogger(SerializeUtil.class); /**
* @Description: 序列化
* @date 2013-9-14上午10:22:12
* @param object
* @return
*/
public static byte[] serialize(Object object) {
ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
try {
// 序列化
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
byte[] bytes = baos.toByteArray();
return bytes;
} catch (Exception e) {
logger.error("【异常提示信息】" + e);
}
return null;
} /**
* @Description: 反序列化
* @date 2013-9-14上午10:22:25
* @param bytes
* @return
*/
public static Object unSerialize(byte[] bytes) {
ByteArrayInputStream bais = null;
try {
// 反序列化
bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
return ois.readObject();
} catch (Exception e) {
}
return null;
}
}
package com.common.util.cache;

import java.util.ArrayList;
import java.util.List;
import java.util.Map; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
import redis.clients.util.Hashing;
import redis.clients.util.Sharded; import com.common.util.SerializeUtil; /**
* @ClassName: JedisUtil
* @Desc: jedis客户端,取redis服务的值
* @date 2014-8-20下午2:16:06
*/
public class JedisUtil {
// 写日志
private static final Logger log = LoggerFactory.getLogger(JedisUtil.class);
// 实例-单例模式
private static JedisUtil dbClient; // ShardedJedisPool池
private static ShardedJedisPool pool; // 初始化连接对象
static {
// 创建jedis池配置实例
JedisPoolConfig config = new JedisPoolConfig(); // 设置池配置项值
// #jedis的最大分配对象#
// config.setMaxActive(Integer.valueOf(ResourceProperty.createResourceProperty().getValue("jedis_pool_maxActive").trim()));
// #jedis最大保存idel状态对象数 #
config.setMaxIdle(Integer.valueOf(JedisProperty.newInstance().getValue(
"jedis_pool_maxIdle")));
// #jedis池没有对象返回时,最大等待时间 #
config.setMaxWaitMillis(Long.valueOf(JedisProperty.newInstance()
.getValue("jedis_pool_maxWait")));
// #jedis调用borrowObject方法时,是否进行有效检查#
config.setTestOnBorrow(Boolean.valueOf(true));
// #jedis调用returnObject方法时,是否进行有效检查 #
config.setTestOnReturn(Boolean.valueOf(true));
// 根据配置实例化jedis池 List<JedisShardInfo> jdsInfoList = new ArrayList<JedisShardInfo>(2);
JedisShardInfo jedisShardInfo = new JedisShardInfo(JedisProperty
.newInstance().getValue("redis.host"),
Integer.valueOf(JedisProperty.newInstance().getValue(
"redis.port")));
jdsInfoList.add(jedisShardInfo);
pool = new ShardedJedisPool(config, jdsInfoList, Hashing.MURMUR_HASH,
Sharded.DEFAULT_KEY_TAG_PATTERN); } /**
*
* 获取客户端实例
*
* @return dbClient instance
*/
public synchronized static JedisUtil getInstance() {
if (dbClient == null) {
dbClient = new JedisUtil();
}
return dbClient;
} /**
* @Description: 保存对象(序列化)
* @date 2014-8-10下午04:38:40
* @param key
* @param value
*/
public void setObject(String key, Object value) {
ShardedJedis jedis = null;
if (key == null || value == null) {
return;
}
byte[] val = SerializeUtil.serialize(value);
try {
// 从jedis池中获取一个jedis实例
jedis = pool.getResource();
jedis.set(key.getBytes(), val);
} catch (Exception e) {
log.error("【异常提示信息】" + e);
} finally {
// 释放对象池,即获取jedis实例使用后要将对象还回去
if (jedis != null)
pool.returnResource(jedis);
}
} /**
* @Desc: 保存对象(序列化)
* @date 2014-8-20下午4:33:03
* @param key
* @param value
* @param expire
*/
public void setObject(String key, Object value, int expire) {
ShardedJedis jedis = null;
if (key == null || value == null) {
return;
}
byte[] val = SerializeUtil.serialize(value);
try {
// 从jedis池中获取一个jedis实例
jedis = pool.getResource();
jedis.set(key.getBytes(), val);
jedis.expire(key, expire);
} catch (Exception e) {
log.error("【异常提示信息】" + e);
} finally {
// 释放对象池,即获取jedis实例使用后要将对象还回去
if (jedis != null)
pool.returnResource(jedis);
}
} /**
* @Description: 获取对象(序列化)
* @date 2014-8-10下午04:38:44
* @param key
* @return
*/
public Object getObject(String key) {
ShardedJedis jedis = null; try {
// 从jedis池中获取一个jedis实例
jedis = pool.getResource();
// 获取jedis实例后可以对redis服务进行一系列的操作
byte[] value = jedis.get(key.getBytes());
Object data = SerializeUtil.unSerialize(value);
return data;
} catch (Exception e) {
log.error("【异常提示信息】" + e);
} finally {
// 释放对象池,即获取jedis实例使用后要将对象还回去
if (jedis != null)
pool.returnResource(jedis);
}
return null;
} /**
* @Description: 获取String对象类型值
* @date 2014-2-13上午10:00:44
* @param key
* @return
*/
public String getString(String key) {
ShardedJedis jedis = null;
try {
// 从jedis池中获取一个jedis实例
jedis = pool.getResource();
// 获取jedis实例后可以对redis服务进行一系列的操作
String value = jedis.get(key);
return value;
} catch (Exception e) {
log.error("【异常提示信息】" + e);
} finally {
// 释放对象池,即获取jedis实例使用后要将对象还回去
if (jedis != null)
pool.returnResource(jedis);
}
return null;
} /**
* @Description: 存入String对象值
* @date 2014-8-13上午10:03:31
* @param key
* @param value
*/
public void setString(String key, String value) {
ShardedJedis jedis = null;
try {
// 从jedis池中获取一个jedis实例
jedis = pool.getResource();
jedis.set(key, value);
} catch (Exception e) {
log.error("【异常提示信息】" + e);
} finally {
// 释放对象池,即获取jedis实例使用后要将对象还回去
if (jedis != null)
pool.returnResource(jedis);
}
} /**
* @Desc: 存入String对象值
* @date 2014-8-20下午4:33:28
* @param key
* @param value
* @param expire
*/
public void setString(String key, String value, int expire) {
ShardedJedis jedis = null;
try {
// 从jedis池中获取一个jedis实例
jedis = pool.getResource();
jedis.set(key, value);
jedis.expire(key, expire);
} catch (Exception e) {
log.error("【异常提示信息】" + e);
} finally {
// 释放对象池,即获取jedis实例使用后要将对象还回去
if (jedis != null)
pool.returnResource(jedis);
}
} /**
* @Desc: 删除缓存数据
* @date 2014-8-20下午3:58:41
* @param key
* @return
*/
public Integer deleteByKey(String key) {
ShardedJedis jedis = null;
try {
jedis = pool.getResource();
jedis.del(key);
return 1;
} catch (Exception e) {
log.error("");
} finally {
if (jedis != null)
pool.returnResource(jedis);
}
return 0;
} /**
*
* 描述:pop
* @date 2015年6月24日下午6:26:37
* @param key
* @param isLeft
* @return
*/
private byte[] pop(String key, boolean isLeft) {
ShardedJedis jedis = pool.getResource();
boolean flag = false;
byte[] values = null;
try {
if (isLeft) {
values = jedis.lpop(key.getBytes());
} else {
values = jedis.rpop(key.getBytes());
}
flag = true;
} catch (Exception e) {
flag = false;
log.error(e.getMessage(), e);
} finally {
release(flag, jedis);
}
return values;
} /**
*
* 描述:lpop
* @date 2015年6月24日下午6:25:14
* @param key
* @return
*/
public byte[] lpop(String key) {
return pop(key, true);
} /**
*
* 描述:rpop
* @date 2015年6月24日下午6:24:56
* @param key
* @return
*/
public byte[] rpop(String key) {
return pop(key, false);
} /**
*
* 描述:push
* @date 2015年6月24日下午6:26:37
* @param key
* @param isLeft
* @return
*/
private Long push(boolean isLeft, String key, String... values) {
ShardedJedis jedis = pool.getResource();
boolean flag = false;
Long len = null;
try {
if (isLeft) {
len = jedis.lpush(key, values);
} else {
len = jedis.rpush(key, values);
}
flag = true;
} catch (Exception e) {
flag = false;
log.error(e.getMessage(), e);
} finally {
release(flag, jedis);
}
return len;
} /**
*
* 描述:lpop
* @date 2015年6月24日下午6:25:14
* @param key
* @return
*/
public Long lpush(String key, String... values) {
return push(true, key, values);
} /**
*
* 描述:rpop
* @date 2015年6月24日下午6:24:56
* @param key
* @return
*/
public Long rpush(String key, String... values) {
return push(false, key, values);
} /**
*
* 描述:回收jedis客户端
* @date 2015年6月24日下午6:24:15
* @param isNormal
* 是否正常
* @param jedis
* jedis
*/
private void release(boolean isNormal, ShardedJedis jedis) {
if (isNormal)
pool.returnResource(jedis);
else {
pool.returnBrokenResource(jedis);
}
} /**
*
* 描述:rpop lpush
* @date 2015年6月24日下午6:28:21
* @param scrKey
* @param dstKey
* @return
*/
public byte[] rpoplpush(String scrKey, String dstKey) {
ShardedJedis jedis = pool.getResource();
boolean flag = false;
byte[] ret = null;
try {
Jedis j = jedis.getShard(scrKey + dstKey);
ret = j.rpoplpush(scrKey.getBytes(), dstKey.getBytes());
flag = true;
} catch (Exception e) {
flag = false;
log.error(e.getMessage(), e);
} finally {
release(flag, jedis);
}
return ret;
} /**
*
* 描述:length
* @date 2015年6月24日下午6:58:37
* @param key
* @param value
* @return
*/
public Long length(String key) {
ShardedJedis jedis = null;
boolean flag = false;
Long result = 0l;
try {
// 从jedis池中获取一个jedis实例
jedis = pool.getResource();
result = jedis.llen(key);
flag = true;
} catch (Exception e) {
flag = false;
log.error("【异常提示信息】" + e);
} finally {
release(flag, jedis);
} return result;
} /**
*
* 描述:存入MAP集合数据(专用)
* @date 2016年12月6日上午11:54:04
* @param key
* @param map
*/
public void hmset(String key,Map<String,String> map){
ShardedJedis jedis = null;
boolean flag = false;
try {
// 从jedis池中获取一个jedis实例
jedis = pool.getResource();
jedis.hmset(key, map);
// 24小时失效
jedis.expire(key, 24*60*60);
flag = true;
} catch (Exception e) {
flag = false;
log.error("【异常提示信息】",e);
} finally {
release(flag, jedis);
}
} /**
*
* 描述:获取map中的值
* @date 2016年12月6日下午12:02:01
* @param key,redis key
* @param fields,map key
* @return map value
*/
public List<String> hmget(String key, String... fields){
ShardedJedis jedis = null;
List<String> data = null;
boolean flag = false;
try {
// 从jedis池中获取一个jedis实例
jedis = pool.getResource();
data = jedis.hmget(key, fields);
flag = true;
} catch (Exception e) {
flag = false;
log.error("【异常提示信息】",e);
} finally {
release(flag, jedis);
}
return data;
} }

==================================================

    public void init() {
if (status.compareAndSet(false, true)) {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(poolMaxIdle);
config.setMaxWaitMillis(poolMaxWait);
// #jedis调用borrowObject方法时,是否进行有效检查#
config.setTestOnBorrow(Boolean.valueOf(true));
// #jedis调用returnObject方法时,是否进行有效检查 #
config.setTestOnReturn(Boolean.valueOf(true));
List<JedisShardInfo> jdsInfoList = new ArrayList<JedisShardInfo>(clusterAddress.size());
Iterator<HostAndPort> it = clusterAddress.iterator();
while (it.hasNext()) {
HostAndPort home = it.next();
it.remove();
JedisShardInfo info = new JedisShardInfo(home.getHost(), home.getPort());
jdsInfoList.add(info);
}
shardeJedisPool = new ShardedJedisPool(config, jdsInfoList, Hashing.MURMUR_HASH,
Sharded.DEFAULT_KEY_TAG_PATTERN);
if (asyncLoad) {
template = new SimpleJedisTemplate(shardeJedisPool, status);
} else {
template = new SimpleJedisTemplate(shardeJedisPool);
}
LOGGER.info("init jedsHolder finished ...!");
}
} <bean class="com.busp.common.util.cache.redis.JedisHolder"
init-method="init" destroy-method="dispose" factory-method="custom">
<property name="poolMaxIdle" value="${jedis_pool_maxIdle}" />
<property name="poolMaxWait" value="${jedis_pool_maxWait}" />
<property name="asyncLoad" value="true" />
<property name="clusterAddress">
<list>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value="${redis.host}" />
<constructor-arg index="1" value="${redis.port}" />
</bean>
</list>
</property>
</bean>

jedis客户端,取redis服务的值的更多相关文章

  1. Jedis客户端即redis中的pipeline批量操作

    关注公众号:CoderBuff,回复"redis"获取<Redis5.x入门教程>完整版PDF. <Redis5.x入门教程>目录 第一章 · 准备工作 第 ...

  2. Jedis客户端操作redis缓存命令详解

    1.对value操作的命令 exists(key):确认一个key是否存在 del(key):删除一个key type(key):返回值的类型 keys(pattern):返回满足给定pattern的 ...

  3. Jedis API操作redis数据库

    1.配置文件 classpath路径下,新建redis.properties配置文件 配置文件内容 # Redis settings redis.host=127.0.0.1 redis.port=6 ...

  4. Redis服务之常用配置(一)

    上一篇博客聊了下redis的简介以及redis的yum安装和源码编译安装需要注意到问题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13378138.html ...

  5. Redis01 Redis服务端环境搭建

    1 前提准备 下载 VM centos6 安装包,安装好虚拟系统 2 安装远程连接工具 工具获取 2.1 SecureCRT.Xshell 连接远程服务器 2.2 WinSCP 向远程服务器发送文件 ...

  6. Redis服务器搭建/配置/及Jedis客户端的使用方法

    摘要 Redis服务器搭建.常用参数含意说明.主从配置.以及使用Jedis客户端来操作Redis Redis服务器搭建 安装 在命令行执行下面的命令: $ wget http://download.r ...

  7. Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试

    文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...

  8. Redis集群的使用测试(Jedis客户端的使用)

    Redis集群的使用测试(Jedis客户端的使用)1.Jedis客户端建议升级到最新版(当前为2.7.3),这样对3.0.x集群有比较好的支持.https://github.com/xetorthio ...

  9. Redis 学习笔记3:Jedis 连接虚拟机下的Redis 服务

    Jedis 是 Redis 官方首选的 Java 客户端开发包. 虚拟机的IP地址是192.168.8.88. Jedis代码是放在windows上的,启动虚拟机上的Redis服务之后,用Jedis连 ...

随机推荐

  1. Linux下wc命令详解

    功能说明:计算字数. 语   法:wc [-clw][--help][--version][文件…] 补充说明:利用wc指令我们可以计算文件的Byte数.字数.或是列数,若不指定任何文件名称,或是所给 ...

  2. Java 面试题 自己写的答案

    基本概念 操作系统中 heap 和 stack 的区别 栈(stack)与堆(heap)都是Java用来在内存中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 在函 ...

  3. 文件夹进行MD5校验的实现算法

    每份相同数据(文件夹)都可以生成一份唯一的md5校验文件,我们可以通过直接校验整个数据文件夹的方法来确定数据是否有误. 1.针对整个文件夹生成md5校验文件方法: 以data文件夹为例,我们需要得到d ...

  4. AndroidManifest.xml文件详解(activity)(一)

    <activity android:allowTaskReparenting=["true" | "false"] android:alwaysRetai ...

  5. golang 内置函数new()

    new() 这是一个用来分配内存的内置函数,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配的 t 类型的零值的指针. 在golang的代码定义如下: func new(t Type) ...

  6. Linux ping不通百度的解决方法

    今天在学习DNS的时候遇到了一个问题,我的虚拟机能够ping通ip地址,却ping不通www.baidu.com www.qq.com等域名,先是出现了以下报错: 折腾了几个小时终于找到解决办法 1. ...

  7. Less-Mixins分离规则集

    //Mixins --立即执行函数 .test{/* */} #test{/* */} --指定执行函数 .test(){/* */} #test(){/* */} --调用: .test; or . ...

  8. Button 自动换行

    UIView *view=[[UIView alloc]initWithFrame:CGRectMake(0, 200, self.view.frame.size.width, 300)]; view ...

  9. VS2008里的代码如何格式化

    选中要格式化的代码, 先按Ctrl+K 再按Ctrl+F 从菜单中也可以 "编辑"->"高级"->"设置文档的格式Ctrl+K Ctrl+ ...

  10. adb 连接小米1S真机调试

    Ubuntu13.04 adb连接小米1S真机调试 搭好Android开发环境后,新建了一个Android Application工程.准备运行,问题来了,模拟器太慢了,怎么在真机上调试呢?百度之,G ...