Redis:存储对象的两种方式(序列化和json字符串)
方式一:序列化操作
- public class SerializeUtil {
- /*
- * 序列化
- * */
- public static byte[] serizlize(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) {
- e.printStackTrace();
- }finally {
- try {
- if(baos != null){
- baos.close();
- }
- if (oos != null) {
- oos.close();
- }
- } catch (Exception e2) {
- e2.printStackTrace();
- }
- }
- return null;
- }
- /*
- * 反序列化
- * */
- public static Object deserialize(byte[] bytes){
- ByteArrayInputStream bais = null;
- ObjectInputStream ois = null;
- try{
- bais = new ByteArrayInputStream(bytes);
- ois = new ObjectInputStream(bais);
- return ois.readObject();
- }catch(Exception e){
- e.printStackTrace();
- }finally {
- try {
- } catch (Exception e2) {
- e2.printStackTrace();
- }
- }
- return null;
- }
- }
获取jedis实例
- public class RedisConnection {
- private static String HOST = "127.0.0.1";
- private static int PORT = 6379;
- private static int MAX_ACTIVE = 1024;
- private static int MAX_IDLE = 200;
- private static int MAX_WAIT = 10000;
- private static JedisPool jedisPool = null;
- /*
- * 初始化redis连接池
- * */
- private static void initPool(){
- try {
- JedisPoolConfig config = new JedisPoolConfig();
- config.setMaxTotal(MAX_ACTIVE);//最大连接数
- config.setMaxIdle(MAX_IDLE);//最大空闲连接数
- config.setMaxWaitMillis(MAX_WAIT);//获取可用连接的最大等待时间
- jedisPool = new JedisPool(config, HOST, PORT);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /*
- * 获取jedis实例
- * */
- public synchronized static Jedis getJedis() {
- try {
- if(jedisPool == null){
- initPool();
- }
- Jedis jedis = jedisPool.getResource();
- jedis.auth("redis");//密码
- return jedis;
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- }
redis操作
- public class RedisOps {
- public static void set(String key,String value){
- Jedis jedis = RedisConnection.getJedis();
- jedis.set(key, value);
- jedis.close();
- }
- public static String get(String key){
- Jedis jedis = RedisConnection.getJedis();
- String value = jedis.get(key);
- jedis.close();
- return value;
- }
- public static void setObject(String key,Object object){
- Jedis jedis = RedisConnection.getJedis();
- jedis.set(key.getBytes(), SerializeUtil.serizlize(object));
- jedis.close();
- }
- public static Object getObject(String key){
- Jedis jedis = RedisConnection.getJedis();
- byte[] bytes = jedis.get(key.getBytes());
- jedis.close();
- return SerializeUtil.deserialize(bytes);
- }
- }
实体类
- public class User implements Serializable{
- private static final long serialVersionUID = -3210884885630038713L;
- private int id;
- private String name;
- public User(){
- }
- public User(int id,String name){
- this.id = id;
- this.name = name;
- }
- //setter和getter方法
- }
测试用例
- public class RedisTest {
- @Test
- public void testString(){
- RedisOps.set("user:1", "sisu");
- String user = RedisOps.get("user:1");
- Assert.assertEquals("sisu", user);
- }
- @Test
- public void testObject(){
- RedisOps.setObject("user:2",new User(2,"lumia"));
- User user = (User)RedisOps.getObject("user:2");
- Assert.assertEquals("lumia", user.getName());
- }
- }
方式二:使用fastjson将对象转为json字符串后存储
- public class RedisOps {
- public static void setJsonString(String key,Object object){
- Jedis jedis = RedisConnection.getJedis();
- jedis.set(key, JSON.toJSONString(object));
- jedis.close();
- }
- public static Object getJsonObject(String key,Class clazz){
- Jedis jedis = RedisConnection.getJedis();
- String value = jedis.get(key);
- jedis.close();
- return JSON.parseObject(value,clazz);
- }
- }
测试:
- @Test
- public void testObject2(){
- RedisOps.setJsonString("user:3", new User(3,"xiaoming"));
- User user = (User)RedisOps.getJsonObject("user:3",User.class);
- Assert.assertEquals("xiaoming", user.getName());
Redis:存储对象的两种方式(序列化和json字符串)的更多相关文章
- Redis 备份数据的两种方式
既然是数据库,那就一定有数据备份方式了,而且 Redis 是内存形式的数据库,更需要数据备份了,要不然断电数据就全都丢失了. Redis 数据备份有两种方式: RDB(数据快照) AOF(记录操作日志 ...
- iOS:创建单例对象的两种方式
单例模式:创建单例对象的两种方式 方式一:iOS4版本之前 static SingleClassManager *singleManager = nil; +(SingleClas ...
- Python与数据库[2] -> 关系对象映射/ORM[2] -> 建立声明层表对象的两种方式
建立声明层表对象的两种方式 在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 from sqlalchemy.sql.schema i ...
- Java反射02 : Class对象获取的三种方式和通过反射实例化对象的两种方式
1.Class对象获取的三种方式 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79361463 上一章节已经说过,一般情况下,Jav ...
- Redis数据持久化的两种方式RDB和AOF
由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁 盘上,当redis重启后,可以从磁盘中恢复数据.redis提 ...
- Asp.net Web API 返回Json对象的两种方式
这两种方式都是以HttpResponseMessage的形式返回, 方式一:以字符串的形式 var content = new StringContent("{\"FileName ...
- Redis的持久化的两种方式drbd以及aof日志方式
redis的持久化配置: 主要包括两种方式:1.快照 2 日志 来看一下redis的rdb的配置选项和它的工作原理: save 900 1 // 表示的是900s内,有1条写入,则产生快照 save ...
- JS中访问对象的两种方式区别
可以使用下面两种方式访问对象的属性和方法 1.对象名.属性名 对象名.方法名() 2.对象名["属性名"] 对象名["方法名"]() var obj = { n ...
- hibernate载入持久化对象的两种方式——get、load
一.get与load对照 在hibernate中get和load方法是依据id取得持久化对象的两种方法.但在实际使用的过程中总会把两者混淆,不知道什么情况下使用get好,什么时候使用load方法效率更 ...
随机推荐
- C++ 中 const 使用
如果你一看见C++中const就脱口而出:“常量!”那只能说明你对c++不甚了解.或者说你太2了. const得一些使用方法与场景如下: 1:const修饰普通变量,全局变量,静态变量 ; ; 变量保 ...
- 第一篇:Django基础
Django框架第一篇基础 一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model ...
- unix 下 shell 遍历指定范围内的日期
UNIX下遍历日期,date 没有 -d 的参数,所以需要自己处理. 下面使用时差的方法进行计算,遍历的日期是降序的 #!/usr/bin/ksh . $HOME/.profile timelag= ...
- SDUT 3341 数据结构实验之二叉树二:遍历二叉树
数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 已知二叉 ...
- 数据结构_Search
问题描述 可怜的 Bibi 刚刚回到家,就发现自己的手机丢了,现在他决定回头去搜索自己的手机.现在我们假设 Bibi 的家位于一棵二叉树的根部.在 Bibi 的心中,每个节点都有一个权值 x,代表他心 ...
- java全栈day33--html
本天要完成6个任务,并且布局静态页面(首页)详细分为六个部分 如下 网站信息页面案例(字体标签.排版标签) 网站图片信息页面案例(图片标签) 网站友情链接页面案例(列表标签) 网站首页案例(表格标签 ...
- 从底层了解ASP.NET体系结构
导读: 前言 关于ASP.NET的底层的工作机制,最近园子里讨论的甚是火热.相信很多人都看过Rick Strahl先生的一篇经典之作:A low-level Look at the ASP.NET ...
- UIDevice
iOS 的 APP 应用开发的过程中,有时为了 bug 跟踪或者获取用反馈的需要自动收集用户设备.系统信息.应用信息等等,这些信息方便开发者诊断问题,当然这些信息是用户的非隐私信息,是通过开发 api ...
- vue 用axios实现调用接口下载excel
了解的方式有两种: 1. 用a标签,href设置为后端提供的excel接口 <a href="excel接口">导出</a> 简单方便,缺点就是当有toke ...
- LinkExtractor 构造器各参数说明
LinkExtractor 构造器各参数说明 特例: LinkExtractor构造器的所有参数都有默认值 各参数说明: allow 接收一个正则表达式或一个正则表达式列表,提取绝对url与正则表达式 ...