redis如何实现保存对象

目录
  • redis保存对象
    • redis数据结构
    • 保存对象
  • redis存放对象的两种方式
    • 数据格式
    • 方式一(String)
    • 方式二(hash)

redis保存对象

redis数据结构

  • String——字符串
  • Hash——字典
  • List——列表
  • Set——集合
  • Sorted Set——有序集合
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set

保存对象

RedisConfig.java

package com.wj.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
}

测试成功。

redis存放对象的两种方式

数据格式

  • 用户id为查找的key
  • 存储的value用户对象包括姓名,年龄,生日等等
  • 如果用普通的key-value结构来存储,主要有以下2种方式存储

方式一(String)

这种方式是使用list或者set这些来存储的,这样的方式其实也可以达到我们想要的效果,但是因为每次修改属性都需要三步走,性能开销非常大。1.先反序列化;2,修改;3.序列化

方式二(hash)

这种方式其实也有两种写法

写法一:

这种写法不仅能够达成目标,而且解决了资源消耗过大的问题,但是也引起了另一个问题,就是用户的id数据冗余

写法二:

通过key(用户id)+field(属性标签)可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并修复操控的问题

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • redis 存储对象的方法对比分析

    redis 存储对象的方法对比 问题背景: 原来项目里面全部是直接redis存储对象的json数据,需要频繁的序列化和反序列化,后来考虑更换项目中的redis存储对象为hash对象存储的,但是获取后不能方便的set get操作,很是蛋疼,怎么才能解决这个问题呢? 1.1 直接存储对象的json 存放redis的时候,直接先用fastJson 或者 jackJson或者Gson把对象序列化为json数据,然后用直接存放,key表示用户id或许和openid,value则是对象的json数据 pub

  • 在项目中使用redis做缓存的一些思路

    目录 在项目中redis做缓存的一些思路 首先,缓存的对象有三种 本人走过的一些弯路 为什么没用Redis做缓存 使用Table作本地缓存 使用Redis作缓存 让我们来思考一下下面几个问题 那么使用本地缓存的问题是什么呢? 什么时候使用Redis? 在项目中redis做缓存的一些思路 首先,缓存的对象有三种 1.数据库中单条的的数据(以表名跟id作为key永久保存到redis),在有更新的地方都要更新缓存(不适用于需要经常更新的数据): 2.对于一些不分页,不需要实时(需要多表查询)的列表,我

  • Redis如何存储对象与集合示例详解

    前言 大家都知道在项目中,缓存以及mq消息队列可以说是不可或缺的2个重要技术.前者主要是为了减轻数据库压力,大幅度提升性能.后者主要是为了提高用户的体验度,我理解的是再后端做的一个ajax请求(异步),并且像ribbmitmq等消息队列有重试机制等功能. 这里主要讲redis如何把对象,集合存入,并且取出.下面话不多说了,来一起看看详细的介绍吧. 1.在启动类上加入如下代码 private Jedis jedis;private JedisPoolConfig config;private Je

  • redis如何实现保存对象

    目录 redis保存对象 redis数据结构 保存对象 redis存放对象的两种方式 数据格式 方式一(String) 方式二(hash) redis保存对象 redis数据结构 String——字符串 Hash——字典 List——列表 Set——集合 Sorted Set——有序集合 redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash redisTemplate.opsForList();//操作li

  • 解决sql server保存对象字符串转换成uniqueidentifier失败的问题

    一. 背景介绍 web应用采用的是ssh框架,数据库使用的sql server2014版本. 二.问题: 客户要求,ID列的数据类型必须是uniqueidentifier,一开始实体类的ID设计成java.lang.String类型:映射文件中ID的增长方式是uuid.hex private java.lang.String id; public java.lang.String getId(){ return id; } public void setId(java.lang.String i

  • 在Redis中如何保存时间序列数据详解

    目录 时间序列数据的读写特点 基于Hash和Sorted Set保存时间序列数据 基于RedisTimeSeries模块保存时间序列数据 1.用TS.CREATE命令创建一个时间序列数据集合 2.用TS.ADD命令插入数据,用TS.GET命令读取最新数据 3.用TS.MGET命令按标签过滤查询数据集合 4.用TS.RANGE支持需要聚合计算的范围查询 小结 每课一问 总结 我们现在做互联网产品的时候,都有这么一个需求:记录用户在网站或者App上的点击行为数据,来分析用户行为.这里的数据一般包括用

  • Python使用Shelve保存对象方法总结

    Shelve是一个功能强大的Python模块,用于对象持久性.搁置对象时,必须指定一个用于识别对象值的键.通过这种方式,搁置文件成为存储值的数据库,其中任何一个都可以随时访问. Python中搁置的示例代码 要搁置对象,首先导入模块,然后按如下方式分配对象值: import shelve database = shelve.open(filename.suffix) object = Object() database['key'] = object 例如,如果要保留股票数据库,可以调整以下代码

  • Spring Boot 与 Kotlin 使用Redis数据库的配置方法

    Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch, Solr和Cassandra. 使用Redis Redis是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型. Key-Value 数据库. Redis官网 Redis中文社区 引入依赖 Spring Boot提供的数据访问框架Spring Data Redis基于Jedi

  • 详解在Java程序中运用Redis缓存对象的方法

    这段时间一直有人问如何在Redis中缓存Java中的List 集合数据,其实很简单,常用的方式有两种: 1. 利用序列化,把对象序列化成二进制格式,Redis 提供了 相关API方法存储二进制,取数据时再反序列化回来,转换成对象. 2. 利用 Json与java对象之间可以相互转换的方式进行存值和取值. 正面针对这两种方法,特意写了一个工具类,来实现数据的存取功能. 1. 首页在Spring框架中配置 JedisPool 连接池对象,此对象可以创建 Redis的连接 Jedis对象.当然,必须导

  • python3实现将json对象存入Redis以及数据的导入导出

    Redis数据类型 String:二进制安全,可以包含任何数据 Hash:一个键值(key=>value)对集合 List:简单的字符串列表 Set:string类型的无序集合 Zset:每个元素都会关联一个double类型的分数,redis通过分数来为集合中的成员进行从小到大的排序 Redis基本命令 Key: set, get, delete Hash: hmset, hget, hdel List: lpush, lindex Set: sadd,smembers Zset: zadd,

  • Redis如何存储对象

    目录 Redis存储对象 首先引入依赖 创建一个Jedis实例 方式一:将对象转化为JSON字符串存入redis 方式二:将对象序列化后存到redis 方式三:将对象用Hash数据类型存储 Redis可以存储java对象吗 答案:是可以 Redis存储对象 在以往面试中,多次被问到Redis怎么存储对象,我支支吾吾半天回答不上来,毕竟我只用过String类型,为了避免以后的尴尬,今天花点时间来整理一下. 本人用的Jedis客户端 首先引入依赖         <dependency>    

  • Redis对象与redisObject超详细分析源码层

    目录 一.对象 二.对象的类型及编码 redisObject 结构体 三.不同对象编码规则 四.redisObject结构各字段使用范例 4.1 类型检查(type字段) 4.2 多态命令的实现(encoding) 4.3 内存回收和共享对象(refcount) 4.4 对象的空转时长(lru) 五.对象在源码中的使用 5.1 字符串对象 5.1.1字符串对象创建 5.1.2 字符串对象编码 5.1.3 字符串对象解码 5.1.4 redis对象引用计数及自动清理 六.总结 以下内容是基于Red

随机推荐