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. C# 委托/Func() 中 GetInvocationList() 方法的使用 | 接收委托多个返回值

    在日常使用委托时,有以下常用方法 方法名称 说明  Clone   创建委托的浅表副本.  GetInvocationList   按照调用顺序返回此多路广播委托的调用列表.  GetMethodIm ...

  2. spark中利用Sql2o连接数据的例子BlogService

    最近在看学习Spark Framework. 这是一个web框架,宗旨正如其官网LInk所示:Spark - A micro framework for creating web applicatio ...

  3. java抽象继承-模板方法

    //模板方法:步骤提前设计好,用的时候只需要改步骤内容 public class TemplateDemo { public static void main(String[] args) { // ...

  4. Odoo中的onchange

    转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9280723.html  [onchange=前端js函数,可以实现前端实时更新以及修改验证] onchange ...

  5. D、CSL 的字符串 【栈+贪心】 (“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛)

    题目传送门:https://ac.nowcoder.com/acm/contest/551#question 题目描述 CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助. ...

  6. laravel 多态映射(打赏为例)

    迁移: public function up() { Schema::create('rewards', function (Blueprint $table) { $table->increm ...

  7. [Python web开发] Web框架开发基础 (一)

    Python WEB框架 WSGI,WEB Server Gateway Interface,可以看做是一种底层协议,它规定了服务器程序和应用程序各自实现上面接口.Python的实现称为wsgiref ...

  8. shell脚本进阶 详解及其实例(一)

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  9. numeric_limits<>函数

    因为比较有用,所以自己试验并且翻译了一下,很可能有错误,希望发现错误的朋友能给我留言纠正,谢谢! 有部分没有翻译,因为还没弄清楚到底什么作用 numeric_limits是模板类. 需要注意的是返回值 ...

  10. 关于IntelliJ IDEA 文档无法编辑的解决办法

    问题:在调试的时候,光标无法聚焦到代码区,导致无法编辑代码.停止调试后,问题仍然存在,需要重启idea. 这个问题纠结了我一个上午,百狗一通,发现都是说要卸载vim插件啥的,但是我是没装过vim插件. ...