iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >redis存储对象方法的比较
  • 294
分享到

redis存储对象方法的比较

2023-06-20 17:06:19 294人浏览 独家记忆
摘要

本篇内容主要讲解“redis存储对象方法的比较”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis存储对象方法的比较”吧!redis 存储对象的方法对比问题背景:原来项目里面全部是直接red

本篇内容主要讲解“redis存储对象方法的比较”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习Redis存储对象方法的比较”吧!

redis 存储对象的方法对比

问题背景:

原来项目里面全部是直接redis存储对象的JSON数据,需要频繁的序列化和反序列化,后来考虑更换项目中的redis存储对象为hash对象存储的,但是获取后不能方便的set get操作,很是蛋疼,怎么才能解决这个问题呢?

1.1 直接存储对象的json

存放redis的时候,直接先用fastJson 或者 jackJson或者Gson把对象序列化为json数据,然后用直接存放,key表示用户id或许和openid,value则是对象的json数据

redis存储对象方法的比较

public String get(String key) {Object value = redisTemplate.boundValueOps(key).get();return (String) value;}public void set(String key, String json) {if (json == null) {return;}redisTemplate.boundValueOps(key).set(json);}

优点:虽然需要序列化和反序列化,但是可以直接操作对象的方法,方便快捷

缺点:需要序列化和反序列化,并且修改单个字段,需要获取整个json,修改后,序列化保存,浪费空间,浪费时间,效率低

1.2 采用redis hash key field value 存储

key代表主键,比如用户id,或者openId,value是一个map,对应各个字段的属性和值

redis存储对象方法的比较

存放单个字段

public void hset(String key, String field, String obj) {redisTemplate.boundHashOps(key).put(field,obj);}

存放整个:

public void hSetMap(String key,Map<Object,Object> map){redisTemplate.boundHashOps(key).putAll(map);}

优点:存储方方便,节省内存空间,并且可以直接对单个字段修改,而不用获取整个对象,效率高

缺点:获取value后,是个map,不能方便的直接调用(set get)处理,需要手动map.get(filed)或者map.put(field,value)

1.3 如何解决redis hash存储对象的操作方便性问题

其实关于map和pojo的转换问题,网上给出了利用反射做的转换方法,但是加上了转换和反转,这和序列化和反序列化的问题一样了,效率问题,也不敢指直接用,纠结,思考再三,还是先维持代码不动了,以后考虑好了再说,或者广发网友有啥好解决方法,请多多指教哈!

Redis存储对象的三种方式

一、 将对象序列化后保存到Redis

序列化工具类实现

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;         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();        }    }         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);    }}

User对象

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字符串后存储

redis操作类

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());    }

三、将对象用Hash数据类型存储

redis操作类

public class RedisOps {    public static void hSet(String key,String value){        Jedis jedis = RedisConnection.getJedis();        jedis.hSet(key, value);        jedis.close();    }    public static String hGet(String key){        Jedis jedis = RedisConnection.getJedis();        String value = jedis.hGet(key);        jedis.close();        return value;    }}

测试

 @Test    public void testObject3(){     //存        RedisOps.hSet("user:3","id","3");        RedisOps.hSet("user:3","name","xiaoming");                //取        String id =  RedisOps..hGet("user:3","id");        String name = RedisOps.hGet("user:3","name");        Assert.assertEquals("3", id);        Assert.assertEquals("xiaoming", name);            }

到此,相信大家对“redis存储对象方法的比较”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: redis存储对象方法的比较

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

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

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

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

下载Word文档
猜你喜欢
  • redis存储对象方法的比较
    本篇内容主要讲解“redis存储对象方法的比较”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“redis存储对象方法的比较”吧!redis 存储对象的方法对比问题背景:原来项目里面全部是直接red...
    99+
    2023-06-20
  • redis 存储对象的方法对比分析
    redis 存储对象的方法对比 问题背景: 原来项目里面全部是直接redis存储对象的json数据,需要频繁的序列化和反序列化,后来考虑更换项目中的redis存储对象为hash对象存...
    99+
    2024-04-02
  • redis中list存储对象的方法
    小编给大家分享一下redis中list存储对象的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如果需要用到Redis存储Li...
    99+
    2024-04-02
  • Redis怎么存储对象
    这篇“Redis怎么存储对象”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Redis怎么存储对象”文章吧。Redis存储对象...
    99+
    2023-07-02
  • java中各种对象的比较方法
    目录前言1. 问题提出2. 元素的比较2.1 基本类型的比较2.2 对象的比较3. 对象的比较3.1 覆写基类的equal3.2 基于Comparble接口类的比较3.3 基于比较器...
    99+
    2023-05-18
    java对象比较方法 js 对象比较 java对象的比较
  • redis如何存储java对象
    redis存储java对象的方法:1、写一个java Bean,包含id和name两个字段,类名是Person。因为要实现序列化需求,所以该类实现Serializable接口。2、需要写一个序列化工具类,用于提供对象的序列化和反序列化的工作...
    99+
    2024-04-02
  • redis如何存储list对象
    在Redis中,可以使用列表数据结构存储list对象。Redis中的列表是一种有序的字符串列表,可以按照插入顺序存储多个字符串。以下...
    99+
    2023-09-11
    redis
  • Java Integer对象的比较方式
    目录Java Integer对象的比较自动装箱自动拆箱Integer初始化Integer对象之间的比较Integer类型变量比较问题代码1代码2代码3代码4关于这种现象,查了下资料,...
    99+
    2024-04-02
  • java对象的比较
    java对象的比较 🐱1. 问题提出🐱🐶2. 元素的比较🐶2.1 基本类型的比较2.2 对象的比较 🐭 3....
    99+
    2023-08-31
    java 算法 数据结构
  • 比较JavaScript对象的四种方式
    目录前言引用比较手动比较浅层比较深层比较总结前言 比较JavaScript中的原始值非常简单。只需使用任何一种可用的相等运算符即可,例如严格相等运算符: 'a' === 'c';...
    99+
    2024-04-02
  • Java各种比较对象的方式的对比总结
    一、==和!=操作符 让我们从==和!=开始可以分别判断两个Java对象是否相同的操作符。 1.1 原始类型(Primitives) 对于原始类型,相同意味着具有相等的值: as...
    99+
    2024-04-02
  • 比较了不同方式下的本地存储方法
    本地存储:不同方式下的localstorage保存方法对比 在现代Web开发中,本地存储是一项非常重要的技术,它可以使我们将数据保存到用户的浏览器中,以便之后可以方便地获取和使用。在本文中,我们将重点讨论使用localstora...
    99+
    2024-01-15
    对比 保存方法
  • 浅谈java对象的比较
    目录1、元素的比较2、类的比较3、比较方法3.1 重写equals方法3.2 基于Comparble接口类的比较3.3 基于比较器比较基于比较器比较:Comparator接口3.4 ...
    99+
    2024-04-02
  • JavaScript 对象的四种方式比较详解
    目录前言1. 引用比较2. 手动比较3. 浅层比较4. 深层比较5. 总结前言 比较 JavaScript 中的值非常简单,只需用相等运算符即可,例如严格相等运算符: 'a' ===...
    99+
    2024-04-02
  • SpringBoot整合Redis实现序列化存储Java对象的操作方法
    目录一、背景1、思考2、方案二、源码分析三、注入RedisTemplate1、引入依赖2、Redis 连接信息3、Redis 核心配置类4、Redis工具类四、测试1、创建 Java 实体类 UserInfo2、测试用例...
    99+
    2023-03-23
    SpringBoot整合Redis序列化存储Java对象 SpringBoot整合Redis SpringBoot Redis序列化存储
  • Spring存储与读取Bean对象方法
    目录一、创建 Spring 项目1.1 创建⼀个 Maven 项目1.2 添加 Spring 框架支持1.3 添加启动类二、存储 Bean 对象2.1 创建 Bean2.2 将 Be...
    99+
    2023-01-13
    Spring存储与读取Bean Spring存储Bean Spring读取Bean
  • redis怎么使用hash存储java对象
    你可以使用Redis的Hash数据结构来存储Java对象。在Java中,你可以将对象转换为JSON格式,然后将JSON字符串存储在R...
    99+
    2024-04-09
    redis hash java
  • Go、JavaScript 和 Laravel:三种存储方式的比较?
    当我们在开发应用程序时,选择一种合适的存储方式非常重要。在本文中,我们将比较三种不同的存储方式,Go、JavaScript 和 Laravel。 Go Go是一种高性能编程语言,它的存储方式通常使用SQL数据库或NoSQL数据库。SQL数据...
    99+
    2023-08-20
    javascript 存储 laravel
  • PHP、Spring、Django存储方案的比较与分析
    PHP、Spring、Django是当下最为流行的Web开发框架之一,它们都提供了相应的存储方案,以满足不同开发者的需求。本文将对这三种存储方案进行比较与分析,并给出相应的演示代码,帮助读者更好地了解它们的优缺点。 PHP存储方案 PH...
    99+
    2023-09-25
    存储 spring django
  • redis存储数据的方法
    这篇文章主要介绍redis存储数据的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!redis是什么?Redis 是一个高性能的key-value数据库。 redis的出现,很大程...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作