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

【HBZ分享】Redis各种类型的数据结构应用场景

String(字符串类型)

  1. 计数器: incr / decr, 比如商品库存,业务号的发号器
  2. 业务数据key-value缓存, 缓存结果数据,提高网站性能,缓解DB压力
  3. 分布式session会话, 集群环境下存储token鉴权信息
  4. 分布式锁,集群下保证线程安全。

List(列表)

  1. 简易的消息队列:
    • 通过lpush, lpop来进行入队和出队,生产者从左边推送消息,消费者从右边消费消息。
  2. 最近联系人列表:
    • 通过list存储结构,根据用户id把该用户最近的联系人根据时间倒序插入到list中,超过的数量就从后面删除掉
  3. 历史记录和操作日志
    • 将用户最近浏览或操作的记录存储到list中,key就是该用户的id或者其他唯一标识
    • 通过LPUSH 和 RPUSH在list头部插入,然后通过LTRIM保留最近一部分的历史数据
  4. 批量查询数据分页存储
    • 从DB一次查出100条数据,存储到redis的list中,后续再查找数据直接从redis中先查询

Set(集合)

  1. 用户的画像,文章的标签,文章会有多个标签,将多个标签存储到不同的set中
  2. 计算交集,并集等操作,比如社交好用中的共同好友,共同关注,计算不同用户间的某特点的交集或并集等
  3. 抽奖活动设计:
    • SRANDMEMBER key [count], 如果命令执行时,只提供了key参数,那么集合会随机返回一个元素,该操作不会删除,所以适合放回类型的抽奖。
    • SPOP随机一个元素,并从中移除该元素,并且会将该元素返回,适合不放回类型抽奖。
    • 网站独立ip统计,即不能存在重复的ip,同一个ip访问10次,也算1次这种的统计。

Sorted Set(有序集合,也叫ZSet)

  1. 根据积分,分数做排行榜,或者商品热销,视频热播,热点文章排行,班级名次排名等排行榜操作。
  2. 优先级队列,将任务的优先级作为Sorted Set的分值

Hash(哈希)

  1. 对象存储:

    • Hash结构存储对象所有的属性,例如一个人的姓名,年龄,性别,工作等信息。
    • 这些属性名可以作为hash表中的键, 属性值可以作为hash表中的值value。
    • 在存储大量对象时,使用Hash结构可以提高数据读写效率
  2. 计数器系统:

    • 可以使用Hash结构实现计数器系统
    • 例如网站上的点赞和评论数,每个文本,图片或者视频等支持点赞和评论的内容ID作为Hash表中key
    • 点赞和评论的次数作为Hash表中的value。
    • key = 文章ID, field=评论, value=值, field = 点赞, value = 值
  3. 电商里面的购物车存储(自营电商平台,中小型电商平台)

    • 第一层Map: key是用户ID。
    • 第二层Map: key是购物车中的每个商品id, 值是购物车数据,注意: 是购物车数据,不是商品数据,应该是购买数量,单个价格, 总价格等这些内容。

Bitmap(位存储)

  1. 占用内存极小,是对大量的二进制数据进行存储
  2. 布隆过滤器:
    • 使用Bitmap实现布隆过滤器算法,用于判断一个元素是否存在于一个集合中
    • 将元素通过Hash算法转成二进制位,并将其对应的二进制位置设置为1.
  3. 去重操作:
    • 可以通过Bitmap来进行重复的数据去重,需要将驱虫的数据的Hash值作为Bitmap的key
    • 将数据的ID或者表示作为Bitmao对应的二进制位,1表示已经存在,0表示不存在
    • 日活、月活UV统计,签到统计,用户点赞,访问次数,在线用户等。
http://www.lryc.cn/news/420481.html

相关文章:

  • anaconda创建并且配置pytorch(完整版)
  • 高级java每日一道面试题-2024年8月10日-网络篇-你对跨域了解多少?
  • AtCoder Beginner Contest 365 A~E
  • 多机部署, 负载均衡-LoadBalance
  • (回溯) LeetCode 78. 子集
  • DQL数据查询语言(多表处理)—/—<7>
  • 力扣刷题总结
  • BLDC ESC 无刷直流电子调速器驱动方式
  • 解决 IntelliJ IDEA 编译错误 “Groovyc: Internal groovyc error: code 1” 及 JVM 内存配置问题
  • LeetCode.2940.找到Alice和Bob可以相遇的建筑
  • OFD板式文件创建JAVA工具-EASYOFD 四、文字 Text
  • 【概念速通】李群 lie group
  • day_39
  • 计算机系统层次结构
  • java语言特点
  • 单元测试注解:@ContextConfiguration
  • 大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败
  • MySQl 中对数据表的增删改查(基础)
  • LVS知识点整理及实践
  • Ubuntu gnome WhiteSur-gtk-theme类mac主题正确安装和卸载方式
  • 计算机毕业设计选题推荐-办公用品管理系统-Java/Python项目实战
  • 计算机毕业设计选题推荐-网上考试系统-Java/Python项目实战
  • 白骑士的Matlab教学基础篇 1.4 函数与脚本
  • Qt——多线程
  • 技术周总结 08.05-08.11周日(scala git回滚)
  • ffmpeg 命令图片和视频转换
  • 力扣 | 动态规划 | 在字符串的应用 | 最长回文子串、最长回文子序列、单词拆分、编辑距离
  • 【docker】docker容器部署常用服务
  • CentOS 7.6 安装 Weblogic
  • 一键清除电脑隐私痕迹,Privacy Eraser助你轻松搞定!