Redis 简介与数据类型介绍

news2025/6/15 17:15:42

目录

​编辑

一、Redis是什么?

二、redis五大基本类型

2.1 String(字符串)

2.1.1 应用场景

1)缓存功能

 2)计数器

 3)统计多单位的数量

 4)共享用户session

 2.2 List(列表)

 2.2.1 应用场景

 1)消息队列

 2)文章列表或者数据分页展示的应用。

 2.3 Set(集合)

2.3.1 应用场景

 1)标签

 2)共同好友功能,共同喜好,或者可以引申到二度好友之类的扩展应用。

 3)统计网站的独立IP。

 2.4 ZSet(有序集合)

 2.4.1 应用场景

 1)排行榜

 2)用Sorted Sets来做带权重的队列。

 2.5 Hash(哈希)

 2.5.1 应用场景

 1)存储关系型数据库中表记录。

 2)经常被用来存储用户相关信息。

三、Redis三大特殊数据类型

3.1 geospatial(地理位置)

3.1.1 解析说明

3.1.2 应用场景

 1)查看附近的人

 2)微信位置共享

 3)地图上直线距离的展示

 3.2 Hyperloglog(基数)

 3.2.1 解析说明

 3.2.2 应用场景

 1)网页统计UV

 3.3 Bitmaps(位存储)

 3.3.1 解析说明

 3.3.2 应用场景

 1)两种状态的统计


一、Redis是什么?

Redis (Remote Dictionary Server),即远程字典服务。

是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis是一个开源,内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。

二、redis五大基本类型

2.1 String(字符串)

1.String类型是redis的最基础的数据结构,也是最经常使用到的类型。
  而且其他的四种类型多多少少都是在字符串类型的基础上构建的,所以String类型是redis的基础。
2.String 类型的值最大能存储 512MB,这里的String类型可以是简单字符串、
  复杂的xml/json的字符串、二进制图像或者音频的字符串、以及可以是数字的字符串

2.1.1 应用场景

1)缓存功能

String字符串是最常用的数据类型,不仅仅是redis,各个语言都是最基本类型,因此,利用redis作为缓存,配合其它数据库作为存储层,利用redis支持高并发的特点,可以大大加快系统的读写速度、以及降低后端数据库的压力。

 2)计数器

许多系统都会使用redis作为系统的实时计数器,可以快速实现计数和查询的功能。而且最终的数据结果可以按照特定的时间落地到数据库或者其它存储介质当中进行永久保存。

 3)统计多单位的数量

eg,uid:gongming count:0 根据不同的uid更新count数量。

 4)共享用户session

用户重新刷新一次界面,可能需要访问一下数据进行重新登录,或者访问页面缓存cookie,这两种方式做有一定弊端,1)每次都重新登录效率低下 2)cookie保存在客户端,有安全隐患。这时可以利用redis将用户的session集中管理,在这种模式只需要保证redis的高可用,每次用户session的更新和获取都可以快速完成。大大提高效率。

 2.2 List(列表)

1.list类型是用来存储多个有序的字符串的,列表当中的每一个字符看做一个元素
2.一个列表当中可以存储有一个或者多个元素,redis的list支持存储2^32次方-1个元素。
3.redis可以从列表的两端进行插入(pubsh)和弹出(pop)元素,支持读取指定范围的元素集,
  或者读取指定下标的元素等操作。redis列表是一种比较灵活的链表数据结构,它可以充当队列或者栈的角色。
4.redis列表是链表型的数据结构,所以它的元素是有序的,而且列表内的元素是可以重复的。
  意味着它可以根据链表的下标获取指定的元素和某个范围内的元素集。

 2.2.1 应用场景

 1)消息队列

reids的链表结构,可以轻松实现阻塞队列,可以使用左进右出的命令组成来完成队列的设计。比如:数据的生产者可以通过Lpush命令从左边插入数据,多个数据消费者,可以使用BRpop命令阻塞的“抢”列表尾部的数据。

 2)文章列表或者数据分页展示的应用。

比如,我们常用的博客网站的文章列表,当用户量越来越多时,而且每一个用户都有自己的文章列表,而且当文章多时,都需要分页展示,这时可以考虑使用redis的列表,列表不但有序同时还支持按照范围内获取元素,可以完美解决分页查询功能。大大提高查询效率。

 2.3 Set(集合)

1.redis集合(set)类型和list列表类型类似,都可以用来存储多个字符串元素的集合。
2.但是和list不同的是set集合当中不允许重复的元素。而且set集合当中元素是没有顺序的,不存在元素下标。
3.redis的set类型是使用哈希表构造的,因此复杂度是O(1),它支持集合内的增删改查,
  并且支持多个集合间的交集、并集、差集操作。可以利用这些集合操作,解决程序开发过程当中很多数据集合间的问题。

2.3.1 应用场景

 1)标签

比如我们博客网站常常使用到的兴趣标签,把一个个有着相同爱好,关注类似内容的用户利用一个标签把他们进行归并。

 2)共同好友功能,共同喜好,或者可以引申到二度好友之类的扩展应用。

 3)统计网站的独立IP。

利用set集合当中元素不唯一性,可以快速实时统计访问网站的独立IP。

 2.4 ZSet(有序集合)

redis有序集合也是集合类型的一部分,所以它保留了集合中元素不能重复的特性,但是不同的是,
有序集合给每个元素多设置了一个分数,利用该分数作为排序的依据。

 2.4.1 应用场景

 1)排行榜

有序集合经典使用场景。例如视频网站需要对用户上传的视频做排行榜,榜单维护可能是多方面:按照时间、按照播放量、按照获得的赞数等。

 2)用Sorted Sets来做带权重的队列。

比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。

 2.5 Hash(哈希)

redis有序集合也是集合类型的一部分,所以它保留了集合中元素不能重复的特性,但是不同的是,
有序集合给每个元素多设置了一个分数,利用该分数作为排序的依据。

 2.5.1 应用场景

 1)存储关系型数据库中表记录。

由于hash数据类型的key-value的特性,用来存储关系型数据库中表记录,是redis中哈希类型最常用的场景。一条记录作为一个key-value,把每列属性值对应成field-value存储在哈希表当中,然后通过key值来区分表当中的主键。

 2)经常被用来存储用户相关信息。

优化用户信息的获取,不需要重复从数据库当中读取,提高系统性能。

三、Redis三大特殊数据类型

3.1 geospatial(地理位置)

3.1.1 解析说明

1.geospatial将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。
  这些数据将会存储到sorted set这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作。
2.sorted set使用一种称为Geohash的技术进行填充。经度和纬度的位是交错的,以形成一个独特的52位整数。
  sorted set的double score可以代表一个52位的整数,而不会失去精度。(有兴趣的同学可以学习一下Geohash技术,使用二分法构建唯一的二进制串)
3.有效的经度是-180度到180度
  有效的纬度是-85.05112878度到85.05112878度

3.1.2 应用场景

 1)查看附近的人

 2)微信位置共享

 3)地图上直线距离的展示

 3.2 Hyperloglog(基数)

 3.2.1 解析说明

hyperloglog 是用来做基数统计的,其优点是:输入的提及无论多么大,hyperloglog使用的空间总是固定的12KB ,利用12KB,它可以计算2^64个不同元素的基数!非常节省空间!但缺点是估算的值,可能存在误差。其底层利用了伯努利试验的研究理论。

 3.2.2 应用场景

 1)网页统计UV

浏览用户数量,同一天同一个ip多次访问算一次访问,目的是计数,而不是保存用户。

传统的方式,set保存用户的id,可以统计set中元素数量作为标准判断。

但如果这种方式保存大量用户id,会占用大量内存,我们的目的是为了计数,而不是去保存id。

 3.3 Bitmaps(位存储)

 3.3.1 解析说明

Redis提供的Bitmaps这个“数据结构”可以实现对位的操作。Bitmaps本身不是一种数据结构,实际上就是字符串,但是它可以对字符串的位进行操作。
可以把Bitmaps想象成一个以位为单位数组,数组中的每个单元只能存0或者1,数组的下标在bitmaps中叫做偏移量。单个bitmaps的最大长度是512MB,即2^32个比特位。

 3.3.2 应用场景

 1)两种状态的统计

两种状态的统计都可以使用bitmaps,例如:统计用户活跃与非活跃数量、登录与非登录、上班打卡等等。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

07 redux的使用

总结 一.reduxjs/toolkit使用 1.1安装 安装: npm install reduxjs/toolkit在src目录中的store目录中的index.js中添加 1.2导入包中的对象 导入包中的对象 import { createSlice, configureStore } from reduxjs/toolkit1.3创建切片对象 创建切片对象 //这个…

霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)

1.车道线识别 当使用霍夫变换进行车道线识别时,可以按照以下步骤来编写 MATLAB 代码: 读入图像:使用imread函数读取包含车道线的图像。image = imread(lane_image.jpg);图像预处理:为了减少噪音和突出车道线,可以对图像进行预处理。通常,可以采用以下步骤:将图像转换为…

kafka入门,Kafka Broker工作流程、Broker重要参数(十一)

Zookeeper 存储的 Kafka 信息 在zookeeper的服务端存储的Kafka相关信息 1)/kafka/brokers/ids [0,1,2] 记录有哪些服务器 2)/kafka/brokers/topics/first/partitions/0/state 记录谁是leader,有哪些服务器可用 3)/kafka/controller 辅助选举l…

Java中的「接口」到底是什么?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言什么是接口接口的定…

浅浅的复习一下sql

DISTINCT 语法: SELECT DISTINCT 列名称 FROM 表名称1、现在有一个表如下: 2、执行sql语句-1 SELECT DISTINCT ename,email FROM emp 结果: 说明:由于小刘的ename和email重复了,所以结果只显示一次! 3…

面试最爱问的浏览器的缓存机制问题

老规矩,想要了解学会一项技术,先从定义下手! 浏览器的缓存的定义 浏览器的缓存是指浏览器在处理网络资源时,将这些资源存储在本地磁盘或内存中,并在后续的请求中重复使用这些缓存的资源。它旨在提高网页加载速度、减少…

AI画图——十二生肖

适当放下代码,有益身心健康。 AI绘画,码农必备,超解压。 多少没被和谐算多少~~~ 子鼠 丑牛 寅虎 卯兔 辰龙 巳蛇 午马 未羊 申猴 酉鸡 戌狗 亥猪

在期刊的参考文献中如何设置引用书中的一个章节

前言: 在bib文件中,使用book形式来引用书中的章节或文章。因为有些书籍是按照章节进行排列的,有些书籍收集了相关主题下的论文,当我们想要引用书中的要给章节或者书中的某篇文章的时候,我们该如何做呢? 下…

mysql不同隔离级别事务插入数据

文章目录 前言一、问题二、测试2.1.RR级别,mysql默认级别2.1.1 打开一个mysql窗口,事务A2.1.2 打开另一个窗口,事务B2.1.3 提交事务A,再看结果如下 2.2 READ-COMMITTED 级别下测试2.2.1修改数据库的my.ini文件修改隔离级别2.2.2 查…

国产MCU-CW32F030开发学习-OLED模块

国产MCU-CW32F030开发学习-OLED模块 硬件平台 CW32_48F大学计划板CW32_IOT_EVA物联网开发评估套件0.96 IIC oled模块 软件平台 Keil MDK 5.31IAR串口调试助手 IIC总线 处理器和芯片间的通信可以形象的比喻成两个人讲话:1、你说的别人得能听懂:双…

【AUTOSAR】AUTOSAR开发工具链(五)----polyspace-bug-finder 简单操作说明

1、打开polyspace-bug-finder,新建工程文件:File New Project,命名,选择保存路径,然后点击Next。 2、找到需要检测的文件,然后点击“Add Source Files” Finish 3、在Configuration左边窗口点击“…

HotSpot 虚拟机对象探秘

HotSpot 虚拟机对象探秘 对象的内存布局 在 HotSpot 虚拟机中,对象的内存布局分为以下 3 块区域: 对象头(Header) 实例数据(Instance Data) 对齐填充(Padding) 对象头 对象头记录了…

FreeRTOS_调度器开启和任务相关函数详解

目录 前言 1. 调度器开启过程分析 1.1 指令集 1.2 任务调度器开启函数分析 1.2.1 内核相关硬件初始化函数分析 1.2.2 使能 FPU 函数分析 1.2.3 启动第一个任务 1.2.4 SVC 中断服务函数 1.2.5 空闲任务 2. 任务创建过程分析 2.1 任务创建函数分析 2.2 任务初始化函…

K8S之可用年限修改

K8S之可用年限修改 1. 查看证书有效期: [rootmaster1 kubernetes]# kubeadm alpha certs check-expiration由上图可见,除了ca根证书,其他证书有效期都是1年。 2. go环境部署: //下载go二进制包 wget https://studygolang.com/…

基于matlab使用 HOG 功能和多类 SVM 分类器对数字进行分类(附源码)

一、前言 此示例说明如何使用 HOG 功能和多类 SVM 分类器对数字进行分类。 对象分类是许多计算机视觉应用中的一项重要任务,包括监控、汽车安全和图像检索。例如,在汽车安全应用程序中,您可能需要将附近的对象分类为行人或车辆。无论要分类…

CentOS Linux的最佳替代方案(一)_Rocky Linux OS 8.6基础安装教程

CentOS Linux的最佳替代方案(一)_Rocky Linux OS 8.6基础安装教程 一 Rocky Linux介绍和发展历史 Rocky Linux 官网:https://rockylinux.org/ 在CentOS官方宣布停止Centos的维护之后,Centos的创始人Gregory Kurtzer宣布启动新的…

2023年上半年部分团队的总结

(目前还是草稿版本) 写作,慢思考: 软件团队每天有繁忙的工作,有很多待办事项,会议,口头交流,线上的 bug 要处理,报表要生成和解释… … 一个月过去了,正想总…

数字化远传表计实验的记录

国网去年4月份出了一个《智慧变电站技术规范第 4 部分:数字化远传表计(试行版)》,对SF6数字化密度表、避雷器数字化泄漏电流表、变压器数字化油温计等设备数据通信做了要求。数字化感知单元与监测模块之间宜采用有线通信方式&…

深度学习:什么是多层感知机(神经网络)

文章目录 1.神经网络2.反向传播算法3.激活函数4.损失函数5.神经网络的使用场景参考 1.神经网络 神经网络是一种计算模型,它受到人脑神经元之间连接和信息处理方式的启发。它由许多简单的处理单元(称为神经元或节点)组成,并通过这…

innovus/ICC2:如何copy metal shape/via

如题,两家工具复制metal shape和via都可以用快捷键C,其中innovus还支持在复制过程中按"F3",调整复制的次数。 这里主要说一下命令: ICC2: copy_objects -x_pitch/y_pitch $pitch \ -x_times/-y_times $times \ [get_selection]/[get_shapes xx]/[get_v…