用java在redis中存储对象

【SpringBoot】34、SpringBoot整合Redis实现序列化存储Java对象 前面我们已经介绍过【SpringBoot】十七、SpringBoot 中整合 Redis,我们可以看出,在 SpringBoot 对 Redis 做了一系列的自动装配,使用还是非常方便的 一、背景 1、思考‘ 通过我们前面的学习,我们已经可以往 Redis 中存入字符串,那么我们要往 Redis 中存入 Java 对象该怎么办呢? 2、方案 我们可以将 Java 对象转化为 JSON 对象,然后转为 JSON 字符串,存入 Redis,那么我们从 Redis 中取出该数据的时候,我们也只能取出字符串,并转 阅读详情

最近需要封装一个操作redis的工具类,不知道怎么向redis中存储对象,想到过用java反射去做。在网上搜索了一下,发现可以用序列化对象的方式去存储。再此我整理了一下

感谢,残剑_提供的方法:http://www.cnblogs.com/liuling/p/2014-4-19-04.html(redis基础操作)

感谢,萧剑90提供的方法:http://blog.youkuaiyun.com/abc19900828/article/details/40373549(redis存储对象)

使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip

如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar,下载地址:http://files.cnblogs.com/liuling/commons-pool-1.5.4.jar.zip

以下是我借鉴之后整理的代码,简单封装。

一、redis连接池

RedisConnectionPool
package dao.redisUtil;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class RedisConnectionPool {


    //Redis服务器IP
    private static String IP = "localhost";

    //Redis的端口号
    private static int PORT = 6379;

    //访问密码
//    private static String AUTH = "admin";

    //可用连接实例的最大数目,默认值为8;
    //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
    private static int MAX_ACTIVE = 1024;

    //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
    private static int MAX_IDLE = 200;

    //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
    private static int MAX_WAIT = 10000;

    private static int TIMEOUT = 10000;

    //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
    private static boolean TEST_ON_BORROW = true;

    private static JedisPool jedisPool = null;

    /**
     * 初始化Redis连接池
     */
    static {
        try {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxActive(MAX_ACTIVE);
            config.setMaxIdle(MAX_IDLE);
            config.setMaxWait(MAX_WAIT);
            config.setTestOnBorrow(TEST_ON_BORROW);

            jedisPool = new JedisPool(config, IP, PORT, TIMEOUT);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取Jedis实例
     * @return
     */
    public synchronized static Jedis getJedis() {
        try {
            if (jedisPool != null) {
                Jedis resource = jedisPool.getResource();
                return resource;
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 释放jedis资源
     * @param jedis
     */
    public static void returnResource(final Jedis jedis) {
        if (jedis != null) {
            jedisPool.returnResource(jedis);
        }
    }
}

二、序列化对象方法

SerializeUtil
package dao.redisUtil;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
 * @author Administrator
 * 序列化对象工具类
 */
public class SerializeUtil {
    public static byte[] serialize(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) {

        }
        return null;
    }

    public static Object unserialize( byte[] bytes) {
        ByteArrayInputStream bais = null;
        try {
            // 反序列化
            bais = new ByteArrayInputStream(bytes);
            ObjectInputStream ois = new ObjectInputStream(bais);
            return ois.readObject();
        } catch (Exception e) {

        }
        return null;
    }
}

三、封装redis增删改查基础操作

RedisOperation
package dao.redisUtil;


import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 实现redis操作
 */
public class RedisOperation{
    //获取redis操作实例
    private Jedis jedis=RedisConnectionPool.getJedis();

    public String set(String key, HashMap<String,String> map) {
        return jedis.hmset(key,map);
    }

    public String set(byte[] key, HashMap<byte[], byte[]> map) {
        return jedis.hmset(key,map);
    }

    public String set(String key, List<String> list) {
        Long aLong=-1l;
        for (String value:list
             ) {
            aLong = jedis.lpush(key,value);
        }
        return aLong<=0?"error":"OK";
    }

    public String set(byte[] key, List<byte[]> list) {
        Long aLong=-1l;
        for (byte[] value:list
                ) {
            aLong=jedis.lpush(key,value);
        }
        return aLong<=0?"error":"OK";
    }

    public String set(String key, String value) {
        return jedis.set(key,value);
    }

    public String set(byte[] key, byte[] value) {
        return jedis.set(key, value);
    }

    public String set(String key, Set<String> set) {
        Long aLong=-1l;
        for (String value:set
             ) {
            aLong=jedis.sadd(key,value);
        }
        return aLong<=0?"error":"OK";
    }

    public String set(byte[] key, Set<byte[]> set) {
        Long aLong=-1l;
        for (byte[] value:set
                ) {
            aLong=jedis.sadd(key,value);
        }
        return aLong<=0?"error":"OK";
    }

    //redis写入对象,用序列化对象的方式
    public String set(String key, Object Obj) {
       return  jedis.set(key.getBytes(),SerializeUtil.serialize(Obj));
    }

    public Object get(String key) {
        Object object=null;
        //获取value的类型
        String type=jedis.type(key);
        //根据不同类型调用不同的获取方法
        if(type.toLowerCase().equals("map")){
            object=jedis.hgetAll(key);
        }else if(type.toLowerCase().equals("set")){
            object=jedis.smembers(key);
        }else if(type.toLowerCase().equals("list")){
            object=jedis.lrange(key,0,-1);
        }else if (type.toLowerCase().equals("string")){
            byte[] bytes=jedis.get(key.getBytes());
            object=SerializeUtil.unserialize(bytes);
            if(object==null){
                object=jedis.get(key);
            }
        }
        return object;
    }

    public Object get(byte[] key) {
        return null;
    }

    public Long delete(String key) {
        return jedis.del(key);
    }

    public String update(String key,Object value){
        //先删除原有数据
        Long along = jedis.del(key);
        if(along<0){
            return "error";
        }
        //再重新添加
        if(value instanceof Map){
            set(key,(Map)value);
        }else if(value instanceof Set){
            set(key,(Set) value);
        }else if(value instanceof List){
            set(key,(List) value);
        }else if(value instanceof String){
            set(key,(String)value);
        }else {
            set(key,value);
        }
        return "OK";
    }
}

网格聚类 Grid Clustering/Grid-based Clustering 本文主要简单介绍了网格聚类的基本概念,优缺点,应用场景,建模时的注意事项,评价指标,实现方法,python示例和模型参数等。 阅读详情

相关推荐

Kettle安装与使用

Pentaho Data Integration作为一个端对端的数据集成平台,可以对多种数据源进行抽取(Extraction)、加载(Loading)、数据落湖(Data Lake Injection)、对数据进行各种清洗(Cleasing)、转换(Transformation)、混合(Blending),并支持多维联机分析处理(OLAP)和数据挖掘(Data mining)。勺子(spoon.bat/spoon.sh):是一个图形化的界面,可以让我们用图形化的方式开发转换和作业。

jnrjian的博客 1万+

【Redis】Redis如何存储一个Java对象【内涵案例】

三种方式实现Redis存储一个java对象。

m0_64210833的博客 5704

C#实践项目1

需求: 在CAD内实现两个坐标系的转换。 转换方式为文件内的所有图形从一个坐标系下的坐标,转换到另一个坐标系下的坐标。 进行坐标转换后,仅仅是坐标发生改变,图层、样式等等不会发生变化。

weixin_51182789的博客 5323

Redis存储Java对象方案

redis存储Java对象,使用自定义的RedisTemplate类,和使用StringRedisTemplate

qq_45626589的博客 5000

保姆级教程:用SOEM主站搞定汇川SV660N伺服驱动器的EtherCAT通讯(附完整C代码)

本文提供了一份详细的SOEM主站与汇川SV660N伺服驱动器EtherCAT通讯的实战教程,涵盖环境搭建、状态机理解、PDO映射配置、CiA402状态机实战、实时性能优化及诊断调试等关键步骤,并附完整C代码示例,帮助开发者快速实现工业级EtherCAT控制。

weixin_28292761的博客 301

FPGA原型验证(八):SoC设计适配与实现策略

时钟门控在SoC设计中很常见,应该小心处理门控时钟,以成功地在FPGA上原型化SoC设计。现代FPGA综合工具在正确约束的情况下,可以自动处理大多数门控时钟。通过遵循本章中的指导方针,即使具有复杂时钟门控的SoC设计也可以得到处理,并成功地在FPGA上进行原型化。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 477

Redis--------Java Redis存储对象列表

需要注意的是,Java序列化不是最优的序列化方式,因为它会产生较大的对象存储和传输负担。另外,如果使用Jackson等JSON序列化库,我们可以将对象列表序列化为JSON格式,具有更好的可读性和可测试性。Java Redis可以使用Java序列化的方式存储对象列表。

LJH_java10086的博客 1656

软考高级系统架构设计师历年论文真题深度分析(2011-2025)

本文系统分析了2011-2025年系统架构设计师论文真题,归纳出十大主题类别,包括架构风格、企业集成、数据技术、非功能属性等。研究发现新兴技术占比最高(18.8%),企业集成、数据架构和非功能属性为三大核心考点。论文命题呈现明显技术演进特征,从经典架构理论逐步转向云原生、AI融合等前沿方向。备考建议重点关注高频考点和技术前沿,同时强化场景化解决方案能力。分析表明,架构师考试持续跟踪行业技术发展,注重理论与实践结合,为考生提供了明确的备考方向。

一几文的编程学习笔记。 2032

Java操作redis常见类型数据存储

redis与mysq都是数据库,java操作redis其实跟操作mysql的过程是差不多的,首先都是导入依赖、建立连接,只是方式不同,redis是非关系数据库而mysql是关系数据库。

让优秀成为一种习惯! 8670

FFmpeg入门详解之110:RTSP协议讲解

TCP/IP 协议体系中的一个应用层协议,该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。HTTP与RTSP相比,HTTP传送HTML,而RTSP传送的是多媒体数据。正在上传…重新上传取消RTSP是基于文本的协议,采用ISO10646字符集,使用UTF-8编码方案。行以CRLF中断(\r\n:10,13:0x0A,0x0D),包括消息类型、消息头、消息体和消息长。

福优学苑@音视频+流媒体 2529

【ARM CoreLink 系列 7 -- TZC-400控制器简介】

为了确保内存能够正确识别总线的信号控制位,新增一个TrustZone地址空间控制器(TrustZone Address Space Controller,TZASC)组件来实现对内存地址的安全扩展,将内存区域划分为安全内存区域和非安全内存区域,安全世界可以访问安全内存和非安全内存,而普通世界只能访问非安全内存,如下图所示:图 1-1内存区域的划分是在系统启动时通过配置 TZASC 组件(TZC-400/TZC-380)来实现的。TZC-400由和使能情况;安全访问权限;Base地址;

CodingCos的博客 1632

java使用redis缓存对象

1,引入redis :防止恶意入侵数据库 @Autowired StringRedisTemplate redisTemplate; 2,将对象转为Json方便存储 Object ob = JSON.toJSON(new 对象) 3,存入redis,这里,这里选择定时存储 参数一:传入参数的键,用户必传 参数二:传入的json.toString() 参数三:设置的定时,用户在这一时间内不能重复提交 参数四:时间配置 redisTemplate.opsForValue().set(Contanen

qq_37430469的博客 2272

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

使用redis存储Java对象

Java序列化为byte数组方式。在Jedis开发中,我们很多时候希望直接把一个对象放到Redis中,然后在需要的时候取出来。Redis的key和value都支持二进制安全的字符串,存储Java对象不是问题,下面我们看一下如何来实现。

小李专栏 5万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

redis存储java对象

1、redis要存储java对象,首先要将java对象序列化 public class Person implements Serializable { private int id; private String name; public Person(int id, String name) { this.id = id; this.name = name;

nuoWei_SenLin的博客 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

redis存储java对象_Redis存储java对象

我们很多时候希望直接把一个对象放到Redis中,然后在需要的时候取出来。Redis的key和value都支持二进制安全的字符串,存储Java对象不是问题,下面我们看一下如何来实现。1要存储的对象现在写一个很土的Java Bean,包含两个字段,id和name,类名叫做Person。为了实现序列化需求,该类实现Serializable接口。public class Person implements...

weixin_39621669的博客 1190

Java操作Redis存储对象类型数据

背景描述      关于JAVA去操作Redis时,如何存储一个对象的数据,这是大家非常关心的问题,虽然官方提供了存储String,List,Set等等类型,但并不满足我们现在实际应用。存储一个对象是非常常见的。经过网上查找资料以及参考其他网友的代码和实践操作后,整理出Redis如何存储一个对象的demo代码,如果有错误的地方大家可以留言指出。 参考资料 参考地址: https://blo...

干了10几年测试的老油条的博客 9546

Redis实践-存储Java对象

Redis作为目前主流的缓存数据库,提供了丰富的数据结构,这次做的项目里我们大量使用了Redis作为数据缓存,甚至在某些场景下直接作为了数据库使用(当然这是建立在公司内部基础组件足够可靠的前提下),由于项目是从零开始,在使用Redis的过程中,遇到了一些设计上的挑战和问题,因此特别在博客里记录下来。 最基础的肯定就是Java对象的存储,使用SQL型数据库的时候,可以借助ORM框架直接进行把Java...

CringKong的博客 2491

redis如何存储java对象

redis中存储java对象的两种方式 根据redis的存储原理,Redis的key和value都支持二进制安全的字符串 1.利用序列化和反序列化的方式 存储java对象我们可以通过对象的序列化与反序列化完成存储于取出,这样就可以使用redis存储java对象了 步骤:创建一个序列化和反序列化的工具类 public class SerializeUtil { public stat...

top8488.top大数据 529

redis储存实体类对象_redis中如何存储java对象

根据redis的存储原理,Redis的key和value都支持二进制安全的字符串1.利用序列化和反序列化的方式存储java对象我们可以通过对象的序列化与反序列化完成存储于取出,这样就可以使用redis存储java对象了a.利用jdk自带的序列化机制,但效率不高步骤:创建一个序列化和反序列化的工具类public classSerializeUtil {public static byte[] ser...

weixin_39597636的博客 1146

redis中存储java对象的两种方式

根据redis的存储原理,Redis的key和value都支持二进制安全的字符串1.利用序列化和反序列化的方式存储java对象我们可以通过对象的序列化与反序列化完成存储于取出,这样就可以使用redis存储java对象了 2.通过json将java对象转换

bang_come的博客 2万+

redis java hash存储对象

前言: redis缓存的hash数据类型可以让用户将多个key-value对存储到一个redis键里,适合用来存储对象。 本文介绍在spring-redis环境上使用RedisTemplate操作对象。 接下来的测试是建立在spring-redis环境上的,没有整合spring redis环境则无法与redis缓存进行交互。 实际操作: 创建对象并以hash数据类型保存到redis缓存 package com.server; import java.util.Map; import java.uti

m0_67402236的博客 3409

redis存储java对象_详解Java在redis中进行对象的缓存

Java在redis中进行对象的缓存一般有两种方法,这里介绍序列化的方法,个人感觉比较方便,不需要转来转去。一、首先,在存储的对象上实现序列化的接口package com.cy.example.entity.system;import java.util.List;import com.baomidou.mybatisplus.annotations.TableField;import com.b...

weixin_35778603的博客 603

redis 存储java对象_安装redis 并把java对象存放在redis中

一、下载的安装包解压到盘符的指定位置,如下结构:(纯手敲,如果有缺失,见谅)Redis.docredis-benchmark.exeredis-check-aop.exeredis-check-dump.exeredis-cli.exeRedisQFork_8524.datredis-server.exeRedisService.doc我的安装路径:D:\install_tool\redis\re...

weixin_36027743的博客 467

Redis存储java对象

         我们很多时候希望直接把一个对象放到Redis中,然后在需要的时候取出来。Redis的key和value都支持二进制安全的字符串,存储       Java对象不是问题,下面我们看一下如何来实现。 1要存储的对象       现在写一个很土的Java Bean,包含两个字段,id和name,类名叫做Person。为了实现序列化需求,该类实现Serializable接口。 pu...

liyonghui123的专栏 731

Redis存储Java对象

Redis存储Java对象

格子的博客 871
上一篇: 在公司内网环境下用Intellij IDEA创建springMVC-Mybatis项目
下一篇: TinyBox.js插件在页面上实现超简单的图片、iframe、ajax弹出层
Copying505
博客等级 码龄9年 2粉丝 23原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值