转载自  https://blog.csdn.net/qq_35568881/article/details/78779679

redis提供了5中数据结构,理解每种数据结构的特点对于redis开发运维非常重要。
  • 1
  • 2

一、字符串

字符串类型是redis最基础的数据结构,首先键是字符串类型,而且其他几种结构都是在字符串类型基础上构建的,
所以字符串类型能为其他四种数据结构的学习尊定基础。
字符串类型实际上可以是字符串
(简单的字符串、复杂的字符串(xml、json)、数字(整数、浮点数)、二进制(图片、音频、视频)),
但最大不能超过512M。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

使用场景:

缓存功能:字符串最经典的使用场景,redis最为缓存层,Mysql作为储存层,绝大部分请求数据都是redis中获取,由于redis具有支撑高并发特性,所以缓存通常能起到加速读写和降低 后端压力的作用。(redis为何具备支撑高并发的特性,下次文章讲解)。
计数器:许多运用都会使用redis作为计数的基础工具,他可以实现快速计数、查询缓存的功能,同时数据可以一步落地到其他的数据源。如:视频播放数系统就是使用redis作为视频播放数计数的基础组件。
共享session:出于负载均衡的考虑,分布式服务会将用户信息的访问均衡到不同服务器上,用户刷新一次访问可能会需要重新登录,为避免这个问题可以用redis将用户session集中管理,在这种模式下只要保证redis的高可用和扩展性的,每次获取用户更新或查询登录信息都直接从redis中集中获取。
限速:处于安全考虑,每次进行登录时让用户输入手机验证码,为了短信接口不被频繁访问,会限制用户每分钟获取验证码的频率。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

二、哈希

在redis中哈希类型是指键本身又是一种键值对结构,如 value={{field1,value1},......{fieldN,valueN}}
  • 1
  • 2

使用场景:

      哈希结构相对于字符串序列化缓存信息更加直观,并且在更新操作上更加便捷。所以常常用于**用户信息**等管理,但是哈希类型和关系型数据库有所不同,哈希类型是稀疏的,而关系型数据库是完全结构化的,关系型数据库可以做复杂的关系查询,而redis去模拟关系型复杂查询开发困难,维护成本高。
  • 1
  • 2
  • 3
  • 4
  • 5

三、列表

列表类型是用来储存多个有序的字符串,列表中的每个字符串成为元素(element),一个列表最多可以储存
2的32次方-1个元素,在redis中,可以队列表两端插入(pubsh)和弹出(pop),还可以获取指定范围的元素
列表、获取指定索引下表的元素等,列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,
在实际开发中有很多应用场景。
优点:1.列表的元素是有序的,这就意味着可以通过索引下标获取某个或某个范围内的元素列表。2.列表内的元素是可以重复的。

使用场景:

消息队列: redis的lpush+brpop命令组合即可实现阻塞队列,生产者客户端是用lupsh从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞时的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡和高可用性

 
消息队列模型↑

文章列表:每个用户都有属于自己的文章列表,现在需要分页展示文章列表,此时可以考虑使用列表,列表不但有序同时支持按照索引范围获取元素。

使用列表技巧: 
lpush+lpop=Stack(栈) 
lpush+rpop=Queue(队列) 
lpush+ltrim=Capped Collection(有限集合) 
lpush+brpop=Message Queue(消息队列)


四、集合

集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中不允许有重复的元素,并且集合中的元素是
无序的,不能通过索引下标获取元素,redis除了支持集合内的增删改查,同时还支持多个集合取交集、并集、
差集,并合理的使用好集合类型,能在实际开发中解决很多实际问题。

使用场景:

 标签(tag):集合类型比较典型的使用场景,如一个用户对娱乐、体育比较感兴趣,另一个可能对新闻感兴趣,这些兴趣就是标签,有了这些数据就可以得到同一标签的人,以及用户的共同爱好的标签,这些数据对于用户体验以及曾强用户粘度比较重要。(用户和标签的关系维护应该放在一个事物内执行,防止部分命令失败造成数据不一致)sadd=tagging(标签)
spop/srandmember=random item(生成随机数,比如抽奖)
sadd+sinter=social Graph(社交需求)

五、有序集合

有序集合和集合有着必然的联系,他保留了集合不能有重复成员的特性,但不同得是,有序集合中的元素是可以
排序的,但是它和列表的使用索引下标作为排序依据不同的是,它给每个元素设置一个分数,作为排序的依据。
(有序集合中的元素不可以重复,但是csore可以重复,就和一个班里的同学学号不能重复,但考试成绩可以相
同)。列表、集合、有序集合三者的异同点

使用场景:

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

redis5种数据结构讲解及使用场景相关推荐

  1. redis hash删除所有key_一文详解Redis面试中常见的5种数据结构及对应使用场景

    欢迎关注专栏<Java架构筑基>--专注于Java技术的研究与分享! Java架构筑基​zhuanlan.zhihu.com Java架构筑基--专注于Java技术的研究与分享! 后续文章 ...

  2. hashmap应用场景_Redis 5种数据结构 及使用场景分析

    也当过面试官,面试过不少应聘者,因为是我自己招人自己用,所以我不会看应聘者造火箭的技术有多牛比,只看拧螺丝的手艺瓷不瓷实.毕竟以后是一个整体,拖了大家后腿团队都很难受. 面试的题目一般也不会太难,就像 ...

  3. formdata.append加多个值_redis的五种数据结构和应用场景:微博微信点赞+加购物车等...

    Redis五种数据结构如下: 1.String 字符串类型 是redis中最基本的数据类型,一个key对应一个value. String类型是二进制安全的,意思是 redis 的 string 可以包 ...

  4. Redis五种数据结构应用场景

    文章目录 前言 二.字符串String 2.1.常用操作 2.2.应用场景 2.2.1.单值缓存(最常用) 2.2.2.对象缓存 2.2.3.分布式锁 2.2.4.计数器 三.哈希hash 3.1.常 ...

  5. list redis 怎样做排行_Redis中5种数据结构的使用场景介绍

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

  6. Redis五种数据结构及其使用场景

    Redis五种数据结构及其使用场景 先有个概念,redis 数据库其实就是一个大的 map,它容纳了所有的 key, key 都是 string 类型,而 value 则有 string, list, ...

  7. 万字长文的Redis五种数据结构详解(理论+实战),建议收藏。

    本文脑图 前言 Redis是基于c语言编写的开源非关系型内存数据库,可以用作数据库.缓存.消息中间件,这么优秀的东西一定要一点一点的吃透它. 关于Redis的文章之前也写过三篇,阅读量和读者的反映都还 ...

  8. Redis五种数据结构详解

    Redis是基于c语言编写的开源非关系型内存数据库,可以用作数据库.缓存.消息中间件,这么优秀的东西一定要一点一点的吃透它. Redis的五种数据结构包括以下五种: String:字符串类型 List ...

  9. 头条面试题:请谈谈Redis 9种数据结构以及它们的内部编码实现

    转载自  头条面试题:请谈谈Redis 9种数据结构以及它们的内部编码实现 90%的人知道Redis 5种最基本的数据结构: 只有不到10%的人知道8种基本数据结构,5种基本+bitmap+GeoHa ...

最新文章

  1. 【AHOI 2016初中组】 自行车比赛 - 贪心
  2. .Net MVC Redirect出现:服务器无法在已发送 HTTP 标头之后设置状态解决方案
  3. 关于无服务器(Serverless)架构你要搞懂的8件事
  4. Spring MVC能响应HTTP请求的原因?
  5. 怎么用vnc访问自己内网电脑,同时又是同一个会话?
  6. C++ STL中哈希表 hash_map介绍
  7. hashcat离线碰撞md5
  8. 王爽汇编语言 实验11
  9. flex 学习篇 ---- 导航类容器
  10. 名校博士生被电信诈骗10多万,却被嘲“博士也会被骗书白读了”,学校发声!...
  11. linux 编译3g驱动_linux重新编译内核
  12. leetCode 41.First Missing Positive (第一个丢失的正数) 解题思路和方法
  13. 6. Zend_Uri
  14. 星巴克的员工激励机制
  15. 微信开发 缓存Storage
  16. return 和return:redirect:/**
  17. [激光原理与应用-63]:激光器-光学-探测光、泵浦光和种子光三种光的区别
  18. 【分享-免费OCR工具 在线+移动端】免费在线图片多国文字识别
  19. 【解题报告】2015ACM/ICPC亚洲区上海站
  20. 归并排序详解(递归+非递归)

热门文章

  1. Mysql游标循环遍历
  2. OD-困难重重的追踪消息断点
  3. 围观一下tp的游戏保护 一
  4. python新式类和经典类的区别?
  5. TCP协议疑难杂症全景解析|硬核
  6. 手把手教你拦截Linux系统调用
  7. RabbitMQ负载均衡(3)——Keepalived+HAProxy实现高可用的负载均衡
  8. 揭秘北京2022冬奥会背后的技术
  9. 音视频技术开发周刊 73期
  10. 动态优化器—一种感知视频编码优化框架