返回顶部
首页 > 资讯 > 前端开发 > node.js >如何掌握Redis场景设计
  • 537
分享到

如何掌握Redis场景设计

2024-04-02 19:04:59 537人浏览 泡泡鱼
摘要

这篇文章主要讲解了“如何掌握Redis场景设计”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何掌握Redis场景设计”吧!一、常用指令接下来看看每个数据结

这篇文章主要讲解了“如何掌握Redis场景设计”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何掌握Redis场景设计”吧!

一、常用指令

接下来看看每个数据结构常用的指令有哪些,我们用一张表比较清晰的展示:

如何掌握Redis场景设计

二、场景解析

1.1string存储

如何掌握Redis场景设计

1.2String 类型使用场景

场景一:商品库存数

从业务上,商品库存数据是热点数据,交易行为会直接影响库存。而 Redis 自身 String 类型提供了:

  1. set Goods_id 10; 设置 id 为 good_id 的商品的库存初始值为 10;

  2. decr goods_id; 当商品被购买时候,库存数据减 1。

依次类推的场景:商品的浏览次数,问题或者回复的点赞次数等。这种计数的场景都可以考虑利用 Redis 来实现。

场景二:时效信息存储

Redis 的数据存储具有自动失效能力。也就是存储的 key-value 可以设置过期时间:set(key, value, expireTime)。

比如,用户登录某个 App 需要获取登录验证码, 验证码在 30 秒内有效。那么我们就可以使用 String 类型存储验证码,同时设置 30 秒的失效时间。

如何掌握Redis场景设计

2.1hash存储数据

如何掌握Redis场景设计

2.2Hash 类型使用场景

Redis 在存储对象(例如:用户信息)的时候需要对对象进行序列化转换然后存储。

还有一种形式,就是将对象数据转换为 JSON 结构数据,然后存储 jsON 的字符串到 Redis。

对于一些对象类型,还有一种比较方便的类型,那就是按照 Redis 的 Hash 类型进行存储。

例如,我们存储一些网站用户的基本信息, 我们可以使用:

这样就存储了一个用户基本信息,存储信息有:{name : 小明, phone : “123456”,sex : “男”}

当然这种类似场景还非常多, 比如存储订单的数据,产品的数据,商家基本信息等。以淘宝购物车为主

如何掌握Redis场景设计

2.3实现信息存储的优缺点

1.原生:

  • set user: 1:name james;

  • set user:1:age 23;

  • set user:1:sex boy;

优点:简单直观,每个键对应一个值

缺点:键数过多,占用内存多,用户信息过于分散,不用于生产环境

2.将对象序列化存入

redis set user:1 serial ize (userInfo);

优点:编程简单,若使用序列化合理内存使用率高

缺点:序列化与反序列化有一定开销,更新属性时需要把userInfo全取出来进行反序列化,更新后再序列化到redis

3.hash存储:

hmset user:1 name james age 23 sex boy

优点:简单直观,使用合理可减少内存空间消耗

缺点:要控制ziplist 与hashtable两种编码转换,Mhashtable会消耗更多内存。

3.1List 类型使用场景

list 是按照插入顺序排序的字符串链表。可以在头部和尾部插入新的元素(双向链表实现,两端添加元素的时间复杂度为 O(1)) 。

如何掌握Redis场景设计

场景一:消息队列实现

目前有很多专业的消息队列组件 kafkaRabbitMQ 等。 我们在这里仅仅是使用 list 的特征来实现消息队列的要求。在实际技术选型的过程中,大家可以慎重思考。

list 存储就是一个队列的存储形式:

  1. lpush key value; 在 key 对应 list 的头部添加字符串元素;

  2. rpop key;移除列表的最后一个元素,返回值为移除的元素。

场景二:最新上架商品

在交易网站首页经常会有新上架产品推荐的模块, 这个模块是存储了最新上架前 100 名。

这时候使用 Redis 的 list 数据结构,来进行 TOP 100 新上架产品的存储。

Redis ltrim 指令对一个列表进行修剪(trim),这样 list 就会只包含指定范围的指定元素。

start 和 stop 都是由 0 开始计数的,这里的 0 是列表里的第一个元素(表头),1 是第二个元素。

如下伪代码演示:

4.1set 类型使用场景

set 也是存储了一个集合列表功能。和 list 不同,set 具备去重功能。当需要存储一个列表信息,同时要求列表内的元素不能有重复,这时候使用 set 比较合适。与此同时,set 还提供的交集、并集、差集。

例如,在交易网站,我们会存储用户感兴趣的商品信息,在进行相似用户分析的时候, 可以通过计算两个不同用户之间感兴趣商品的数量来提供一些依据。

获取到两个用户相似的产品, 然后确定相似产品的类目就可以进行用户分析。

类似的应用场景还有, 社交场景下共同关注好友, 相似兴趣 tag 等场景的支持。

如何掌握Redis场景设计

4.2Set集合特殊的操作命令

setA={A,B,C} setB={B, C}

1)集合与集合之间的交集

sinter setA setB-->得到集合{B,C}

集合与集合之间的并集

suNIOn setA setB -->得到集合{A,B,C}

3)集合与集合之间的差集

sdiff setA setB-->得到集合{A}

4.3Set集合特殊的操作命令应用场景

如何实现微博的微关系设计?

如何掌握Redis场景设计

5.1 Zset有序集合

常用于排行榜,如视频网站需要对用户上传视频做排行榜,或点赞数与集合有联系,不能有重复的成员

如何掌握Redis场景设计

5.2Zset 类型使用场景

如何掌握Redis场景设计

感谢各位的阅读,以上就是“如何掌握Redis场景设计”的内容了,经过本文的学习后,相信大家对如何掌握Redis场景设计这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 如何掌握Redis场景设计

本文链接: https://lsjlt.com/news/84485.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何掌握Redis场景设计
    这篇文章主要讲解了“如何掌握Redis场景设计”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何掌握Redis场景设计”吧!一、常用指令接下来看看每个数据结...
    99+
    2024-04-02
  • Redis调用Lua脚本及使用场景快速掌握
    目录一、阅读本文前置条件二、为什么需要Lua脚本三、学点Lua语法3.1.一个简单的例子3.2.仔细看下Lua脚本里的内容3.3. 复杂点的例子四、Lua脚本预加载五、一个修改 JS...
    99+
    2024-04-02
  • 掌握rowcount函数的实际应用场景
    掌握rowcount函数的实际应用场景,需要具体代码示例在数据库操作中,往往需要对数据进行增删改查的操作。而对于查询操作,我们经常需要获取返回结果的行数。这时,就可以用到数据库中的rowcount函数。rowcount函数是一个数据库操作的...
    99+
    2023-12-29
    应用场景 rowcount函数 在进行INSERT
  • 设计模式之如何掌握责任链
    本篇内容主要讲解“设计模式之如何掌握责任链”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“设计模式之如何掌握责任链”吧!例子假设你也"穿越"到...
    99+
    2024-04-02
  • Redis如何应对高并发场景
    Redis是一个高性能的内存数据库,可以很好地应对高并发场景。以下是一些在高并发场景下使用Redis的常见方法: 使用Redis...
    99+
    2024-04-02
  • 如何掌握图计算平台GraphScope
    本篇内容主要讲解“如何掌握图计算平台GraphScope”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何掌握图计算平台GraphScope”吧!一 ...
    99+
    2024-04-02
  • 掌握C语言中*和&的应用场景与区别
    指针(*)存储变量地址,用于访问和修改变量值。地址运算符(&)获取变量地址,可将其赋值给指针或传递给函数。区别在于:指针可解引用,而地址运算符本身不能访问变量值。 C语...
    99+
    2024-04-03
    c语言 * &
  • 10分钟掌握JavaScript设计模式
    要在10分钟内掌握JavaScript设计模式是一项挑战,但可以简单了解一些常见的设计模式。1. 单例模式(Singleton Pa...
    99+
    2023-09-20
    JavaScript
  • 了解 Python 接口响应容器,掌握多种应用场景。
    Python 是一种广泛应用于各种领域的编程语言,它的灵活性和易用性使得它在开发 Web 应用、机器学习、数据科学等领域中备受欢迎。在 Python 的世界里,接口响应容器是一个非常重要的概念,它可以帮助开发者更好地管理和处理各种接口响应数...
    99+
    2023-06-15
    接口 响应 容器
  • 如何掌握Spring
    这篇文章主要讲解了“如何掌握Spring”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何掌握Spring”吧!Spring 是一个控制反转依赖管理的容器,...
    99+
    2024-04-02
  • 如何掌握JSONP
    本篇内容主要讲解“如何掌握JSONP”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何掌握JSONP”吧! 一个正常的请求: JSON正常发请求时,c...
    99+
    2024-04-02
  • 如何掌握Synchronized
    本篇内容主要讲解“如何掌握Synchronized”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何掌握Synchronized”吧!使用synchronized关键字是Java并发编程中线程同...
    99+
    2023-06-15
  • 如何掌握Promise
    本文小编为大家详细介绍“如何掌握Promise”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何掌握Promise”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。异步编程想要学习promise,你必须要懂得什么是...
    99+
    2023-07-05
  • 一文掌握python中的__init__的意思及使用场景分析
    目录__init__解释用__init__与不用__init__对比__init__直接输出(不建议这么用)__init__普通用法不用__init__总结__init__解释 __...
    99+
    2023-02-10
    python中的__init__使用 python中的__init__
  • PHP设计模式大全与应用场景
    面向对象编程的基本原则: 单一职责:一个类,只需要做好一件事情。 开放封闭:一个类,应该是可扩展的,而不可修改的。 依赖倒置:一个类,不应该强依赖另外一个类。每个类对于另外一个类都是可替换的。 配置化:尽可能的使用配置,而不是硬...
    99+
    2023-10-26
    设计模式 PHP设计模式
  • Redis实现单设备登录的场景分析
    目录用户登录拦截器注册拦截器在有些场景下,我们希望用户一个账号只能登录一个设备。 这个时候我们可以用Redis来实现。 原理: 用户首次登录时,将用户信息存入Redis,key是用户...
    99+
    2024-04-02
  • 掌握HTML语法:网页设计的基石
    HTML元素 HTML元素是网页内容的基本构建块。它们使用尖括号(<>)标记,例如,<p> 表示段落,<h1> 表示标题1。元素具有嵌套结构,创建文档层次结构。 属性 属性为HTML元素提供附加信息。它...
    99+
    2024-03-09
    HTML语法 网页设计 网站构建 元素 属性 语义
  • 如何快速掌握B端项目的设计思路和方法
    本篇内容介绍了“如何快速掌握B端项目的设计思路和方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言B ...
    99+
    2024-04-02
  • PHP While 循环详解:全面掌握循环原理与应用场景
    while 循环是一种控制流结构,用于重复执行语句,直到条件为 false。其原理是检查条件,若为 true,则执行循环体,再检查条件,直至条件为 false 为止。它适用于需要重复执行...
    99+
    2024-04-09
    php while
  • java设计模式的应用场景有哪些
    Java设计模式有很多应用场景,以下是一些常见的应用场景:1. 工厂模式:当需要根据不同的条件创建不同的对象时,可以使用工厂模式来统...
    99+
    2023-10-08
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作