当前位置: 首页 > 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统计,签到统计,用户点赞,访问次数,在线用户等。

相关文章:

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

String(字符串类型) 计数器: incr / decr, 比如商品库存,业务号的发号器业务数据key-value缓存, 缓存结果数据,提高网站性能,缓解DB压力分布式session会话, 集群环境下存储token鉴权信息分布式锁&#xff…...

anaconda创建并且配置pytorch(完整版)

📚博客主页:knighthood2001 ✨公众号:认知up吧 ** 🎃知识星球:【认知up吧|成长|副业】介绍** ❤️如遇文章付费,可先看看我公众号中是否发布免费文章❤️ 🙏笔者水平有限,欢迎各位大…...

高级java每日一道面试题-2024年8月10日-网络篇-你对跨域了解多少?

如果有遗漏,评论区告诉我进行补充 面试官: 你对跨域了解多少? 我回答: 跨域问题,即Cross-Origin Resource Sharing(CORS),是现代Web开发中一个非常重要的概念,涉及到浏览器的安全策略——同源策略(Same…...

AtCoder Beginner Contest 365 A~E

A.Leap Year(思维) 题意: 给你一个介于 1583 1583 1583和 2023 2023 2023之间的整数 Y Y Y。 求公历 Y Y Y年的天数。 在给定的范围内, Y Y Y年的天数如下: 如果 Y Y Y不是 4 4 4的倍数,则为 365 365 …...

多机部署, 负载均衡-LoadBalance

目录 1.负载均衡介绍 1.1问题描述 1.2什么是负载均衡 1.3负载均衡的一些实现 服务端负载均衡 客户端负载均衡 2.Spring Cloud LoadBalancer 2.1快速上手实现负载均衡 2.2负载均衡策略 自定义负载均衡策略 3.服务部署(Linux) 3.1服务构建打包…...

(回溯) LeetCode 78. 子集

原题链接 一. 题目描述 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集 (幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出&…...

DQL数据查询语言(多表处理)—/—<7>

一、多表处理 当前有两个表,一个是学生表student,一个是分数表score student表字段名表示如下(共1000条数据): score表字段表示如下(共6000条数据): 1、求每个学生的总分 SELECT …...

力扣刷题总结

去年有段时间一直在刷题,进步神速,解决了以往刷完就忘的问题,这里总结下经验,给有需要的人参考下,核心观点就仨: 1. 打好数据结构与算法基础 2. 多刷题多练习 3. 形成自己的知识体系 下图是我梳理的知识体…...

BLDC ESC 无刷直流电子调速器驱动方式

BLDC ESC 无刷直流电子调速器驱动方式 1. 源由2. 驱动方法2.1 Trapezoidal 1202.2 Trapezoidal 1502.3 Sinusoidal 1802.4 Field-Orientated Control (FOC) 3. FOC(Field-Oriented Control)3.1 引入坐标系3.2 Clarke and Park变换Clarke 变换&#xff08…...

解决 IntelliJ IDEA 编译错误 “Groovyc: Internal groovyc error: code 1” 及 JVM 内存配置问题

在使用 IntelliJ IDEA 进行开发时,我们可能会遇到各种编译和运行错误,其中之一就是 Groovy 编译器错误(Groovyc: Internal groovyc error: code 1)或 JVM 内存不足错误。这类错误可能会影响开发效率,但通过调整 JVM 内…...

LeetCode.2940.找到Alice和Bob可以相遇的建筑

友情提示:这个方法并没有通过案例,只通过了944个案例(很难受),超时了,但是想着还是分享出来吧 题目描述: 给你一个下标从 0 开始的正整数数组 heights ,其中 heights[i] 表示第 i …...

OFD板式文件创建JAVA工具-EASYOFD 四、文字 Text

JAVA版本的OFD板式文件创建工具easyofd. 功能包含了图像、 图像、 文字、和模版页功能。同时也支持OFD文件的数字签名及验签,电子签章及验签。 本JAVA版本的easyofd使用原生方式创建板式文件,不依赖JAVA的SWT库。 项目地址:http://…...

【概念速通】李群 lie group

李群 lie group 概念速通 快速示例介绍:【引入】单位复数 (The unit complex numbers) 是李群 (lie group) 最简单的例子之一【进一步】SO(2): The 2D rotation matrices【Typical uses】SE(2): Pose of a robot in the plane Group & Lie Group 定义&#xff1…...

day_39

198. 打家劫舍 class Solution:def rob(self, nums: List[int]) -> int:if len(nums) 1:return nums[0]dp [0] * len(nums)dp[0], dp[1] nums[0], max(nums[0], nums[1])for i in range(2, len(nums)):dp[i] max(dp[i - 1], dp[i - 2] nums[i])return dp[len(nums) - …...

计算机系统层次结构

1.计算机系统的组成 计算机系统的组成硬件系统软件系统 2.计算机的硬件部分 2.1冯诺依曼机的结构特点: 图示: 1.五大部分由运算器(ALU),控制器(CU),存储器(主存辅存),输入设备,输出设备五大部分组成2.指…...

java语言特点

Java语言是一种广泛使用的编程语言,它具有以下几个显著的特点: 面向对象:Java是一种纯面向对象的语言,它支持类的封装、继承和多态等特性。面向对象的设计使得Java程序更加模块化,易于维护和扩展。 平台无关性&#xf…...

单元测试注解:@ContextConfiguration

ContextConfiguration注解 ContextConfiguration注解主要用于在‌Spring框架中加载和配置Spring上下文,特别是在测试场景中。 它允许开发者指定要加载的配置文件或配置类的位置,以便在运行时或测试时能够正确地构建和初始化Spring上下文。 基本用途和工…...

大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...

MySQl 中对数据表的增删改查(基础)

MySQl 中对数据表的增删改查(基础) 新增演示插入一条数据插入多条数据 查询全列查询部分列查询查询关于列名的表达式查询时用别名查询去重后的结果查询排序后的结果条件查询比较运算符和逻辑运算符 分页查询 修改删除 黑白图是在命令行里的,彩…...

LVS知识点整理及实践

LVS知识点整理及实践 LVSlvs集群概念lvs概念lvs集群类型lvs-nat模型数据逻辑: lvs-DR模式数据传输和过程:特点: lvs-tun模式数据传输过程:特点: lvs-fullnet模式数据传输过程 lvs调度算法lvs调度算法类型lvs静态调度算法lvs动态调度算法4.15版本内核以后新增调度算法 ipvsadm命…...

SSH工具对比:新手用户和熟练运维,选型逻辑有什么不同

结论 新手用户和熟练运维在选择 SSH 工具时,关注点往往完全不同。 新手更在意的是:能不能顺利连接、界面是否直观、文件和配置是否容易找到、网站出问题时能不能快速定位。 而熟练运维更在意的是:连接效率、命令自由度、多服务器管理能力、原…...

警惕!AI正在悄悄重构全球攻防格局

警惕!AI 正在悄悄重构全球攻防格局 热点聚焦 AI重构网络安全:全球巨头加速布局 2026年5月,全球网络安全领域迎来重大变革,AI技术正在重塑攻防格局。OpenAI发布专为网络安全防御打造的集成化AI平台Daybreak,将安全防…...

别再只用鼠标了!用Leap Motion手势控制Unity游戏,保姆级配置避坑指南(2024版)

2024年Unity手势交互开发实战:Leap Motion从配置到游戏逻辑全解析在游戏开发领域,交互方式的创新往往能带来全新的体验。想象一下,玩家不再需要键盘鼠标,仅凭自然的手部动作就能操控游戏角色——这正是Leap Motion手势识别技术为U…...

php有什么版本,php语言有几个版本

php有什么版本,php语言有几个版本PHP的大版本主要分四支:PHP4/PHP5/PHP6/PHP7 其中,PHP4由于太古老、对OO支持不力已基本被淘汰,请无视PHP4。 PHP6由于基本没有生产线上的应用,还基本只是一款概念产品,很多功能已在PHP…...

告别漫长等待:UE5.2.1 Windows打包效率优化与插件问题排查指南

告别漫长等待:UE5.2.1 Windows打包效率优化与插件问题排查指南第一次点击"打包项目"按钮时,进度条仿佛被冻结的场景,每个UE5开发者都经历过。尤其当项目规模达到数十GB时,等待时间可能超过一小时——这背后隐藏着引擎底…...

C语言(12) 指针的常见操作

指针的常见操作指针变量&#xff0c;有两方面的意思:一个指针指向的内容(数据值&#xff0c;一级)指针变量本身存储的数据 (地址值)#include <stdio.h>int main() {int a 10;int b 0 ;int c 50;int *p NULL;int *q NULL;p &a; // 对指针变量本身进行修改// 对指…...

LLM测试工程师必看,Claude E2E测试架构设计,从用例生成、黄金样本构建到回归基线告警闭环

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;LLM测试工程师必看&#xff0c;Claude E2E测试架构设计&#xff0c;从用例生成、黄金样本构建到回归基线告警闭环 核心架构概览 Claude端到端测试架构采用三层解耦设计&#xff1a;输入层&#xff08;动态用…...

收藏干货|2026年程序员转型大模型指南,8个高薪岗位小白也能入局

分享一则身边真实职场经历&#xff0c;想必能戳中当下不少陷入职业迷茫的开发从业者。 同窗老友深耕Java后端开发整整六年&#xff0c;常年扎根业务开发模块&#xff0c;算得上行业内经验老道的技术老手。可从去年年初开始&#xff0c;他的职业焦虑感愈发强烈。传统业务开发同质…...

浏览器端音频解密技术:如何让加密音乐在本地重获新生?

浏览器端音频解密技术&#xff1a;如何让加密音乐在本地重获新生&#xff1f; 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目…...

安卓逆向实战:Frida内存砸壳提取DEX原理与技巧

1. 这不是“脱壳”&#xff0c;是逆向工程中一次精准的内存手术你打开一个加固过的安卓App&#xff0c;用常规工具解包&#xff0c;发现classes.dex只有几KB&#xff0c;里面全是混淆到面目全非的壳代码&#xff1b;用dex2jar反编译&#xff0c;报错“Not a valid dex file”&a…...