简介

根据 官网文档 的解释,可以了解 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 数据类型最大支持存储 \(2^{32} - 1\)(约 42 亿) 个元素。

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

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

Set

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

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

同 List 数据类型一样,Set 数据类型最大支持存储 \(2^{32} - 1\)(约 42 亿) 个元素。

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

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

Hash

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

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

每个 Hash 数据类型最多可以存储 \(2^{32} - 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 数据类型上的面向位的操作,其最大的优点是当存储信息时可以节省极大的空间。

Redis - 基础数据类型的更多相关文章

  1. Redis 基础数据类型重温

    有一天你突然收到一条线上告警:Redis 内存使用率 85%.你吓坏了赶紧先进行扩容然后再去分析 big key.等你进行完这一系列操作之后老板叫你去复盘,期间你们聊到了业务的数据存储在 Redis ...

  2. redis基础:redis下载安装与配置,redis数据类型使用,redis常用指令,jedis使用,RDB和AOF持久化

    知识点梳理 课堂讲义 课程计划 1. REDIS 入 门 (了解) (操作)   2. 数据类型 (重点) (操作) (理解) 3. 常用指令   (操作)   4. Jedis (重点) (操作) ...

  3. Redis基础(一)数据结构与数据类型

    Redis数据结构 Redis一共有六种数据结构,分别是简单动态字符串.链表.字典.跳表.整数集合.压缩列表. 简单动态字符串(SDS) Redis只会使用C字符串作为字面量,在大多数情况下,Redi ...

  4. Redis笔记(三)Redis的数据类型

    前面说过,Redis的一大特性是支持丰富的数据类型, 这为更多的应用场景提供了可能. Redis有五种数据类型,包括string,list,set,sorted set和hash,注意,Redis的数 ...

  5. Redis基础知识之—— 缓存应用场景

    转载原文:http://www.cnblogs.com/jinshengzhi/articles/5225718.html 一.MySql+Memcached架构的问题 Memcached采用客户端- ...

  6. windows下使用redis,Redis入门使用,Redis基础命令

    windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...

  7. [.net 面向对象程序设计深入](14)Redis——基础

    [.net 面向对象程序设计深入](14)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...

  8. Redis基本数据类型

    -------------------Redis基本数据类型------------------- 1.String 字符串     1.概念         1.String 是redis最基本的类 ...

  9. Redis五大数据类型的常用操作

    在上一篇博文<centos安装redis>中,已经详细介绍了如何在centos上安装redis,今天主要介绍下Redis五大数据类型及其五大数据类型的相关操作. Redis支持五种数据类型 ...

  10. [.net 面向对象程序设计深入](36)Redis——基础

    [.net 面向对象程序设计深入](36)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...

随机推荐

  1. 给定两个字符串,均只包含英文字母,需区分大小写,一个是源字符串SS(长度<1000), 另一个是目标字符串TS(长度<1000),请问能否通过删除SS中的字符(不改变顺序)将它变换成TS,如果可以输出“YES",不可以则输出“NO"。 输入说明:第一行为源字符串SS,第二行为目标字符串TS。

    import java.util.Scanner;/*    给定两个字符串,均只包含英文字母,需区分大小写,一个是源字符串SS(长度<1000),    另一个是目标字符串TS(长度<1 ...

  2. 20211306 《Python程序设计》实验三报告

    学号 20211306 <Python程序设计>实验三报告 课程:<Python程序设计> 班级: 2113 姓名: 丁文博 学号:20211306 实验教师:王志强 实验日期 ...

  3. Java 基础(二)

    类的初始 类中包括:属性,方法. 快速使用 我们都是人,而人的共同特点有很多. 比如:名字,年龄,性别,吃饭,睡觉... // 定义类 public class Person { // 定义属性 St ...

  4. 数论之GCD+LCM+扩展欧几里得

    最大公约数GCD 整数a和b的最大公约数记为gcd(a,b) <1 经典的欧几里得算法,辗转相除法 int gcd(int a, int b){ return b == 0 ? a : gcd( ...

  5. 安装pytorch时install的packages

  6. 3月1日Android开学学习

    Android开发的简单控件 1.文本显示 2.视图基础 3.常用布局 4.按钮触控 5.图像显示 文本显示 (1)设置文本内容 1.在XML文件中通过属性Android:text设置文本 Andro ...

  7. PLC入门笔记4

    逻辑指令及其应用 基本逻辑指令 续电器 PLC 公式 扩展逻辑指令 1.置位和复位线圈 置位ON/复位OFF (SET/RST) 不推荐置位复位线圈  可以用更好的方式去表达.. 2.能流取反开关 取 ...

  8. Nginx系列---【配置文件中静态资源文件禁止通过目录查看】

    配置文件中静态资源文件禁止通过目录查看 1.问题 nginx作为文件服务器时,默认是可以通过目录路径查看该目录下的所有文件的,这样很不安全,容易造成静态资源泄露. 2.方案 location /ima ...

  9. ACwing语法基础课第一节课例题与习题及个人总结

    第一次课例题 若涉及到浮点数的计算,float一般是6到7位有效数字,double一般是15到16位有效数字,但是为了方便起见,建议直接设为double,因为若涉及浮点数的乘除运算,使用float类型 ...

  10. django_模板层的过滤器和继承

    **************************************************************************************************** ...