IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis键值类型<key value> 以及键的使用注意事项 -> 正文阅读

[大数据]Redis键值类型<key value> 以及键的使用注意事项

Redis的常用键值对

Redis的键值对

Redis不是简单的键值(Key-Value)存储,它实际上是一个支持不同类型值的数据结构服务器。在传统键值存储中,一般将字符串键与字符串值相关联,而在Redis中,该值不仅限于简单的字符串,还可以容纳更复杂的数据结构。




Redis-Key

Redis的键(Key)是二进制安全的字符串,这意味着可以使用任何二进制序列作为key,从“ foo”之类的字符串到JPEG文件的内容,同时空字符串也是有效的key键。

在Redis的底层中由SDS实现。

设置键的注意点

  • key使用的字节不宜过长:太长的key字节,在内存方面不仅是个负担,并且在数据集中查找key时可能需要进行一些代价高昂的密钥比较。

  • key也不宜设置太短:与“ user:1000:followers”对比,“ u1000flw”写为key毫无意义,前者往往更具可读性。且与键对象本身和值对象使用的空间相比,单单添加key消耗的空间更少。

  • key使用同一种设置类型:例如,“ object-type:id”是一个好主意,例如“ user:1000”。点或破折号通常用于多字字段,例如“ comment:1234:reply.to”或“ comment:1234:reply-to”中。

  • 允许的最大key大小为512 MB




Redis-Value

Redis的值(Value)支持以下几种类型

  • Binary-safe strings:二进制安全字符串。

  • Lists:根据插入顺序排序的字符串元素的集合。它们基本上是链表

  • Sets:唯一,未排序的字符串元素的集合。

  • Sorted sets:类似于集合,但是每个字符串元素在存入时都将于一个浮点数值的分数相关联,元素总是按照它们的分数排序,因此与Sets不同,可以检索一系列元素

  • Hashes:键值组成的哈希映射,键值都是字符串。

  • Bit arrays (or simply bitmaps):可以使用特殊命令像位数组一样处理字符串值:可以设置和清除单个位,计数所有设置为1的位,找到第一个设置或未设置的位,等等。

  • HyperLogLogs:这是一个概率数据结构,用于估计集合的基数。

  • Streams:提供抽象日志数据类型的类地图项的仅追加集合。


redis值的内部实现结构如下

type类型encoding编码ptr指向的数据结构
REDIS_STRINGREDIS_ENCODING_INT整数值的实现的字符串对象
REDIS_STRINGREDIS_ENCODING_EMBSTRembstr编码的sds实现的字符串对象
REDIS_STRINGREDIS_ENCODING_RAWsds字符串实现的字符串对象
REDIS_LISTREDIS_ENCODING_ZIPLIST压缩列表实现
REDIS_LISTREDIS_ENCODING_LINKEDLIST链表实现
REDIS_HASHREDIS_ENCODING_ZIPLIST压缩表实现
REDIS_HASHREDIS_ENCODING_HT字典实现
REDIS_SETREDIS_ENCODING_INTSET整数集合实现
REDIS_SETREDIS_ENCODING_HT字典实现
REDIS_ZSETREDIS_ENCODING_ZIPLIST压缩表实现
REDIS_ZSETREDIS_ENCODING_SKIPLIST跳跃表和字典实现




Redis值的常用数据类型

  1. 字符串:String

Redis字符串类型是与Redis键关联的最简单的值类型。它也是Memcached中唯一的数据类型。

值是二进制安全的字符串,意味着redis的string可以包含任何数据。比如jpg图片或者序列化的对象。值最大能存储512 MB的数据。


  1. 列表:List

redis是由双向链表(Linked List)的方式实现,而非数组形式。它能从链表的头尾进行操作。它是根据插入的顺序进行排序的有序列表。

列表的常用案例:记住用户发布到社交网络上的最新更新。频繁查看的日志。


  1. 集合:Set

set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

可以理解为一堆值不重复的列表,类似数学领域中的集合概念,且Redis也提供了针对集合的求交集、并集、差集等操作。


  1. 有序集合:Sorted Set

Redis有序集合类似Redis集合,不同的是增加了一个功能,即集合是有序的。一个有序集合的每个成员带有分数,用于进行排序。

Redis有序集合添加、删除和测试的时间复杂度均为O(1)(固定时间,无论里面包含的元素集合的数量)。列表的最大长度为2^32- 1元素(4294967295,超过40亿每个元素的集合)。

Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。


  1. 哈希表:Hash

对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。

每个 hash 可以存储 2^32 -1 键值对(40多亿)。




参考:

Redis Documentation

Redis维基百科

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 10:53:18  更:2022-07-03 10:54:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 1:53:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码