广告
返回顶部
首页 > 资讯 > 数据库 >redis能保存对象吗
  • 879
分享到

redis能保存对象吗

2024-04-02 19:04:59 879人浏览 安东尼
摘要

Redis能保存对象吗?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  redis是可以存储对象的,但是需要用到序列化

Redis能保存对象吗?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

  redis是可以存储对象的,但是需要用到序列化和反序列化。

为什么要实现序列化接口?

当一个类实现了Serializable接口(该接口仅为标记接口,不包含任何方法定义),表示该类可以序列化.序列化的目的是将一个实现了Serializable接口的对象转换成一个字节序列,可以。 把该字节序列保存起来(例如:保存在一个文件里),以后可以随时将该字节序列恢复为原来的对象。甚至可以将该字节序列放到其他计算机上或者通过网络传输到其他计算机上恢复,只要该计 算机平台存在相应的类就可以正常恢复为原来的对象。 实现:要序列化一个对象,先要创建某些OutputStream对象,然后将其封装在一个ObjectOutputStream对象内,再调用writeObject()方法即可序列化一个对象;反序列化也类似。

注意:使用对象流写入到文件是不仅要保证该对象是序列化的,而且该对象的成员对象也必须是序列化的

关于Serializable接口的类中的serialVersionUID:

serialVersionUID是long类型的。在Eclipse中有两种生成方式:

默认的是1L:

private static final long serialVersionUID = 1L;

另外一个则是根据类名、接口名、成员方法以及属性等生成一个64位的哈希字段:

private static final long serialVersionUID = 3969438177161438988L;

serialVersionUID主要是为了解决对象反序列化的兼容性问题。

如果没有提供serialVersionUID,对象序列化后存到硬盘上之后,再增加或减少类的filed。这样,当反序列化时,就会出现Exception,造成不兼容问题。

但当serialVersionUID相同时,它就会将不一样的field以type的缺省值反序列化。这样就可以避开不兼容问题了。

以上方式只能恢复成Java对象,如果想要恢复成其他对象(如c++对象),那就要将Java对象转换为XML格式,这样可以使其被各种平台和各种语言使用。可以使用随jdk一起发布的javax.xam.*类库,或者使用开源XOM类库。

实验案例:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import bean.Person;
import redis.clients.jedis.Jedis;
public class SerializeUtil {
    public static void main(String [] args){
        Jedis jedis = new Jedis("172.16.135.2");
        String keys = "name";
        // 删数据
        //jedis.del(keys);
        // 存数据
        jedis.set(keys, "zy");
        // 取数据
        String value = jedis.get(keys);
        System.out.println(value);
        
        //存对象
        Person p=new Person();  //peson类记得实现序列化接口 Serializable
        p.setAge(20);
        p.setName("姚波");
        p.setId(1);
        jedis.set("person".getBytes(), serialize(p));
        byte[] byt=jedis.get("person".getBytes());
        Object obj=unserizlize(byt);
        if(obj instanceof Person){
            System.out.println(obj);
        }
    }
    
    //序列化 
    public static byte [] serialize(Object obj){
        ObjectOutputStream obi=null;
        ByteArrayOutputStream bai=null;
        try {
            bai=new ByteArrayOutputStream();
            obi=new ObjectOutputStream(bai);
            obi.writeObject(obj);
            byte[] byt=bai.toByteArray();
            return byt;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    //反序列化
    public static Object unserizlize(byte[] byt){
        ObjectInputStream oii=null;
        ByteArrayInputStream bis=null;
        bis=new ByteArrayInputStream(byt);
        try {
            oii=new ObjectInputStream(bis);
            Object obj=oii.readObject();
            return obj;
        } catch (Exception e) {
            
            e.printStackTrace();
        }
    
        
        return null;
    }
}

关于redis能保存对象吗问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网数据库频道了解更多相关知识。

您可能感兴趣的文档:

--结束END--

本文标题: redis能保存对象吗

本文链接: https://www.lsjlt.com/news/42844.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • redis能保存对象吗
    redis能保存对象吗?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  redis是可以存储对象的,但是需要用到序列化...
    99+
    2022-10-18
  • redis如何保存java对象
    在redis中保存java对象的方法:1.利用序列化保存;2.利用反序列化保存;在redis中保存java对象的方法有序列化和反序列化两种利用序列化保存java对象baos = new ByteArrayOut...
    99+
    2022-10-03
  • redis如何实现保存对象
    目录redis保存对象redis数据结构保存对象redis存放对象的两种方式数据格式方式一(String)方式二(hash)redis保存对象 redis数据结构 String——字符串Hash&...
    99+
    2022-06-16
    redis保存对象 保存对象 保存对象redis
  • Redis怎么实现保存对象
    本篇内容主要讲解“Redis怎么实现保存对象”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis怎么实现保存对象”吧! redi...
    99+
    2022-10-19
  • redis保存AtomicInteger对象踩坑及解决
    目录Redis保存AtomicInteger对象踩坑解决方案RedisAtomicInteger的使用redis保存AtomicInteger对象踩坑 redisTemplate 保存AtomicInteger对象异常:...
    99+
    2022-11-22
    redis保存AtomicInteger redis保存AtomicInteger对象 保存AtomicInteger对象踩坑
  • Redis如何存储对象
    目录Redis存储对象首先引入依赖创建一个Jedis实例方式一:将对象转化为jsON字符串存入redis方式二:将对象序列化后存到redis方式三:将对象用Hash数据类型存储Redis可以存储java对象吗答案:是可以...
    99+
    2022-06-16
    Redis存储对象 Redis对象存储 存储对象Redis
  • Redis怎么存储对象
    这篇“Redis怎么存储对象”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Redis怎么存储对象”文章吧。Redis存储对象...
    99+
    2023-07-02
  • redis存储对象的方法
    这篇文章运用简单易懂的例子给大家介绍redis存储对象的方法,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。redis已经应用相当广泛了,但redis本身并没有直接存储对象的方法,我们可...
    99+
    2022-10-18
  • redis如何存储java对象
    redis存储java对象的方法:1、写一个java Bean,包含id和name两个字段,类名是Person。因为要实现序列化需求,所以该类实现Serializable接口。2、需要写一个序列化工具类,用于提供对象的序列化和反序列化的工作...
    99+
    2022-10-10
  • redis如何存储list对象
    在Redis中,可以使用列表数据结构存储list对象。Redis中的列表是一种有序的字符串列表,可以按照插入顺序存储多个字符串。以下...
    99+
    2023-09-11
    redis
  • redis 存储对象的方法对比分析
    redis 存储对象的方法对比 问题背景: 原来项目里面全部是直接redis存储对象的json数据,需要频繁的序列化和反序列化,后来考虑更换项目中的redis存储对象为hash对象存...
    99+
    2022-11-12
  • redis存储对象方法的比较
    本篇内容主要讲解“redis存储对象方法的比较”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“redis存储对象方法的比较”吧!redis 存储对象的方法对比问题背景:原来项目里面全部是直接red...
    99+
    2023-06-20
  • redis中list存储对象的方法
    小编给大家分享一下redis中list存储对象的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如果需要用到Redis存储Li...
    99+
    2022-10-18
  • 如何更新redis缓存的对象
    要更新Redis缓存的对象,可以按照以下步骤操作:1. 获取需要更新的对象的数据。2. 更新对象的数据。3. 将更新后的对象数据存储...
    99+
    2023-08-23
    redis
  • redis事务能保证一致性吗
    Redis事务能保证一致性,但是对于并发操作来说,并不能保证数据的一致性。Redis事务使用的是乐观锁,即在开始事务前和执行事务命令...
    99+
    2023-08-24
    redis
  • hibernate第一个例子-保存对象
    3.hibernate第一个例子-保存对象使用hibernate框架需要导入的jar包:antlr-2.7.6backport-util-concurrentc3p0-0.9.1commons-collec...
    99+
    2022-10-18
  • redis怎么将对象设置为缓存
    在Redis中,可以使用以下几种方法将对象设置为缓存:1. 将对象序列化为字符串:将对象转换为字符串,然后使用Redis的字符串数据...
    99+
    2023-09-06
    redis
  • 面试官:Redis的共享对象池了解吗?
    我正在面试间里焦急地等待着,突然听到了门外的脚步声,随即门被打开,穿着干净满脸清秀的青年走了进来,一股男士香水的淡香扑面而来。 面试官:“平时在工作中用过Redis吗?” 我:“用的比较多。”我心中暗喜,Redis我熟啊,什么五种数据...
    99+
    2015-10-09
    面试官:Redis的共享对象池了解吗?
  • redis缓存对象如何实现序列化
    Redis缓存对象的序列化可以使用以下方法实现:1. 使用Redis自带的序列化机制:Redis提供了几种默认的序列化方式,包括ra...
    99+
    2023-09-06
    redis
  • Python之对象的永久保存模块---p
    经常遇到在Python程序运行中得到了一些字符串、列表、字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据。 这个时候Pickle模块就派上用场了,它可以将对象转换为一种可以传输或存储的格式。  p...
    99+
    2023-01-30
    模块 对象 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作