redis互联网真实应用场景

article/2025/3/18 22:06:05

Redis

1.数据类型(5种)

String、hash、list、set、zset

(img-DRIN6BKA-1682936619694)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230419154228336.png)]

2.常用命令

2.1 String

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DffSSYEh-1682936619695)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230419155007597.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9AreiNUA-1682936619695)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230421104800596.png)]

分布式锁 SETNX 当别的进程枷锁后 讲不能获得锁

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MXMP72wu-1682936619695)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230421154527228.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zsOmsOfh-1682936619696)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230421154446748.png)]

利用INCR来产生分布式序列号,优化策略:一下拿出多个序列号到服务器本地,之后在服务器累加,去完之后再去redis获取

2.2 Hash

hash的结构是K-V(K-V)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ql8Zx98s-1682936619696)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230421170218954.png)]

redis集群的影响不适合大规模使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fUjHxopw-1682936619696)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230421170308503.png)]

2.3 List列表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2I16QlUU-1682936619696)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230421170635358.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KbiUypCG-1682936619696)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230421170733859.png)]

Stack = LPUSH + LPOP FILO

2.3.1 List应用场景

微博消息和公众号消息

微博和订阅号的消息列表中,展示的是关注的微博用户和公众号发布的消息,且是按照时间顺序,这就可以利用到redis的List,微博用户(msg-ID 0001)关注了A、B,用户A发布了一个消息(ID 1002),之后用户B发布了一个消息(ID 1001),

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-imylrg6r-1682936619696)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230423140733685.png)]
当用户登陆后查看属于本人当msg-ID的消息 LRANGE msg-ID 0001 0 4 这样就按照 时间的顺序取得了本人关注列表中发消息的列表

问题是用户如果很多是否会存在性能的瓶颈,实际上可以有很多优化的选择,比如可以先给在线的用户发。

后台可以优化为 push、pull两种模式

2.3.1.1push和pull模式
2.3.1.1.1push 写扩散 (微信)

Push写扩散,为用户A001维护一个msg-ID列表msg- A001,并在列表中记录该用户订阅的用户发布消息(20230401)维护为消息索引(一般为消息ID、类型、发表时间等一些元数据)。当关注的用户发布消息时,发布的消息id会同步到订阅他的用户的msg-ID队列中。
优点:实施性较好(通过网络管道准时推送),读很轻(初始化时仅需要读取自己的inbox即可)
缺点:写很重。每发布一个消息,会导致大量的写操作。当大V动态并发量很高的时候大量动态队列持久化造成磁盘搞IO
优化策略:一般来说,用户发布消息,并不会更新所有followers的订阅列表,仅更新在线followers即可。另外可以设置上限(固定推送用户的上限5000个),设置限流策略,X分钟内完成消息发布,优化存储策略,采用NoSQL等大数据存储方案

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cXVYbb5C-1682936619697)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230423154919988.png)]

2.3.1.1.2 pull 读扩散(微博)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lbZoPsj7-1682936619697)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230423160045112.png)]

该方式为每个用户维护一个发送列表,记录该用户所有发表过的消息索引。
优点:写很轻,节省空间。用户每发布一条消息,仅需更新自己的outbox。实时性较差(取决于定时轮询时间)
缺点:读操作很重,计算量大。假设你收听了1k用户,则初始化时,需要从1k个用户的outbox拉取消息,然后计算获得最新的n条消息,针对某些大V发布的定时消息,用户在短时间内大量的访问拉取会让服务器出现性能瓶颈

优化策略:利用MQ削峰填谷,遇到恶意的请求直接拒绝,控制轮询的间隔,减少请求的次数,涉及缓存缓存热数据,减少查询的次数,优化查询的效率,增加验证码,分散请求的时间,控制机器人,程序攻击

2.3.1.1.1push+pull 写扩散 + 读扩散(推特)
  • 粉丝量小于X,Push模式
  • 粉丝量大于X,Pull模式

2.4 set

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BPDNb3vM-1682936619697)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230424140700288.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hUpM3hvY-1682936619697)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230424143040770.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sy4goyrL-1682936619697)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230425133942639.png)]

微信的点赞功能也是运用了set功能的

2.4.1 集合操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WHuve5RE-1682936619697)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230425134810975.png)]

SINTER : 交集

SUNINO:并集合

SDIFF :差集

2.4.2 关注模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PYxxw1mB-1682936619697)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230425135712270.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tmdJO1nG-1682936619697)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230425140005565.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rE7qhUIX-1682936619698)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230425141132071.png)]

2.5zset

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rjozXiKB-1682936619698)(/Users/zhaokaijie/Library/Application Support/typora-user-images/image-20230425165121084.png)]
在这里插入图片描述

3.Redis的单线程和高性能

3.1 Redis是单线程吗?

Redis的单线程主要是指Redis的网络1O和键值对读写是由一个线程来完成的,这也是Redis对外提供键值存储服务的主要流程。但 Redis的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。

3.2 Redis单线程为什么还能这么快?

因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题。正因为Redis是单线程,所以要小心使用Redis指令,对于那些耗时的指令(比如keys,一定要谨慎使用,一不小心就可能会导致Redis卡顿。

3.3 Redis单线程如何处理那么多的并发客户端连接?

Redis的1O多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。

image-20230425144022533

NIO非阻塞

4.其他高级命令

4.1 keys

全量遍历键,用列出来所有满足特定正则字符串规则的key,当redis数据量比较大时,性能较差,要避免使用

4.2 scan

scan:渐进式遍历键

SCAN cursor[MATCH pattern][COUNTcount
scan参数提供了三个参数,第一个是cursor整数值(hasn桶的索引值),第二个是key的正则模式,第三个是一次遍历的key的数量(参者
值,底层遍历的数量不一定),并不是符合条件的结果数量。第一次遍历时,cursor值为0,然后将返回结果中第一个敕数值作为下一次
遍历的cursor。一直遍历到返回的cursor值为0时结束。
注意:但是scan并非完美无瑕,如果在scan的过程中如果有键的变化(增加、删除、修改),那么遍历效果可能会碰到如下问题:新增的键可能没有遍历到,遍历出了重复的键等情况,也就是说scan并不能保证完整的遍历出来所有的键,这些是我们在开发时需要考虑的。

127.0.0.1:6379> scan 0 match key99* count 1000

0 是游标 返回的游标是下次开始的位置 直到再次出现0 找到所有符合规则的值

原因是redis的数据存储的方式是hashmap,先计算hash值再去buket中去寻找匹配的值

新增的如果放到之前的游标的位置 则查不出来,某个buket放的很多 可能rehash 也有可能出新问题


http://chatgpt.dhexx.cn/article/13gLyD2y.shtml

相关文章

大规模互联网应用Redis架构要点(转)

通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取。Redis是一个很好的Cache工具。大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,在这种情况下,如何正确架…

Redis 为什么在互联网应用中广泛应用?

1. redis 都能干嘛 缓存,毫无疑问这是Redis当今最为人熟知的使用场景。再提升服务器性能方面非常有效;排行榜,在使用传统的关系型数据库(mysql oracle 等)来做这个事儿,非常的麻烦,而利用Redis…

从 Redis7.0 发布看 Redis 的过去与未来

前言 经历接近一年的开发、三个候选版本,Redis 7.0终于正式发布,这是Redis历史上改变最多的一个大版本,它不仅包含了50多个新命令,还有大量核心新特性与改进,这些不仅能够解决用户使用中的诸多问题,还进一…

Redis简介

​强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan 【前言】 组长反复提到系统加载的慢性能有待提高,正好这两天任务都提前完成;于是乎开始着手研究Redis;经过两天的研究将Redis应用到了系统中并做了相关的…

旅游专题图制作

一 数据源 从网上下载的全国各行政区域矢量图层、福建省九市矢量边界图、福建省公路矢量图、福建省河流矢量图、福建省铁路矢量图,其中,它们的投影坐标系为WGS84投影坐标系以及福建省2018旅游景点图。 二.专题地图设计过程 1.打开Arcgis 10…

使用Arcgis制作的专题地图

使用Arcgis制作的专题地图 一、数据准备二、简单制作1. 将数据拉入图层2. 切换视图3. 插入标题4. 插入图例5. 插入指北针6. 插入比例尺 三、精细制作1. 插入文本2. 插入动态文本3. 调整元素4. 调整符号5. 开启格网 五、结果图六、导出地图 一、数据准备 自己准备数据 二、简单…

ArcGIS Pro 专题图制作

基于昨天已经符号化好的地图基础之上,今天主要操作一下专题图制作。ArcGIS Pro中专题图制作和Map中已经有了很大的改动,只要能够习惯ArcGIS Pro制图的方式,那制作的专题图比Map还是更加漂亮的,因为它提供的元素样式,文…

ArcGIS 10.5专题地图制作自定义漂亮图框

先来看一下效果: 下面来说明如何在ArcGIS软件里面实现自定义图框。 1. 【自定义】→【样式管理器】→【Administrator.style】→【边框】→【新建】→【常规边框】。 2. 点击【更改符号】。 3. 点击【编辑符号】。

利用envi与arcmap/arcgisPro制作一张植被覆盖指数专题地图(地图学作业)

利用envi与arcmap/arcgisPro制作一张植被覆盖指数专题地图(地图学作业) 前言数据准备利用envi进行数据处理Lc8数据的打开辐射定标图像裁剪大气校正Band Math获取NDVI计算植被覆盖指数 ArcMap or ArcGIS Pro成图导入tif文件并将其可视化 前言 本篇文章是…

ArcGIS制作专题地图

终于制出我想要的效果地图了 一顿摸索 从昨天到现在 呵呵 功夫不负有心人 特别是九段线数据框 因为完全是自己摸索 还是小小激动下 也记录一下 上图

QGIS创建专题地图

支持创建多种专题图,单符号专题图、分类专题图、渐进专题图(数值分段)、自定义规则专题图等、热力图、汇聚图、2.4D三维图;以分类专题图制作为例,操作如下: 制作专题地图 选择符号页签;2.选择…

如何制作专题地图集

你可能看到过类似下图的地图,作为一个GISer,有没有想过这些图是怎么做出来的。对ArcMap也很熟悉了,但是看到这些地图,第一感觉是用PS或是AI做的。即使ArcMap可以做出这些图,也是一个很麻烦的过程,或许Pytho…

ArcGIS应用基础4 专题图的制作

🎈🎈🎈本文数据免费下载 🎯🎯🎯其他GIS空间分析文章 本次实验数据基于上次实验3结果进行处理,文章见ArcGIS应用基础3 人口密度图的制作 一、实验名称 ArcGIS应用基础之专题图的制作 二、实验目…

(附word操作以及视频讲解)使用ARCGIS进行地图配准_投影变换_普通地图制作_专题地图制作

目录 1、这里需要说明的是,视频是由成都信息工程大学龙银平老师制作,Word是由本人编辑。 2、外加 实验指导书 3、链接:https://pan.baidu.com/s/1XgULO8zy5fqlbC1aUXSiLg 提取码:Love 4、部分成果展示: 5. 普通地…

如何制作专题地图(设计、规划、测绘制作图斑)标绘使用详解

同步视频教程:制作专题地图-设计规划测量地图应用详解-Bigemap GIS Office 专题地图制作视频教程:地图数据应用(地形图制作过程)-Bigemap GIS Office 1、导入/导出AutoCAD文件DXF格式 2、在线标注含有 点 线 面 的矢量标注&#x…

专题地图符号设计与构图

专题地图符号设计是地图编制与可视化的重点内容之一。 一、符号设计应遵循的原则 符号设计应遵循多种原则,包括图案化、精确性、逻辑性、系统性、对比性和协调性、色彩的象征性、视力与制印条件、印刷与经济效果和计算机制图的需要等。 图案化 地图符号图形的设计…

SuperMap iDesktop 9D 制作专题地图

1.打开SuperMap iDesktop 9D SuperMap iDesktop 9D可以在官网下载 官网:https://www.supermap.com/cn/ 或者 使用百度网盘下载 链接:https://pan.baidu.com/s/1m4ZE_d-jcvG_IgOetcU3QQ 提取码:v446 复制这段内容后打开百度网盘手…

ENVI_IDL: 批量制作专题地图

目录 1. 提要 2. 编程 1. 提要 ————————————————————————————————————————————————————————————————————————————————————————————————————————————————…

专题地图制作之POI获取

制图的POI点采集 专题地图POI的获取 专题地图 说到专题地图,相信地信遥感专业的并不陌生,但制作专题地图可能最头疼的不是用软件(ArcGIS,MapGIS),而是POI点的获取: 比如我们要制作下图所示医院…

专题地图的制作

专题地图的制作 1.布局纸张的设置 ①模板 (1)在ArcMap窗口主菜单栏,点击“文件”,“新建”里的“新建文档” 点击“模板”,可以用系统本身带有的模板 也可以选择我的模板,用空白模板,根据自己的需要进行…