Redis数据结构应用场景及原理分析

news2024/11/17 12:48:02

目录

一、Redis介绍

二、应用场景 

2.1 String应用场景 

2.2 Hash应用场景  

2.3 List应用场景

2.4 Set应用场景 

2.5 Zset应用场景 


一、Redis介绍

  • 单线程
  • 多路复用
  • 底层数据结构:全局哈希表(key-value)

二、应用场景 

2.1 String应用场景 

  • 单值缓存

set key value

get key 

  • 对象缓存

set user:1 userJson(Json格式数据)

  • 分布式锁

set product:1 true ex 10 nx  

  • 计数器

incr article:readCount:1

get article:readCount:1

  • 分布式系统全局序列号

incrby orderId 100   // redis批量生成序列号提升性能

2.2 Hash应用场景  

  • 对象存储 

hmset user 1:name zhangsan 1:blance 10000

hmset user 1:name zhangsan 1:blance 9000

hmget user 1:name 1:blance 

  • 购物车

以用户ID为key,商品ID为filed,商品数量为value

添加购物车->hset cart:1 1001 1

增加数量->hincrby cart:1 1001 1

商品总数->hlen cart:1 1001

删除商品->hdel cart:1 1001

购物车列表->hgetall cart:1

2.3 List应用场景

  • 常用分布式数据结构

stack(栈)= lpush+lpop

queue(对列)= lpush+rpop

blocking mq(阻塞队列)= lpush+brpop 

  • 消息流

张三关注了李四、王五等大V

李四发微博,消息(ID:1001):lpush msg:zhangsan 1001 

王五发微博,消息(ID:1002):lpush msg:zhangsan 1002

张三查看最新微博消息:lrange msg:zhangsan 0 4

如果李四、王五粉丝数量千万级别,如何处理?

2.4 Set应用场景 

  • 微信小程序抽奖 

点击参与抽奖加入集合:sadd 1001(活动ID)1(用户ID)

查看参与抽奖者:smembers 1001

抽取中奖者:

随机抽取2名(不删除集合中元素):srandmember 1001 2

随机抽取2名(删除集合中元素):spop 1001 2

  • 微信微博点赞、收藏、标签

 

点赞:sadd like:1001(消息ID) 1(用户ID)

取消点赞:srem like:1001 1

获取点赞用户列表:smembers like:1001

检查用户是否点赞:sismember like:1001 1

获取点赞用户数:scard like:1001 

  • 集合操作 

交集:sinter set1 set2 set3 -> {c}

并集:sunion set1 set2 set3 -> {a,b,c,d,e}

差集:sdiff set1 set2 set3 -> {a} 

  • 集合操作实现微博微信关注模型 

zhangsan关注的人:zhangsanSet->{lisi,wangwu} 

lisi关注的人:lisiSet->{zhangsan,wangwu,zhaoliu,liuqi} 

wangwu关注的人:wangwuSet->{zhangsan,lisi,zhaoliu}

zhangsan和lisi共同关注的人(zhangsan和lisi的交集):sinter zhangsanSet:lisiSet->{wangwu}

zhangsan关注的人也关注了lisi:sismember zhangsanSet lisiSet

zhangsan可能认识的人(zhangsan和lisi的差集):sdiff zhangsanSet liset->{zhaoliu,liuqi}

2.5 Zset应用场景 

  • 排行榜 

获取新闻:zincrby hotNews:20230801 1 总理记着会

获取当日排行榜前十:zrevrange hotNews:20230801 0 9 WITHSCORES

七日搜索榜单计算:zunionstore hotNews:20230801-20230807 7

展示七日排行前十:zrevrang hotNews:20230801-20230807 0 9 WITHSCORES

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/956771.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安装centos7修改网关时出现ifconfig命令找不到的解决方法

系列文章专栏 学习以来遇到的bug/问题专栏 文章目录 系列文章专栏 一 问题描述 二 解决方法 2.1 原因分析 前言 本文主要介绍安装centos7修改网关时出现ifconfig命令找不到的解决方法 一 问题描述 安装centos7修改网关时出现ifconfig命令找不到的情况 二 解决方法 2…

Revit SDK:SolidSolidCut 实体几何裁剪

前言 这个例子介绍了 Revit 中的一个实体几何裁剪。 内容 这个例子介绍如何使用 SolidSolidCutUtils 的接口来做几何裁剪以及取消几何裁剪。内容相对来说非常简单。 namespace Autodesk.Revit.DB {public static class SolidSolidCutUtils{public static void AddCutBetwee…

vue3组合式api bus总线式通信

vue2中可以创建一个 vue 实例, 做为 总结来完成组件间的通信 但是在vue3中, 这种方法是不能使用的。 因为vue3中main.js中, 使用的createApp() 没有机会再写 new Vue了 但是我们可以使用 mitt 的插件来解决这个问题 vue3 bus组件的用法 安装…

Mysql表关联简单介绍(inner join、left join、right join、full join不支持、笛卡尔积)

文章目录 0. 交集、并集、差集含义说明1. 简单演示上图七种情况0. A、B表数据准备1. left outer join 简称 left join 左表所有数据,右表关联数据,没有的以null填充2. right outer join 简称 right join,右表所有数据,左表关联数据…

【SpringCloud】SpringCloud整合openFeign

文章目录 前言1. 问题分析2. 了解Feign3. 项目整合Feign3.1 引入依赖3.2 添加注解3.3 编写Feign客户端3.4 测试3.5 总结 4. 自定义配置4.1 配置文件方式4.2 Java代码方式 5. Feign使用优化5.1 引入依赖5.2 配置连接池 6. Feign最佳实践6.1 继承方式6.2 抽取方式 前言 微服务远…

报错处理:Too many open files

报错处理 Too many open files 报错环境 Linux 排错思路 当打开的文件句柄超过系统允许的最大值时,会出现该错误。这可能是由于系统参数限制或者应用程序打开了过多的文件导致的。 解决方法 可以通过修改系统参数来增加最大允许打开文件句柄数。 临时性修改&#xf…

ssm农业视频实时发布管理系统源码

ssm农业视频实时发布管理系统源码108 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm package com.controller;import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; impo…

ui网页设计实训心得

ui网页设计实训心得篇一 通过这次实训对这门课程的学习,做好网页,并不是一件容易的事,它包括网页的选题、 内容采集整理、 图片的处理、 页面的排版设置、 背景及其整套网页的色调等很多东西。 所以我得出一下总结: 一、 准备资…

将本地jar打包到本地maven仓库或maven私服仓库中

将本地jar包打包到本地的maven仓库中的命令&#xff1a; mvn install:install-file -DgroupIdtebie.applib.api -DartifactIdapiclient -Dversion1.0-SNAPSHOT -Dfile本地jar路径 -Dpackagingjar说明&#xff1a; DgroupId pom中的<groupId></groupId> Dartifact…

【爬虫】实验项目二:模拟登录和数据持久化

目录 一、实验目的 二、实验预习提示 三、实验内容 实验要求 基本要求&#xff1a; 改进要求A&#xff1a; 改进要求B&#xff1a; 四、实验过程 基本要求&#xff1a; 源码如下&#xff1a; 改进要求A: 源码如下&#xff1a; 改进要求B&#xff1a; 源码如下&…

deepspeed多机多卡并行训练指南

文章目录 前言离线配置训练环境共享文件系统多台服务器之间配置互相免密登录pdsh多卡训练可能会碰到的问题注意总结 前言 我的配置&#xff1a; 7机14卡&#xff0c;每台服务器两张A800 问&#xff1a;为啥每台机只挂两张卡&#xff1f; 答&#xff1a;给我的就这样的&#…

线性代数的学习和整理16:什么是各种空间(类型),向量空间,距离(类型)?

目录 1 空间相关的群&#xff0c;环&#xff0c;域&#xff0c;集合&#xff0c;空间的预备知识 1.1&#xff1a;群&#xff0c;环&#xff0c;域&#xff0c;集合&#xff0c;空间的定义&#xff08;表示不懂&#xff0c;只是做个标记&#xff09; 2 空间 2.1 各种空间概念…

如何修复 Cloudflare 错误 1015“您受到速率限制”

目录 错误 1015 您受到费率限制 如何修复错误 1015 您的速率受到限制 Cloudflare 降低用户活动速度 禁用网站的速率限制 擦除当前的速率限制设置 增加网站可以处理的请求数量 修改时间限制 增加带宽支持 网站优化 社区支持 为网站访问者提供无错误的体验 应该如何学…

UE 5 实现骨骼物理模拟 乳摇

打开角色的物理资产&#xff0c;如果是下载的或者官方的模型&#xff0c;都会内带物理资产 模拟 可以根据分块模拟当前物体的物理效果 点击右上角的模拟&#xff0c;可以模拟布娃娃系统 Ctrl鼠标右键可以实现对布娃娃施加力的效果。 模拟选中项 模拟选中项可以只模拟一部…

国产10米分辨率的卫星介绍、下载和处理教程

10米分辨率的资源卫星介绍、下载和处理教程 简介 说起免费的10米分辨率卫星影像,大家首先想到的是sentinel卫星。但其实还有我国的中巴地球资源卫星04星(CBERS04)。 中巴地球资源卫星(China Brazil Earth Resources Satellite, CBERS)是中国和巴西共同投资、联合研制的地球…

【2023研电赛】安谋科技企业命题三等奖作品: 短临天气预报AI云图分析系统

本文为2023年第十八届中国研究生电子设计竞赛安谋科技企业命题三等奖分享&#xff0c;参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&#xff01;&#xff0c;分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来…

电子厂生产管理系统解决方案

越来越多的企业开始意识到数字化转型的重要性。在这个过程中&#xff0c;生产型企业面临着许多挑战&#xff0c;例如如何提高生产效率、节省企业资源以及改善生产工艺流程和产品质量。有一种解决方案可以帮助企业应对这些挑战&#xff0c;那就是生产管理系统。 生产管理系统是一…

第九章 动态规划part12(代码随想录)

309.最佳买卖股票时机含冷冻期 1. 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff0c;第i天状态为j&#xff0c;所剩的最多现金为dp[i][j]。 2. 确定递推公式 拆分卖出股票状态是因为冷冻期前一天一定是具体卖出股票状态。 状态一 dp[i][0]&…

NV21、NV12、YV12、RGB565、YUV等颜色编码格式区别和接口设计探讨

NV21、NV12、YV12、RGB565、YUV扫盲 NV21、NV12、YV12、RGB565、YUV分别是不同的颜色编码格式&#xff0c;这些颜色编码格式各有特点&#xff0c;适用于不同的应用场景。选择合适的颜色编码格式取决于具体的需求和环境&#xff1a; NV21&#xff1a;NV21是一种用于Android系统…

go语言-协程

mOS结构体 每一种操作系统不同的线程信息 g给g0栈给g0协程内存中分配的地址&#xff0c;记录函数跳转信息&#xff0c; 单线程循环 0.x版本 1.0版本 多线程循环 操作系统并不知道Goroutine的存在 操作系统线程执行一个调度循环&#xff0c;顺序执行Goroutine 调度循环非常…