首页 常见问题 redis有什么用

redis有什么用

May 24, 2019 pm 05:10 PM
redis

redis的作用:1、获取最新的n个数据;2、获取TOP N的数据;3、设置精准的抢购时间;4、实现计数器;5、去除重复值;6、利用set命令制作反垃圾系统;7、构建队列系统。

redis有什么用

很多小伙伴在花时间学习完redis数据库后,很迷茫.感觉很空虚,不知道自己学习完这东西,能做点什么.从而丧失了继续学习的动力.为了能够让大家在学习redis的道路上继续前行.我觉得很有必要为大家整理一份简单实用的redis应用场景指南。

1. 获取最新的n个数据

为了让小伙伴更好地理解,我这里结合示例讲解.

示例:

现在你在和讯网黄金频道上班,项目经理让你负责每天在频道首页生成一张数据表,来展示1个月内的国际黄金的开盘和收盘价格.如果
我们从mysql数据库中按时间排序取出,固然可以.但是你要考虑和讯网的并发量,和你排序时对资源的一个浪费程度.
登录后复制

这个时候我们选取redis的列表存取,就显得很有必要了,我们知道redis有一种队列(list)的数据结构,同时它还具备先进先出的特性.那这样的话,我去最新的1个月的数据不就信手拈来么.一个lrange命令即可简单地取出你想要的区间的值.

2. 获取 TOP N 的数据

接下来的这个例子,看标题,感觉跟第1中应用差不多,其实还是有差别的.应用1我们是利用列表的先进先出的特性,按存取时间来取,接下来我们的这个示例,就是利用有序集合的特性来解决实际问题.

现在你受雇于APPLESTORE,项目经理要求你在商店首页,展示下载量排行前30的APP.
登录后复制

这个时候,你若能够想到我们redis学习过程中,给大家讲到的SortedSet有序集合,那就再好不过了.我们只需要将每个APP生成一个唯一的ID,将其作为集合中成员member,下载数目作为成员的score.那么当你将这个score插入到有序集合中时,redis就会按其进行大小排序,自然有个有序的集合就形成了.最终你要取前N或者后N的数据,就在于你自己了.

3. 设置精准的抢购时间

设置抢购,促销时间,这项技术在电商领域确实很实用.

现在你在阿里的淘宝事业部上班,领队组长分配你来完成一个限时抢购活动,某商品中午10:00开始进行抢购,1小时后,活动结束.
登录后复制

咿呀,既然限时,要准确地1个小时结束.这个时候我们学习redis的过程中,讲到的key的有效期就派上用场了.我们可以将某个活动的key的过期时间设置为过期时刻的时间戳,用户抢购的过程中并发是很高的.那么这个时候提交的数据我们未必就需要立即存入我们的硬盘数据库.用户下单时我们获取该活动的key是否过期,未过期,允许用户下单,订单数据暂时内存缓存.一旦该key失效,禁止用户下单,同时,我们可以将刚才并发的那么多笔单进行硬盘数据库的导入即可.一来实现了精准时间的设定,二来,应对了抢购的高并发量.

4. 轻松实现计数器

你目前就职的单位是中央全面深化改革领导小组技术顾问办公室,在过去如果全国人民一起选代表,既浪费人力又浪费财力.现在网络技术
发展了,习近平组长交代由你牵头开发点赞选人大平台.
接到这个项目,你是不是很犯难,13亿啊!可能同时集中在某个时间段,点赞,如此大的IO请求.硬盘数据库多少有些力不从心.哎,这个时候
你要运用上我们的内存数据库系统了,redis中对key的增incre,减decr不正适合你的需求么.
登录后复制

5. 去除重复值

去除重复值,听起来很熟悉,我们的MySQL不是有unique索引吗?哦,好吧,我要说的是我们redis中的对字符串的set命令更使用.

你现在在下厨房平台,任职技术兼策划.你准备收集天下美食,苦于不知菜名.网络是有魔力的,人名群众的智慧是无穷的.你准备发动全
国的网友们,为你提供菜名,同时你还不想让大家发出相同菜名.
登录后复制

看到如此问题,你是否还能想到我们之前在学习redis的字符串类型时,说到的set命令,我们讲默认情况,不给其他参数时,如果我们的key不存在,则创建添加.如果key已经存在,则旧值覆盖新值.既然如此,key值存在,则覆盖.不正是我们需要的模型么?

6. 利用set命令制作反垃圾系统

很多小伙伴,看到这,蒙了.一个破set命令什么时候还能反垃圾了.咦,你应该脑洞大一些,再大一些.

上次你制作的统计菜名系统,领导会上先把你肯定了一番,然后义正言辞地说,小明啊,你这系统不太符合净网行动的要求啊,有些网友把一
些带有明显淫秽色情的菜名都提交到了系统.还被展示出来投票,这不荒唐吗?
登录后复制

吓的你一阵冷汗,这个时候你想到了在XX教育高性能架构班学习的同桌小胖.电话里小胖告诉你,当我们使用set命令对字符串进行操作时,给它一个NX参数,这样的话只有用户提交的key不存在时,才会对key进行操作.你去网上down一个敏感字汇字典,提前set入库,不就可以实现反垃圾了么.听完小胖的指导,紧张的你如释重负.

7. 利用发布订阅的中的SUBSCRIBE和PUBLISH命令构建实时消息推送系统

费了老鼻子劲,你终于进入了新浪微博事业部.第二天组长找到正埋头苦干的你.小明,咱们微博也要搞个跟FB一样一样的关注功能,搞大
V认证,大V一发消息,赶紧推送给关注的那群XX,让XX跟大V赶紧互动起来.以此来提高用户粘性.组长走后,”赶紧,推送”,这两个词在你的耳畔不时地回响.
登录后复制

你又想到了小胖,小胖电话里告诉你.redis里有subscribe订阅和publish发布功能的.你挂了电话,去自学it网里一搜索,果不其然.一个subscribe可以订阅不同的用户模型,只要对应的模型有publish实现,订阅者即可实时收到,推送的消息.你虽然不是王大锤,但你也万万没想到redis竟然有如此功能.O(∩_∩)O哈哈~

8. 构建队列系统

忙完微博的事,正准备收拾东西去挤地铁的你.突然被组长叫住了.
小明,你虽然完成了微博关注和推送的技术架构.但是这几天又有个新问题出现了.因为FB用不了,微博用户暴增.特别是认证大V的用户越
来越多,就连门口烤红薯的大爷早上还拽着我说,给他整个大V吧,俺不差钱.老板为了缓解认证方面的压力,已经开始收费认证了,但是还是
挡不住这群XX.赶上过节饭点,大V们几乎同时发微博,推送服务器有点压力.你把这个问题解决了,再走吧,晚点回去打车公司报销.然后打
完卡他走了.
登录后复制

“同时发微博”,”同时推送,服务器压力大”.你从电脑中找到了小胖之前发给你的那本redis自学笔记,笔记上说.我们可以将若干个需要执行的事件加入队列,然后按时间的顺序去逐个逐个的执行.这个时候你又想到了一个提高用户互动性的好办法.我能不能让粉丝数目多的大V的微博优先推送呢?毕竟粉丝基数大,影响大,总能搞出一个大新闻.既然这样,我直接使用有序队列不就行了.把一个个大V的微博推送事件ID存入有序队列,同时依据粉丝数给予权重(或说优先级).不就可以达到我们的需求了么.

9. 缓存

这一点大家应该很熟悉了,它可以像memcache一样充当缓存数据库.不过的它的数据类型比memcache多的多,应对场景自然要比memcache丰富的多.比较时髦的用法是,用其来缓存会话哦.

以上是redis有什么用的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Windows11安装10.0.22000.100跳出0x80242008错误解决办法 Windows11安装10.0.22000.100跳出0x80242008错误解决办法 May 08, 2024 pm 03:50 PM

1、启动【开始】菜单,输入【cmd】,右键点击【命令提示符】,选择以【管理员身份】运行。2、依次输入下面命令(可小心复制贴上):SCconfigwuauservstart=auto,按回车SCconfigbitsstart=auto,按回车SCconfigcryptsvcstart=auto,按回车SCconfigtrustedinstallerstart=auto,按回车SCconfigwuauservtype=share,按回车netstopwuauserv,按回车netstopcryptS

剖析 PHP 函数瓶颈,提升执行效率 剖析 PHP 函数瓶颈,提升执行效率 Apr 23, 2024 pm 03:42 PM

PHP函数瓶颈导致性能低下,通过以下步骤解决:定位瓶颈函数,使用性能分析工具。缓存结果以减少重新计算。并行处理任务,提高执行效率。优化字符串连接,使用内建函数替代。利用内建函数代替自定义函数。

Golang API缓存策略与优化 Golang API缓存策略与优化 May 07, 2024 pm 02:12 PM

GolangAPI中的缓存策略可提升性能和减轻服务器负载,常用策略有:LRU、LFU、FIFO和TTL。优化技巧包括:选择合适的缓存存储、分级缓存、失效管理以及进行监控和调整。实操案例中,使用LRU缓存优化从数据库获取用户信息的API,可从缓存中快速检索数据,否则从数据库中获取后再更新缓存。

erlang和golang性能哪个好? erlang和golang性能哪个好? Apr 21, 2024 am 03:24 AM

Erlang 和 Go 在性能上存在差异。Erlang 擅长并发性,而 Go 具有更高的吞吐量和更快的网络性能。Erlang 适合要求高并发性的系统,而 Go 适用于需要高吞吐量和低延迟的系统。

PHP开发中的缓存机制与应用实战 PHP开发中的缓存机制与应用实战 May 09, 2024 pm 01:30 PM

在PHP开发中,缓存机制通过将经常访问的数据临时存储在内存或磁盘中来提升性能,从而减少数据库访问次数。缓存类型主要包括内存、文件和数据库缓存。PHP中可以使用内置函数或第三方库实现缓存,如cache_get()和Memcache。常见的实战应用包括缓存数据库查询结果以优化查询性能,以及缓存页面输出以加快渲染速度。缓存机制有效改善网站响应速度,提升用户体验并降低服务器负载。

PHP数组分页中如何使用Redis缓存? PHP数组分页中如何使用Redis缓存? May 01, 2024 am 10:48 AM

使用Redis缓存可以大幅优化PHP数组分页的性能。可通过以下步骤实现:安装Redis客户端。连接到Redis服务器。创建缓存数据,将每页数据存储到Redis哈希中,密钥为"page:{page_number}"。从缓存中获取数据,避免对大型数组进行昂贵的操作。

Win11英文21996怎么升级到简体中文22000_Win11英文21996升级到简体中文22000的方法 Win11英文21996怎么升级到简体中文22000_Win11英文21996升级到简体中文22000的方法 May 08, 2024 pm 05:10 PM

首先你需要将系统语言设置为简体中文显示并重启。当然,之前已经改为简体中文显示语言的直接跳过这一步即可。下面开始操作注册表,regedit.exe,左侧导航栏或上方地址栏直接定位到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNlsLanguage,然后将其中的InstallLanguage键值、Default键值全部修改为0804(如果想改为英文的en-us,需要先将系统显示语言设置为en-us,重启系统再全部修改为0409)进行到这里必须重启系

navicat能连接redis吗 navicat能连接redis吗 Apr 23, 2024 pm 05:12 PM

是的,Navicat 可以连接 Redis,它允许用户管理键、查看值、执行命令、监视活动和诊断问题。要连接 Redis,请在 Navicat 中选择“Redis”连接类型,并输入服务器详细信息。