首页
学习
活动
专区
圈层
工具
发布

Redis存对象和存Json的思考

前言日常使用的还是很多的,经常会用radis存储一些json数据,对象数据,但是这样偶然间会发现不同的项目根据习惯的使用不同,有些人喜欢存对象,有些人喜欢存json。...其实存json和存对象本质上到redis这边而言,它都是进行一个字符串的存储,只是会多一个类路径,然后就操作方面的区别。存储逻辑在Redis中存储对象和存储JSON数据都是常见的用法。1....存储对象:您可以将对象序列化为字节流(如pickle序列化)然后存储在Redis中。这样做可以保留对象的结构和类型信息,但在存储和检索时可能需要更多的处理。...在Python中,您可以使用pickle或其他序列化库来序列化对象。2. 存储JSON:另一种常见的方法是将数据转换为JSON格式,然后存储在Redis中。...存对象有下面这张图可以看出。下图存的是一个对象,但是它里面却包含了一个文件的路径。存对象的优点缺点在日常的存对象当中,发现不需要像json字符串一样需要进行反序化,反序列化来反序列化去。

1.7K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Redis是否可以存图片、视频?

    那Redis同样也是Json类型的远程数据字典服务器,也可以用于存储图片、视频。实际Redis可以用512MB的空间存储用于存储字符串型的数据。...虽然技术上可以这么做,但Redis原本就是内存型数据库,用于存储图片、视频是非常不划算的。建议多利用HDFS、NAS、对象存储等分布式的云存储系统。 二、Redis如何存储真实对象的名称?...我一直有个好奇,Redis采用key区分不同的数据,面临复杂的网页、程序,如何进行数据的编号。 Redis有默认的数据编码规则。...user:1:friend user是class名,1是对象名,friend是对象的属性。通过该方式,向Redis中存放、读取数据,将使key具有可读性。...三、Redis是否支持主从复制、数据分片?

    10.7K20

    【Redis】RedisObject 对象

    Redis 构建了自己的类型系统, 这个系统的主要功能包括: redisObject 对象。 基于 redisObject 对象的类型检查。 基于 redisObject 对象的显式多态函数。...RedisObject /* * Redis 对象 */ typedef struct redisObject { // 类型 记录了对象所保存的值的类型 unsigned type...所以它们的值无须进行共享; 另一方面, 如果某个命令的输入值是一个小于 REDIS_SHARED_INTEGERS 的整数对象, 那么当这个对象要被保存进数据库时, Redis 就会释放原来的值, 并将值的指针指向共享对象...引用计数以及对象的销毁 总结 Redis 使用自己实现的对象机制来实现类型判断、命令多态和基于引用计数的垃圾回收。 一种 Redis 类型的键可以有多种底层实现。...Redis 会预分配一些常用的数据对象,并通过共享这些对象来减少内存占用,和避免频繁地为小对象分配内存

    70830

    Redis之SpringDataRedis对象写入到Redis中

    业务场景中经常遇到使用Redis作为缓存,而将对象写入Redis更是常见的。...下面来看下,对象写入Redis的俩种方式(我之前就知道除了JDK,还有其它的诸如Jackson提供序列化功能,但是JDK之外的其它第三方在方序列化的时候提供目标对象class,不过今天我发现Spring-data-redis...后,对象被转换为json字符串,同时,还有额外的"@class"字段表示对象类型。...看到这个"@class",应该明白了,这个在方序列化的时候用到,由于在序列化写入Redis的时候就将对象类型写入到Redis了,所以方序列化的时候不需要提供目标对象class。...Redis中时,该选择JDK方式还是Jackson方式,我会选择使用Jackson的方式,why,因为JDK序列化方式很大的一个限制就是要求对象必须实现Serializable,而且是递归的(比如类A有个属性类

    1.3K30

    Redis对象类型、对象编码及对应关系

    摘要 1、 Redis数据库中保存的键值对,键总是一个字符串对象,而值可以是字符串对象、列表对象、哈希对象、集合对象、有序集合对象; Redis对象 Redis中对象都是由RedisObject结构表示...其他 } robj; 类型 RedisObject对象的属性"type"记录了对象的类型,也就是常说的Redis支持的5种数据类型; 类型常量 对象的名称 type命令输出 REDIS_STRING 字符串对象..."string" REDIS_LIST 列表对象 "list" REDIS_HASH 哈希对象 "hash" REDIS_SET 集合对象 "set" REDIS_ZSET 有序集合对象 "zset"..._ RAW 使用简单动态字符串实现的字符串对象 REDIS_LIST REDIS_ENCODING_ZIPLIST 使用压缩列表实现的列表对象 REDIS_LIST REDIS_ENCODING_...使用字典实现的哈希对象 REDIS_SET REDIS_ENCODING_INTSET 使用整数集合实现的集合对象 REDIS_SET REDIS_ENCODING_HT 使用字典实现的集合对象

    92720

    Redis数据结构——对象

    1、Redis数据结构——简单动态字符串-SDS 2、Redis数据结构——链表-linkedlist 3、Redis数据结构——字典-hashtable 4、Redis数据结构——整数集合-intset...5、Redis数据结构——跳跃表-skiplist 6、Redis数据结构——压缩列表-ziplist 跳跃表深入理解 redis 使用对象来表示数据库中的键和值,即每新建一个键值对,至少创建两个对象...除此之外,redis的对象系统还实现了基于引用计数技术的内存回收机制,当程序不再使用某个对象的时候,这个对象所占用的内存就会被自动释放;另外,redis还通过引用计数技术实现了对象共享机制,这一机制可以在适当条件下...1、对象的类型与编码 redis使用对象来表示数据库中的键和值,每次当我们在redis 的数据库中新创建一个键值对时,我们至少会创建两个对象,一个对象用作键值对的键,另一个对象用于键值对的值。...双向链表 REDIS_ENCODING_ZIPLIST 压缩列表 REDIS_ENCODING_INTSET 整数集合 REDIS_ENCODING_SKIPLIST 跳跃表和字典 每种类型的对象都至少使用了两种不同的编码

    84010

    Redis:10---List对象

    一、列表对象概述 列表类型是用来存储多个有序的字符串,一个列表最多可以存储多个元素。...source-key列表中弹出位于最右端 元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这个元素,如果source-key 为空,那么在timeout秒之内阻塞并等特可弹出的元素出现 在Redis...压缩列表):当列表的元素个数小于list-max-ziplist-entries配置 (默认512个),同时列表中每个元素的值都小于list-max-ziplist-value配置时 (默认64字节),Redis...会选用ziplist来作为列表的内部实现来减少内存的使 用 linkedlist(链表):当列表类型无法满足ziplist的条件时,Redis会使用 linkedlist作为列表的内部实现。...四、使用场景 ①消息队列 如下图所示,Redis的lpush+brpop命令组合即可实现阻塞队列,生产者客户端使用lrpush从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞式的“抢”列表尾部的元素

    1.7K20

    《闲扯Redis十一》Redis 有序集合对象底层实现

    备注: 本节中涉及到的跳跃表实现,已经在上节《闲扯Redis十》Redis 跳跃表的结构实现一文中详情分析过,本文中将直接引用,不再赘述。...例如,如果我们执行以下 ZADD 命令, 那么服务器将创建一个有序集合对象作为 price 键的值: redis> ZADD price 8.5 apple 5.0 banana 6.0 cherry...1.以下情况展示了有序集合对象因为包含了过多元素而引发编码转换: # 对象包含了 128 个元素 redis> EVAL "for i=1, 128 do redis.call('ZADD', KEYS...ziplist" # 再添加一个新元素 redis> ZADD numbers 3.14 pi (integer) 1 # 对象包含的元素数量变为 129 个 redis> ZCARD numbers...(integer) 129 # 编码已改变 redis> OBJECT ENCODING numbers "skiplist" 2.以下情况展示了有序集合对象因为元素的成员过长而引发编码转换: #

    1.3K32

    非结构化数据怎么存?——开源对象存储方案介绍

    毫无疑问,对象存储才是最佳的解决方案。 什么是对象存储 对象存储,是一种扁平结构,其中文件被分解成碎片并分散在硬件中。...在对象存储中,数据被分成称为对象的离散单元并保存在单个存储库中,而不是作为文件夹中的文件或服务器上的块保存。 比如阿里云对象存储就是基于对象存储提高的服务。...对象(Object)是OSS存储数据的基本单元,也被称为OSS的文件。对象由元信息(Object Meta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。...对象元信息是一组键值对,表示了对象的一些属性,例如最后修改时间、大小等信息,同时您也可以在元信息中存储一些自定义的信息。...存储空间(Bucket)是您用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。

    5.5K10

    非结构化数据怎么存?——开源对象存储方案介绍

    毫无疑问,对象存储才是最佳的解决方案。 什么是对象存储 对象存储,是一种扁平结构,其中文件被分解成碎片并分散在硬件中。...在对象存储中,数据被分成称为对象的离散单元并保存在单个存储库中,而不是作为文件夹中的文件或服务器上的块保存。 比如阿里云对象存储就是基于对象存储提高的服务。...对象(Object)是OSS存储数据的基本单元,也被称为OSS的文件。对象由元信息(Object Meta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。...对象元信息是一组键值对,表示了对象的一些属性,例如最后修改时间、大小等信息,同时您也可以在元信息中存储一些自定义的信息。...存储空间(Bucket)是您用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。

    3K10

    Redis源码学习之列表对象

    列表对象的底层实现可以是【压缩列表】或者【双端链表】,Redis会通过用户对于压缩列表单个节点值长度(list_max_ziplist_value)和键值对个数(list_max_ziplist_entries...一.压缩列表编码 当Redis创建列表对象时,默认选择的实现方式是压缩列表结构,如push操作的底层实现方法: 可以看到lobj通过createZiplistObject方法创建一个指向空压缩列表的对象...这需要下列条件: 这里会有一个疑问,为什么对于INT编码的字符串对象不做长度检查,看了之前文章的同学应该了解,INT编码的字符串对象本身已经保证其长度不会太大,因此也不需要再检验了。...但是我们都知道Redis是单进程单线程实现的,那么它是如何实现这种阻塞操作的呢?...而在Redis的处理命令的方法processCommand中(这里涉及到Redis的事件处理模型,后面还会细说): 会通过检测sever.ready_keys列表来决定是否需要处理阻塞客户端,而之后的操作就很明了了

    1.1K20
    领券