Redis - 基础数据类型

简介

根据 官网文档 的解释,可以了解 Redis 基础数据类型的一些基本信息:

对于 Redis 来说,存储的 key 值都是字符串类型,讨论数据类型的时候,指的都是存储的 value 值。这里主要是包括 5 种数据类型:String、List、Set、Hash、SortedSet。

如果想要了解 Redis 基础数据类型支持的命令,可以查看 官方文档,筛选对应数据类型即可。

String

String 是最基本的 Redis 数据类型,其是二进制安全的,这表示 String 可以存储任何类型的数据,如字符串、数字、图片、序列化对象等等。

官方文档 提供了部分对 String 数据类型的说明,具体 String 数据类型支持的命令也可以通过访问 这里 查看。

有一点需要注意,String 数据类型最高支持存储 512MB 长度的数据。

通常情况,String 数据类型会使用在以下场景:

  • 数据缓存:直接存储字符串、序列化数据、图片、视频等数据
  • 计数器:使用 INCRBY 这样的增量命令实现原子计数器
  • 分布式锁:使用多参数的 SET 命令实现分布式锁

List

Redis 的 List 数据类型是一个双端链表,因此 List 随机存取的效率比较低,不过可以像使用链表一样实现链式栈、链式队列等功能。

官方文档 提供了部分对 List 数据类型的说明,具体 List 数据类型支持的命令也可以通过访问 这里 查看。

有一点需要注意,List 数据类型最大支持存储 232−1(约 42 亿) 个元素。

通常情况,List 数据类型会使用在以下场景:

  • 栈:联合使用 LPUSH 命令和 LPOP 命令即可实现栈
  • 队列:联合使用 LPUSH 命令和 RPOP 命令即可实现队列
  • 有限集合:联合使用 LPUSH 命令和 LTRIM 命令即可实现有限集合
  • 消息队列:联合使用 LPUSH 命令和 BRPOP 命令即可实现延时消息队列

Set

Set 是一个无序不重复集合,并且现有命令实现集合的交集、并集、差集等功能,但频繁使用这些功能会影响 Redis 服务器的性能,建议谨慎使用。

官方文档 提供了部分对 Set 数据类型的说明,具体 Set 数据类型支持的命令也可以通过访问 这里 查看。

同 List 数据类型一样,Set 数据类型最大支持存储 232−1(约 42 亿) 个元素。

通常情况,Set 数据类型会使用在以下场景:

  • 标签:不同的标签存储在不同集合中,既可以查询是否存在相同标签,也可以聚合不同标签
  • 共同好友:不同用户的好友存储在不同集合中,使用交集可以得到共同好友
  • 独立 IP:利用 Set 的元素唯一性,可以快速实时统计网站的独立 IP

Hash

Redis 的 Hash 数据类型存储着字符串 field 和字符串 value 的映射关系,特别适合存储 key-value 结构。

官方文档 提供了部分对 Hash 数据类型的说明,具体 Hash 数据类型支持的命令也可以通过访问 这里 查看。

每个 Hash 数据类型最多可以存储 232−1(约 42 亿) 个键值对,实际上,Hash 数据类型仅受 Redis 所部署的内存限制。

通常情况,Hash 数据类型会使用在以下场景:

  • 数据缓存:对比于存储 JSON 字符串的 String 类型,Hash 更直观、更节省空间、更灵活

SortedSet

SortedSet 数据类型有点类似于 Set 数据类型,不同之处在于 SortedSet 数据类型支持按照给定的分数对数据进行排序。

SortedSet 中的集合通过哈希表实现,在实际使用中,添加、删除、查找的效率都非常高。

官方文档 提供了部分对 Hash 数据类型的说明,具体 Hash 数据类型支持的命令也可以通过访问 这里 查看。

大多数 SortedSet 操作的复杂度是 O(log(N)),其中 N 是成员数。部分批量查询命令的时间复杂度可以达到 O(log(N) + M),这里的 M 是返回的结果数。

通常情况,SortedSet 数据类型会使用在以下场景:

  • 排行榜:排行榜需要按照某个规则排序,将这个规则值存储成分数,即可实现排行榜的功能
  • 权重队列:通过将任务的权重存储成分数,工作线程可以按照分数的倒序来获取工作任务

其他数据类型

Redis 中最常见的数据类型就是 String、List、Set、Hash、SortedSet 这 5 种,也是最初支持的数据类型。

当然,Redis 也有一些不常见、却适用于特殊场景的数据类型,了解这些数据类型也是很必要的。

Stream 是 Redis 5.0 版本新增的数据类型,其本身类似于 append-only 日志。实际上给 Redis 的发布、订阅功能提供了持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。

Geospatial 是 Redis 3.2 版本新增的数据类型,此类型主要用于存储地理位置信息,并且 Redis 提供了常见的地理位置查询命令。

HyperLogLog 是 Redis 2.8.9 版本新增的数据类型,主要用于做基数统计的算法。其使用不超过 12 KB 的存储,且仅达到 0.81% 的标准错误率,应用场景也是十分特殊。

Bitmap 是 String 数据类型的扩展,是定义在 String 数据类型上的面向位的操作,其最大的优点是当存储信息时可以节省极大的空间。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/9332.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

签约喜讯 | Smartbi携手金域医学共建统一数据运营平台

近期,广州金域医学检验集团股份有限公司(以下简称“金域医学”)与思迈特软件达成签约合作, 双方将携手打造统一数据运营平台,统一各集成应用的入口,营造自主的数据应用氛围和文化,推广数据应用的…

Dart语言操作符?和!的用法

一.基本使用 1. ? 操作符跟在类型后面,表示当前变量可为null。 int a null; //这句代码在有空安全时,编译会提示错误如果想给一个变量赋值null要如何处理呢?只需要在类型 后面添加操作符?即可,eg: int? a null…

优思学院|《精益思想》读后感

最近重新读了丹尼尔T琼斯(Daniel T. Jones)的《精益思想》这本书,这是一本非常有趣的书,给了我很多启示。在这本书中,琼斯介绍了精益生产的概念,这是一种致力于通过消除浪费来提高效率和生产力的方法。 20…

( “树” 之 DFS) 104. 二叉树的最大深度 ——【Leetcode每日一题】

104. 二叉树的最大深度 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 返回它的最大深度 3 。 思路&am…

详细介绍别人电脑访问到自己电脑运行的项目

文章目录 让别人远程访问你的代码网站项目或临时演示你的项目给客户的方式详解 引言一、创建一个你想要别人访问的项目二、明确你想要将这个网站或者项目存放的地方 终端分类服务器设备WEB服务器三、部署我们的网页 本地部署流程进入浏览器输入网址访问获取本机的IP地址&#…

托福高频真词List12 // 附托福TPO阅读真题

目录 4.5单词 生词 熟词 真题 4.5单词 生词 irreversiblepermanentadj.无法挽回的,永久的manipulateskillfully usedhandlev.操控monumentalenormousgreat and significantadj.极大的🧸retardslowv.放缓🧸subsistencesurvivaln.生存 wit…

【C++】继承---上(继承的引入及使用详解、切片赋值和作用域)

前言: 我们在学习C的第一节课就了解到C是一门面向对象的语言,面向对象的语言有三大特性: 封装、继承、多态 此前我们学习了封装,比如模拟实现vector,string或者迭代器等,不仅有利于我们的维护和管理&#…

如何选择适合的企业网站建站方案?

企业网站建设是企业发展的重要组成部分,一份好的网站可以为企业带来更多的流量、更高的曝光度和更好的品牌形象,因此如何选择适合的企业网站建站方案就显得尤为重要。 那么,如何选择适合的企业网站建站方案呢?下面以一家小型企业…

【Linux】基础IO

基础文件IOC库的文件接口系统调用的文件接口文件描述符和文件流指针的关系重定向C库的文件接口 在c语言中,会使用fopen,fclose,fseek,fread,fwrite等函数进行文件IO的操作 以fopen函数举例 //FILE*表示文件流指针&am…

【微信小程序】-- 自定义组件 - 父子组件之间的通信(三十八)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…

Flutter 生命周期原理

一 这里看一下StatefulWidget的生命周期 其本身是由两个类组成的&#xff0c;StatefulWidget 和 State 组成的。 class DemoWidget extends StatefulWidget {const DemoWidget({super.key});overrideState<DemoWidget> createState() > _DemoWidgetState(); }class _…

Properties

Properties概述&#xff1a; 是一个Map体系的集合类 Properties可以保存到流中或从流中加载 练习&#xff1a;Properties作为Map集合的使用 package com.aynu13;//练习&#xff1a;Properties作为Map集合的使用import java.util.Properties; import java.util.Set;public cla…

单机最快的队列Disruptor解析和使用

前言 介绍高性能队列Disruptor原理以及使用例子。 Disruptor是什么? Disruptor是外汇和加密货币交易所运营商 LMAX group 建立高性能的金融交易所的结果。用于解决生产者、消费者及其数据存储的设计问题的高性能队列实现。可以对标JDK中的ArrayBlockingQueue。是目前单机且…

【JavaWeb】1—JavaWeb概述

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 如果文章对你有所帮助&#xff0c;可以点赞&#x1f44d;…

人工智能中的移动端编程

移动端编程是现在新兴的主要编程领域之一&#xff0c;该领域聚集了非常多的开发人员。这主要得益于手机和平板电脑的快速普及&#xff0c;人们以前需要在台式机上完成的事情&#xff0c;现在都可以非常方便地在手机或平板电脑上完成。由于手机和平板电脑携带更加方便&#xff0…

阿里云版GPT官宣,我们问了它10个问题

4月7日&#xff0c;阿里云宣布自研大模型“通义千问”&#xff0c;目前已开始邀请用户测试体验。 阿里达摩院在NLP自然语言处理等前沿科研领域早已布局多年&#xff0c;并于2019年启动大模型研发&#xff0c;通义千问便是其最新成果&#xff0c;相当于阿里云版的“ChatGPT”。 …

网络编程之输入ip地址解析不出来域名

网络编程之输入ip地址解析不出来域名 1.解决方案 设置本机的域名解析服务器 1. 查看域名的ip ping 域名 找到如下图路径下的hosts文件 赋予权限 添加域名和ip地址的对应关系。域名和ip之间采用空格隔开。 代码测试 代码详见&#xff1a;网络编程---实验2 查找Internet地址和用…

腾讯云轻量应用服务器16核32G28M处理器带宽流量性能测评

腾讯云轻量应用服务器16核32G28M带宽&#xff0c;28M带宽下载速度峰值可达3584KB/s&#xff0c;折合3.5M/秒&#xff0c;16核32G28M带宽3468元15个月&#xff0c;折合每月231元&#xff0c;系统盘为380GB SSD盘&#xff0c;免费6000GB月流量&#xff0c;折合每天200GB流量&…

系统集成项目管理工程师案例分析考点汇总(成本、质量、人力)

项目成本管理常见考点1. 成本估算、成本预算的步骤2. 成本估算、成本预算的区别与联系3. 成本估算困难或不准的原因4. 成本失控的原因5. 成本超支、进度落后采取的措施6. 成本超支、进度超前采取的措施项目质量管理常见考点1. 质量管理计划的内容2. 质量保证与质量控制的联系3.…
最新文章