自定义对象存入Redis
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的更多相关文章
- redis jedis存储对象简单操作,map list 自定义对象
安装好redis,进行了基本的操作.包括对map list 和自定义对象的基本操作.笔记都在代码注释里,直接上代码. private Jedis jedis; @Before public void ...
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
摘要: NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的 ...
- php 将查询出的数组数据存入redis
我们从数据库查询出来的数据一般为数组的形式, 而redis是不支持存入数组的, 一种解决办法是将数组转化为json数据,再将json存入redis,之后取出时再将json转化为php数组. 但将取出的 ...
- java集合 collection-list-ArrayList 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
import java.util.*; /* 将自定义对象作为元素存到ArrayList集合中,并去除重复元素. 比如:存人对象.同姓名同年龄,视为同一个人.为重复元素. 思路: 1,对人描述,将数据 ...
- 集合框架(HashSet存储自定义对象保证元素唯一性)
HashSet如何保证元素唯一性的原理 1.HashSet原理 a. 我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降 ...
- js数组、内置对象、自定义对象
[js中的数组] 1.数组的基本概念? 数组是在内存空间中连续存储的一组有序数据的集合 元素在数组中的顺序,称为下标.可以使用下表访问数字的每个元素. 2.如何声明一个数组? ① 使用字面量声明: 在 ...
- JavaSE 集合类HashSet保证自定义对象唯一性
首先我们自定义Person类,只有姓名和年龄两个属性 class Person{ private String name ; private int age ; public Person(Strin ...
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象 - lady-奕奕的个人空间 - 开源中国社区
一.了解NSUserDefaults以及它可以直接存储的类型 NSUserDefaults是一个,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用,这是它可以让数据自由传递的一个前 ...
- TreeSet的自然排序(自定义对象 compareTo方法)
>要实现自然排序,对象集合必须实现Comparable接口,并重写compareTo()方法 >一般需求中描述的是"主要条件",如:按姓名长度排序. 需注意次要条件 ...
随机推荐
- php中的static
静态成员是一种类变量,可以把它看成时属于整个类而不是属于类的某个实例.与一般的实例变量不同的是,静态成员只保留一个变量值,而这个变量值对所有的实例都是有效的,也就是说,所有的实例共享这个成员. $th ...
- Apache Spark : Introduction
看了一点<数据算法:Hadoop/Spark大数据处理技巧>,觉得有必要了解一下 Spark . 以上. Spark was introduced by Apache Software F ...
- c++计算器后续(1)
自娱自乐: 大概是一直在说的代码规范,大概是玩一玩,以上. 代码规范: 参考原文:链接 相关节选: 4 程序的版式 4.4规则:较长的语句(>80字符)要分成多行书写. 4.5规则:不允许把多个 ...
- PHP imagechar() 图形验证码 字体太小问题
bool imagechar ( resource $image , int $font , int $x , int $y , string $c , int$color ) imagechar() ...
- 在Windows 10中更改网络连接优先级
查看接口列表 (也可使用 如下) 选择网络连接,然后单击右侧的箭头以更改网络连接优先级. 可以参考之前的部分 链接在此 更改单个wi-fi连接顺序可以使用如下
- pyenv 配置python虚拟环境
安装pyenv环境 yum -y install git yum install gcc make patch gdbm-devel openssl-devel sqlite-devel readli ...
- python迭代、列表生成式
迭代: 迭代对象(Iterable),可以直接作用于for循环的对象,如list / tuple / dict / set / str /等集合数据类型可以直接作用于for循环 >>> ...
- translate动画实例
<!doctype html> <html lang="en"> <head> <meta name="viewport&quo ...
- CTreeCtrl::HitTest
CTreeCtrl::HitTest 调用此函数确定指定的位置点相对树视图控件的工作区的. HTREEITEM HitTest( CPoint pt, UINT* pFlags = NULL ...
- Java编写画图板程序细节-保存已画图形
没有Java编写画图板程序细节-保存已画图形 一.为何我们要保存画图板上已画图形呢? 有很多人会问,为什么我们一定要保存画图板上已经画好了的图形呢?原因很简单.当我们在画图板上画完自己想画的图形后 ...