Redis中的数据类型以及适用场景

news2024/11/23 17:04:57

1.Redis中的数据类型

Redis中的数据类型包括:String(字符串)、Hash(字典)、List(列表)、Set(集合)、Sorted Set【Zset】(有序集合)。

Redis 所有的数据结构都是一个key对应一个value,不同类型的数据结构之间的差异就在于value的结构不同,例如string数据类型,他的value就是一个字符串,list数据类型,他的value是一个链表。

排行榜应选用有序集合Zset,原因是排行榜既要去重,也要排序,用这种结构最为合适。

1.1 String

字符串 String 是 Redis 最简单的数据结构,可以存储字符串、整数或者浮点数。最常见的应用场景就是对象缓存,例如缓存用户对象,key是"userInfo"+#{用户ID},value是用户信息对象的JSON字符串。

Redis String使用场景

  • 缓存:像我们平时开发,经常会把一个对象转成json字符串,然后放到redis里缓存

  • 计数器:像博客文章的阅读量、评论数、点赞数等等

  • 分布式系统生成自增长ID

1.2 List

Redis 的列表相当于 Java 语言里面的 LinkedList。LinkedList优点:插入性能高,不管是从末尾插入还是中间插入LinkedList缺点:随机读性能差,例如LinkedList.get(10),这种操作,性能就很低,因为他需要遍历这个链表,从头开始遍历这个链表,直到找到index = 10的这个元素为止。

Redis List 使用场景

  • 异步队列

  • 任务轮询(RPOPLPUSH)

  • 文章列表(lrange key 0 9)

1.3 Hash

Redis的Hash结构相当于Java语言的HashMap,内部实现结构上与JDK1.7的HashMap一致,底层通过数据+链表实现。

Redis Hash 使用场景

  • 记录整个博客的访问人数(数据量大会考虑HyperLogLog,但是这个数据结构存在很小的误差,如果不能接受误差,可以考虑别的方案)

  • 记录博客中某个博主的主页访问量、博主的姓名、联系方式、住址

1.4 Set

Redis的set集合相当于Java的HashSet。Redis 中的 set 类型是一种无序集合,集合中的元素没有先后顺序。

补充:HashSet就是基于HashMap来实现的,HashSet,他其实就是说一个集合,里面的元素是无序的,他里面的元素不能重复的,HashMap的key是无顺序的,你插入进去的顺序,跟你迭代遍历的顺序是不一样的,而且HashMap的key是没有重复的,HashSet直接基于HashMap实现的。

Redis Set 使用场景

  • 微博抽奖:如果数据量不是特别大的时候,可以使用spop(移除并返回集合中的一个随机元素)或srandmember(返回集合中一个或多个随机数)

  • QQ标签:一个用户多个便签

  • 共同关注(交集)

  • 共同好友(交集)

1.5 Sorted Set

sorted set 有序集合,sorted set 增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,还可以通过 score 的范围来获取元素的列表。使得它类似于Java的TreeSet和HashMap的结合体。

Sorted set 使用场景

  • 排行榜

  • 订单支付超时(下单时插入,member为订单号,score为订单超时时间戳,然后写个定时任务每隔一段时间执行zrange)

总结

要结合实际项目仔细分析业务需求,根据数据类型适用场景不同做合适的选择。

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

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

相关文章

电子器件 电阻参数与选型

一、参数 电阻的主要参数有:精度、温度系数和功率三个 1.1 精度 一般有0.1%、1%,5%,10%,15%、25%等,一般精度越高价格也越高。有些场合需要使用高精度的电阻。 其中精度所代表的字母如下: L0.01%P0.02…

建行广东江门分行:科技赋能,数据助力纠“四风”

为进一步深化落实中央八项规定精神,持续加大“四风”问题查处力度,建行驻江门市分行纪检组根据《广东省分行贯彻落实中央八项规定精神持之以恒纠治“四风”实施方案》(建粤党发〔2023〕1号)安排,对驻在市分行开展“四风…

基于ssm实验室管理系统

功能如图所示 摘要 实验室管理系统(Laboratory Management System,简称LMS)是一种基于SSM(Spring、SpringMVC、MyBatis)框架的信息化工具,旨在帮助实验室管理者高效、精确地管理实验室资源、人员和实验数据…

详解Java的八种基本数据类型

目录 Java八种数据类型 注意: 四个大类 整型(byte、short、int、long) 注意 浮点型(float、double) 神奇的代码 注意: 字符型(char) 布尔型(boolean&#xff0…

CondaError: Downloaded bytes did not match Content-Length

问题 使用anaconda下载包文件时,出现了CondaError: Downloaded bytes did not match Content-Length的错误 CondaError: Downloaded bytes did not match Content-Lengthurl: https://conda.anaconda.org/pytorch/win-64/pytorch-2.1.0-py3.11_cuda11.8_cudnn8_0.…

Jmeter(十七):利用jmeter插件收集性能测试结果

利用jmeter插件收集性能测试结果 汇总报告(Summary Report ) 用来收集性能测试过程中的请求以及事务各项指标。通过监听器--汇总报告 可以添加该元件。界面如下图所示 汇总报告界面介绍: 所有数据写入一个文件:保存测试结果到本…

软件测试面试:支付功能如何测试?

前言 相信有很多的小伙伴全面武装好在找工作。那么,作为测试,不管是面试还是笔试,必然要被考验到的就是”测试思维“。在面试中就是体现在如下面试题中: “说说你项目中的xx模块你是如何测试的?” “给你一个购物车&a…

直线模组怎么分类?

直线模组是一种广泛应用于自动化设备、机器人、数控机床、电子设备等领域的精密传动系统。根据不同的分类方式,直线模组可分为多种类型。 一、按照轴数分类 1、单轴直线模组:只有一个移动轴的直线模组,通常用于简单的直线运动和定位。 2、双…

9、定义错误页

在layouts目录下新建error.vue&#xff0c;可以通过layout函数使用布局文件&#xff0c;通过props: [“error”]能拿到错误信息对象。 <template><div>{{ error.statusCode }}: {{ error.message }}</div> </template><script> export default {…

33:深入浅出x86中断机制

背景 我们知道使用0x10号中断&#xff0c;可以在屏幕上打印一个字符。 问题 系统中的 中断 究竟是什么&#xff1f; 生活中的例子 来看一个生活中例子&#xff1a; 小狄的工作方式 在处理紧急事务的时候&#xff0c;不回应同事的技术求助。老板的召唤必须回应&#xff0c;…

Golang教程——配置环境,再探GoLand

文章目录 一、Go是什么&#xff1f;二、环境配置验证配置环境变量 三、安装开发者工具GoLand四、HelloGolang 一、Go是什么&#xff1f; Go&#xff08;也称为Golang&#xff09;是一种开源的编程语言&#xff0c;由Google开发并于2009年首次发布。Go语言旨在提供一种简单、高…

剑指JUC原理-5.synchronized底层原理

Java对象头 以32位虚拟机为例&#xff1a; 普通对象 在Java虚拟机中&#xff0c;每个对象都有一个对象头&#xff08;Object Header&#xff09;&#xff0c;其中包含了一些用于管理对象的元数据信息。对象头通常由两部分组成&#xff1a;mark word&#xff08;标记字&#x…

开源3D激光(视觉)SLAM算法汇总(持续更新)

目录 一、Cartographer 二、hdl_graph_slam 三、LOAM 四、LeGO-LOAM 五、LIO-SAM 六、S-LOAM 七、M-LOAM 八、livox-loam 九、Livox-Mapping 十、LIO-Livox 十一、FAST-LIO2 十二、LVI-SAM 十三、FAST-Livo 十四、R3LIVE 十五、ImMesh 十六、Point-LIO 一、Cartographer Cartog…

目标检测类项目数据集汇总

一、玩手机数据集及检测 玩手机数据集下载地址分享: https://download.csdn.net/download/qq_34717531/19870205 二、狗的数据集及检测 狗目标检测数据集下载地址分享:https://download.csdn.net/download/qq_34717531/20813390 三、猫数据集及检测 猫数据集下载地址分享: ht…

review-java-basis

Path环境变量用于记住程序路径&#xff0c;方便在命令行窗口的任意目录启动程序 \n代表换行的意思&#xff0c;/t代表一个tab前进一格 强转可能导致数据的丢失&#xff08;溢出&#xff09; 浮点型转换为整型&#xff0c;直接丢掉小数部分&#xff0c;保留整数部分返回 数据类…

GPT的广泛应用会对互联网公司造成挑战吗?——探讨GPT在实际使用中的应用和影响

文章目录 前言GPT 技术的背景和发展历程GPT 技术对互联网行业的影响GPT 技术在互联网行业中的应用GPT 技术对于用户隐私和数据安全的威胁GPT 技术对于人类工作岗位的影响加强 AI 伦理和监管加强 AI 安全性和隐私保护推动 AI 创新和发展&#xff0c;避免过度依赖 AIGPT 技术是一…

日常软件游戏丢失msvcp120dll怎么修复?分享5个修复方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp120dll丢失”。那么&#xff0c;究竟什么是msvcp120dll文件&#xff1f;当它丢失时&#xff0c;我们会遇到哪些问题呢&#xff1f;本文将从以下几个方面进行详细阐述。 msvcp120dll是…

Groovy安装开发环境

准备下载GDK并安装环境变量,跟安装JDK一模一样 https://groovy.apache.org/download.html

【C++】详解map和set基本接口及使用

文章目录 一、关联式容器与键值对1.1关联式容器&#xff08;之前学的都是序列容器&#xff09;1.2键值对pairmake_pair函数&#xff08;map在插入的时候会很方便&#xff09; 1.3树形结构的关联式容器 二、set2.1set的基本介绍2.1默认构造、迭代器区间构造、拷贝构造&#xff0…

【八】Linux成神之路

Linux成神之路 简介&#xff1a;最近梳理了一下自己linux系统的学习历程&#xff0c;感觉整个成长过程就很顺利&#xff0c;并没有走弯路&#xff0c;于是想着可以不可以把自己linux系统学习的路线记录下来&#xff0c;能够在大家成长的路上有一点帮助&#xff0c;就在这样的一…