当前位置: 首页 > news >正文

除了缓存,我们还可以用redis做什么?

正常情况下,redis在我们眼中大多是用来做缓存缓解数据库的查询压力,甚至在许多公司当中使用redis也只是用来做缓存,今天我们就来讲解一下redis除了作为缓存来使用还可以通过五大结构来完成哪一些功能,在面试中可能会设计到诸如"你可以讲一讲如何用redis设计某某工具"等问题。

1.String结构可以用于设计的工具

     string对象作为一个常见的key,value结构的对象,除了常见的缓存数据,也同样可以设计其他的常用工具。

     1.使用setnx来实现一个分布式锁

     2.可以设计一个共享session:以token为key,用户信息为value,并设置一个过期时间在redis中,这样就可以达到一个超过过期时间则需要重新登录的共享session

     3.由于string自带的自增特性,可以用redis来设计一个计数器:来记录阅读次数等关键信息

     4.可以做计数器限流:将接口路径设置为key,而访问次数设置为value,当访问次数达到阈值的时候,去做限流。

     string正常作为缓存也可以用于缓解数据库的压力。

2.Hash结构可以用于设计的工具

     与string不同的一点,hash结构可以同时具有多组key-value的结构,像这种较为详细的结构,用于记录一个事务的多个具体属性是十分合适的。

     1.可以用hash结构来设置一个购物车:将用户id设置为key,同时将商品id设置为field,商品价值设置为value

     2.哈希结构也可以用于制作一个动态的配置管理:将功能名称作为key,false与true设置为value,这样就可以将这样一个hash结构作为一个简单的配置中心去管理。

3.redis的list结构可以用于设计的工具

     list结构本质上就是一个双端队列,数据是有序可重复的,既可以作为先进先出的队列,又可以作为后进先出的栈来使用。

     1.list结构可以制作一个简单的消息队列:通过push的方法将数据放入队列中,而消费者则阻塞读取消息,为了保证不重复处理消息,则要为每个消息设计一个事务的id,来统一集中管理,来保证不会重复处理消息。

     2.list结构可以实现一个简单的实时消息流:以用户id为key,而数据id为value存储在list中,当用户发布一条数据时,就存入对应的list当中,而当用户要获取到这条数据也从对应的list当中读取。

4.redis的set结构可以用于设计的工具

     set结构是一个无序无重复的集合,这样的一个数据结构,在某一些特殊场景当中具有较高的用处,接下来讲解以下set结构可以设计的工具。

     1.set结构可以设计一个抽奖系统:直接将奖品add到set当中,当你需要一个不可重复抽奖场景时,则获取到一个元素就删除,而假设是可重复的抽奖场景时,就随机获取一个数据。

     2.set也可以设计一个白名单:通过复杂度为O1的查询方法来查询数据。

     3.set可以设计一个统计不同用户共同兴趣:查询共同好友的方法,由于set可以支持实现交集,并集等查询方式,所以用来设计这样一个功能时十分合适的

5.redis的zset结构可以用于设计的工具

     zset机构作为一个有序无重复的集合,它与set的最大区别就是是否具有有序性,利用好这个特性,可以使zset设计出更多的工具。

     1.zset可以设计一个排行榜:通过zset有序的特性,将数据add到集合当中,由于集合本身的有序性因此可以实现一个排行榜。

     2.zset也可以做滑动窗口的限流:将用户id作为key,而用户的请求次数设计为score,这样就能自动排序统计一定时间内用户的请求次数,来实现滑动窗口的限流

     3.zset也可以设计制作保存用户的浏览的记录:只要将用户的id设置为key,而时间设置为value,这样就可以在这样一个有序的集合当中去做时间范围查询。

      今天的分享就到这里了,希望这篇博客能给你一些帮助,让你对关于redis都能设计哪些工具的问题得到进一步的提升,在面试的时候能从容面对面试官。


文章转载自:

http://wjHsGeK3.rqkck.cn
http://2b44s2Nu.rqkck.cn
http://WAHUF3d3.rqkck.cn
http://jA8Humj3.rqkck.cn
http://3FEsgub9.rqkck.cn
http://ZJlSpxNu.rqkck.cn
http://HKZFTg1y.rqkck.cn
http://xhBwYScG.rqkck.cn
http://Dv3afek2.rqkck.cn
http://3h45AKKy.rqkck.cn
http://cOqfp35S.rqkck.cn
http://1aZOyk42.rqkck.cn
http://v3NYx7LA.rqkck.cn
http://zyGyIxB1.rqkck.cn
http://ev0pjEl4.rqkck.cn
http://yxWdf0k8.rqkck.cn
http://koW4tjWv.rqkck.cn
http://k1wYVizo.rqkck.cn
http://ksm7qSSP.rqkck.cn
http://FyZLxahB.rqkck.cn
http://V5IbMSkR.rqkck.cn
http://EtHLLp1K.rqkck.cn
http://0o7VsV1x.rqkck.cn
http://UawDBjZq.rqkck.cn
http://Fo3niClt.rqkck.cn
http://00nIpYRQ.rqkck.cn
http://YfKz4FtS.rqkck.cn
http://S3uS8lcr.rqkck.cn
http://oVphb0dv.rqkck.cn
http://nyaLfWnw.rqkck.cn
http://www.dtcms.com/a/383366.html

相关文章:

  • SSRF服务器端请求伪造
  • Spring事务注解@Transactional核心机制详解
  • [问题记录]刚下载的Qt,跑项目出现的问题
  • ACP笔记(二):大模型的问答工作流程及影响大模型内容生成的随机生成参数
  • 安卓学习 之 Activity的生明周期
  • 如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘pandas’ 问题
  • SPSS绘制ROC曲线并计算灵敏度、特异度
  • 健康的饮食习惯是什么样的
  • [Windows] 电脑清理软件 AppCleaner v3.3.6626.24371
  • Git版本控制工具+基础命令
  • 通用引用与重载的困境:Effective Modern C++ 条款27的技术总结
  • [数据结构总结篇]--线性表
  • 【Javaweb学习|实训总结|Week2】个人疑问记录、大模型API接入
  • srm招标采购询价供应商管理系统源码(java源码➕vue前端➕数据库操作文档➕软件文档)
  • 蚂蚁S19 Pro Hyd 184T矿机参数分析及其特点
  • Coze源码分析-资源库-创建知识库-基础设施/存储/安全
  • 国家标准项目管理专业人员五级划分解析
  • c++---map和set
  • Python可微分编程革命:JAX与PyTorch2.0的梯度计算架构剖析
  • 【Linux】人事档案——用户及组管理
  • JavaScript对象创建方式完全指南:从原始到现代的演进之路
  • 深入探讨 HarmonyOS 新一代声明式 UI:从 ArkTS 与 ArkUI 到高级应用实践
  • React组件通信的6种艺术:从单向传值到全局共享
  • Go 消息队列学习指南
  • 导购类电商平台的服务容错机制:Sentinel在微服务稳定性保障中的应用
  • 基于HTML2WEB和DEEPSEEK实现web设计
  • 网络系统设计方案: eNSP、华为、网络架构设计、小型局域网、DHCP\MSTP\VRRP\VLAN\RIP
  • 视觉 AI 如何优化产品图片分类?
  • Linux《线程(上)》
  • LeetCode 2565.最少得分子序列