package com.cms.common;

import com.alibaba.fastjson.JSON;
import com.qiyi.tvguo.cms.common.utils.ObjectSerializeUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy; /**
* redis client
*/
@Component
@Slf4j
public class RedisClient { private static JedisPool pool; @Value("${redis.host}")
private String host; @Value("${redis.port}")
private Integer port; @Value("${redis.password}")
private String password; private final int timeout=5000;
private final int database=0;
private final int maxConnection=500;
private final int maxIdle=50;
private final int minIdle=20; @PostConstruct
public void init()
{
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(maxConnection);
config.setMaxIdle(maxIdle);
config.setMinIdle(minIdle);
config.setMaxWaitMillis(1000);
config.setTestOnBorrow(true);
pool = new JedisPool(config, host,port,timeout, password, database);
log.info("------jedis pool init------");
} /**
* 获取jedis
* @return
*/
public Jedis getJedis()
{
return pool.getResource();
} @PreDestroy
public void destroy()
{
if(pool==null)
{
return;
} pool.destroy();
log.info("-----jedis pool destroy-----");
} /**
* 复杂对象存入redis
* @param key
* @param v
* @param expireSeconds
* @param <T>
* @return
*/
public <T> Boolean setExByte(String key,T v,int expireSeconds)
{
Jedis jedis=null;
try
{
jedis= getJedis();
jedis.setex(key.getBytes(),expireSeconds,ObjectSerializeUtil.serialize(v));
return true; }catch (Exception ex)
{
log.error("复杂对象存入redis异常:{}",ex); }finally {
if(jedis!=null)
{
jedis.close();
}
} return false;
} /**
* 获取Value 为byte[]的复杂对象
* @param key
* @param <T>
* @return
*/
public <T> T getByteObject(String key)
{
Jedis jedis=null;
try
{
jedis= getJedis();
byte[] bytes= jedis.get(key.getBytes());
return (T)ObjectSerializeUtil.unserizlize(bytes); }catch (Exception ex)
{
log.error("redis获取复杂对象异常:{}",ex); }finally {
if(jedis!=null)
{
jedis.close();
}
} return null;
} /**
* 对象以JSON存入redis
* @param key
* @param obj
* @param expireSeconds
* @param <T>
* @return
*/
public <T> Boolean setExJson(String key,T obj,int expireSeconds)
{
Jedis jedis=null;
try
{
jedis= getJedis();
jedis.setex(key,expireSeconds, JSON.toJSONString(obj));
return true; }catch (Exception ex)
{
log.error("复杂对象存入redis异常:{}",ex);
}finally {
if(jedis!=null)
{
jedis.close();
}
} return false;
} /**
* 获取Value 为Json的复杂对象
* @param key
* @param <T>
* @return
*/
public <T extends Object> T getJsonObject(String key,Class<T> clazz)
{
Jedis jedis=null;
try
{
jedis= getJedis();
String jsonString= jedis.get(key);
return JSON.parseObject(jsonString, clazz); }catch (RuntimeException ex)
{
log.error("redis获取Json复杂对象异常:{}",ex); } finally {
if(jedis!=null)
{
jedis.close();
}
} return null;
} }
package com.common.utils;

import lombok.extern.slf4j.Slf4j;

import java.io.*;

@Slf4j
public class ObjectSerializeUtil implements Serializable { /**
* 序列化对象
* @param obj
* @param <T> T 必须实现Serializable接口,
* T 中尽量加上 serialVersionUID (private static final long serialVersionUID)
* @return
*/
public static <T> byte [] serialize(T obj){
ObjectOutputStream outputStream;
ByteArrayOutputStream byteArrayOutputStream;
try {
byteArrayOutputStream=new ByteArrayOutputStream();
outputStream=new ObjectOutputStream(byteArrayOutputStream);
outputStream.writeObject(obj);
byte[] byteArray=byteArrayOutputStream.toByteArray();
return byteArray;
} catch (IOException e) {
log.error("ObjectSerializeUtil-IOException:{}",e);
}
return null;
} /**反序列化对象
* @param byteArray
* @param <T>T 必须实现Serializable接口,
* * T 中尽量加上 serialVersionUID (private static final long serialVersionUID)
* @return
*/
public static <T> Object unserizlize(byte[] byteArray){
ObjectInputStream inputStream;
ByteArrayInputStream byteArrayInputStream;
byteArrayInputStream=new ByteArrayInputStream(byteArray);
try {
inputStream=new ObjectInputStream(byteArrayInputStream);
T obj=(T)inputStream.readObject();
return obj;
} catch (Exception e) {
log.error("ObjectSerializeUtil-IOException:{}",e);
} return null;
} }

自定义对象存入Redis的更多相关文章

  1. redis jedis存储对象简单操作,map list 自定义对象

    安装好redis,进行了基本的操作.包括对map list 和自定义对象的基本操作.笔记都在代码注释里,直接上代码. private Jedis jedis; @Before public void ...

  2. NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象

    摘要: NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的 ...

  3. php 将查询出的数组数据存入redis

    我们从数据库查询出来的数据一般为数组的形式, 而redis是不支持存入数组的, 一种解决办法是将数组转化为json数据,再将json存入redis,之后取出时再将json转化为php数组. 但将取出的 ...

  4. java集合 collection-list-ArrayList 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。

    import java.util.*; /* 将自定义对象作为元素存到ArrayList集合中,并去除重复元素. 比如:存人对象.同姓名同年龄,视为同一个人.为重复元素. 思路: 1,对人描述,将数据 ...

  5. 集合框架(HashSet存储自定义对象保证元素唯一性)

    HashSet如何保证元素唯一性的原理 1.HashSet原理 a. 我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降 ...

  6. js数组、内置对象、自定义对象

    [js中的数组] 1.数组的基本概念? 数组是在内存空间中连续存储的一组有序数据的集合 元素在数组中的顺序,称为下标.可以使用下表访问数字的每个元素. 2.如何声明一个数组? ① 使用字面量声明: 在 ...

  7. JavaSE 集合类HashSet保证自定义对象唯一性

    首先我们自定义Person类,只有姓名和年龄两个属性 class Person{ private String name ; private int age ; public Person(Strin ...

  8. NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象 - lady-奕奕的个人空间 - 开源中国社区

    一.了解NSUserDefaults以及它可以直接存储的类型 NSUserDefaults是一个,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用,这是它可以让数据自由传递的一个前 ...

  9. TreeSet的自然排序(自定义对象 compareTo方法)

    >要实现自然排序,对象集合必须实现Comparable接口,并重写compareTo()方法 >一般需求中描述的是"主要条件",如:按姓名长度排序.  需注意次要条件 ...

随机推荐

  1. 021.6 IO流 练习

    #######################################################################################获取指定目录下所有的.ja ...

  2. css属性之flex属性

    flex属性 规定了弹性元素如何伸长或缩短以适应flex容器中的可用空间.是一个简写属性,可以同时设置flex-grow, flex-shrink, flex-basis三个子属性. /* Basic ...

  3. BZOJ 1088 扫雷Mine 枚举初始状态

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1088 题目大意: 现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: ...

  4. Functional Reactive Programming

    Functional Reactive Programming (FRP) integrates time flow and compositional events into functional ...

  5. Linux环境下GNU, GCC, G++编译器

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012823258/article/details/36890125 一.GNU GNU是" ...

  6. 【转+修改】容联云通讯api调用短信发送调用

    转自   https://my.oschina.net/u/1995134/blog/814540 需要荣联云通讯 的 相对应SDKjar包. CCP_REST_SMS_SDK_JAVA_v2.6.3 ...

  7. 【[IOI2014]Wall 砖墙】

    好像随便一卡就最优解了 malao告诉我这道题挺不错的,于是就去写了写 这两个操作很有灵性啊,感觉这么有特点的数大概是需要分块维护的吧 但是并没有什么区间查询,只是在最后输出整个序列 于是我们就直接用 ...

  8. POJ1039 Pipe

    嘟嘟嘟 大致题意:按顺序给出\(n\)个拐点表示一个管道,注意这些点是管道的上端点,下端点是对应的\((x_i, y_i - 1)\).从管道口射进一束光,问能达到最远的位置的横坐标.若穿过管道,输出 ...

  9. 9、Dubbo-配置(4)

    本地存根 远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端 也执行部分逻辑,比如:做 ThreadLocal 缓存,提前验证参数,调用失败后伪造容错数据等 等,此时就需 ...

  10. linux各种压缩包的压缩和解压方法

    .tar/.war(tar是打包,不是压缩) 解包:tar xvf FileName.tar / FileName.war 打包:tar cvf FileName.tar DirName .gz 解压 ...