自定义对象存入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()方法 >一般需求中描述的是"主要条件",如:按姓名长度排序. 需注意次要条件 ...
随机推荐
- SCRUM与XP的区别和联系
相同点:SCRUM和XP都是敏捷开发的方法论,都体现了快速反馈,强调交流,强调人的主观能动性等基本原则,而且多数“最佳实践活动”都互相适用. 不同点:Scrum非常突出Self-Orgnization ...
- LOJ #6436. 「PKUSC2018」神仙的游戏
题目分析 通过画图分析,如果存在border长度为len,则原串一定是长度为n-len的循环串. 考虑什么时候无法形成长度为len的循环串. 显然是两个不同的字符的距离为len的整数倍时,不存在这样的 ...
- BZOJ1499:[NOI2005]瑰丽华尔兹(DP,单调队列)
Description 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在 ...
- xss实现钓鱼操作
自己写一个和原网站后台登录地址一模一样的钓鱼页面 JS加载一个iframe 100%覆盖原网页 提示登录超时重新登录 因为是iframe加载 url地址不变 钓鱼成功后 再跳转回/admin/inde ...
- Kali-linux使用Aircrack-ng工具破解无线网络
Aircrack-ng是一款基于破解无线802.11协议的WEP及WPA-PSK加密的工具.该工具主要用了两种攻击方式进行WEP破解.一种是FMS攻击,该攻击方式是以发现该WEP漏洞的研究人员名字(S ...
- LayIM.AspNetCore Middleware 开发日记(三)基础框架搭建
前言 在上一篇中简单讲了一些基础知识,例如Asp.Net Core Middleware 的使用,DI的简单使用以及嵌入式资源的使用方法等.本篇就是结合基础知识来构建一个基础框架出来. 那么框架有什么 ...
- [转]浅谈利用SQLite存储离散瓦片的思路和实现方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在多个项目中涉及到互联网地图的内网显示,通过自制工具完成了互联 ...
- idea 注册码(2019)
MTW881U3Z5-eyJsaWNlbnNlSWQiOiJNVFc4ODFVM1o1IiwibGljZW5zZWVOYW1lIjoiTnNzIEltIiwiYXNzaWduZWVOYW1lIjoiI ...
- [LuoguP1053][Noip2005]篝火晚会
[LuoguP1053][Noip2005]篝火晚会(Link) 现在你有一个排成一个圈的\(N\)大小的队列,一开始的顺序是\(\{1,2,3,4...N\}\),一共有\(N\)个要求,第\(i\ ...
- JNI由浅入深_2_C语言基础
*含义 1.乘法 3*5 2.定义指针变量 int * p://定义了一个名字叫p的变量,能够存放int数据类型的地址 3.指针运算符, //如果p是一个已经定义好的指针变量则*p表示以p的内容为地址 ...