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

目录

一、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.mzph.cn/news/61594.shtml

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

相关文章

VBA技术资料MF50:VBA_在Excel中突出显示前3个值

【分享成果,随喜正能量】人受到尊重,不是因为权钱,而是他骨子里透出的,正直与善良。。 我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高…

ChatGPT 总结数据分析的所有知识点

ChatGPT功能非常多,特别是对某个行业,某个方向,某个技术进行总结那是相当专业的。 如下图。 直接用一个指令便总结出来数据分析当中的所有知识点内容。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Ex…

day01-ES6新特性以及ReactJS入门

课程介绍 ES6新特性ReactJS入门学习 1、ES6 新特性 1.2、let 和 const 命令 var 之前,我们写js定义变量的时候,只有一个关键字: var var 有一个问题,变量作用域的问题,作用域不可控,就是定义的变量有时会…

嵌入式开发之syslog和rsyslog构建日志记录

1.syslogd作客户端 BusyBox v1.20.2 (2022-04-06 16:19:14 CST) multi-call binary.Usage: syslogd [OPTIONS]System logging utility-n Run in foreground-O FILE Log to FILE (default:/var/log/messages)-l N Log only messages more urge…

自动化备份方案

背景说明 网上有很多教程,写的都是从零搭建一个什么什么,基本上都是从无到有的教程,但是,很少有文章提及搭建好之后如何备份,我觉得备份才是一个系统生命周期内永恒的主题,是一个值得花时间严肃对待的问题…

Leetcode328 奇偶链表

思路:分别处理奇偶,保存奇偶的第一个和最后一个节点,注意最后链接的时候需要把偶数的next去掉再拼接不然就成环了 class Solution:def oddEvenList(self, head: ListNode) -> ListNode:if not head or not head.next or not head.next.ne…

设计模式--模板方法模式(Template Method Pattern)

一、什么是模板方法模式(Template Method Pattern) 模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤的实现延迟到子类中。模板方法模式允许在不改变算法的…

OpenCV c++ 使用imshow显示灰色窗口

OpenCV使用imshow显示灰色窗口 原因是使用了system(‘pause’);函数,只需要将该函数去掉,使用opencv中的对应函数 waitKey(0) 即可实现同样效果。 system(“pause”); 改为: cv::waitKey(0); 显示效果:

适配ADRC自抗扰控制算法的MFP450-ADRC 套件焕新而来

关注 FMT 开源自驾仪的开发者可能知道,早在 2018 年 7 月 FMT开源自驾仪的早期版本就已经实现了 ADRC 算法。 经过几年的发展,FMT 在自抗扰控制算法的适配上做了进一步的优化,为了方便科研工作者和开发者快速上手,我们针对搭载 F…

并发编程的故事——共享模型之内存

共享模型之内存 文章目录 共享模型之内存一、JVM内存抽象模型二、可见性三、指令重排序 一、JVM内存抽象模型 主要就是把cpu下面的缓存、内存、磁盘等抽象成主存和工作内存 体现在 可见性 原子性 有序性 二、可见性 出现的问题 t线程如果频繁读取一个静态变量,那…

解决Spring Data JPA中的NullPointerException问题

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

苹果为 Vision Pro 头显申请游戏手柄专利

苹果Vision Pro 推出后,美国专利局公布了两项苹果公司申请的游戏手柄专利,其中一项的专利图如下图所示。据 PatentlyApple 报道,虽然申请专利并不能保证苹果公司会推出游戏手柄,但是苹果公司同时也为游戏手柄申请了商标&#xff0…

性能优化维度

CPU 首先检查 cpu,cpu 使用率要提升而不是降低。其次CPU 空闲并不一定是没事做,也有可能是锁或者外部资源瓶颈。常用top、vmstat命令查看信息。 vmstat 命令: top: 命令 IO iostat 命令: Memory free 命令: 温馨提示&#xff1a…

postgresql-窗口函数

postgresql-窗口函数 简介窗口函数的定义分区选项(PARTITION BY)排序选项(ORDER BY)窗口选项(frame_clause) 聚合窗口函数排名窗口函数演示了 CUME_DIST 和 NTILE 函数 取值窗口函数 简介 常见的聚合函数&…

因果推断(六)基于微软框架dowhy的因果推断

因果推断(六)基于微软框架dowhy的因果推断 DoWhy 基于因果推断的两大框架构建:「图模型」与「潜在结果模型」。具体来说,其使用基于图的准则与 do-积分来对假设进行建模并识别出非参数化的因果效应;而在估计阶段则主要…

雅思写作 三小时浓缩学习顾家北 笔记总结(二)

目录 饥饿网一百句翻译 Using government funds for pollution cleanup work can create a comfortable environment. "Allocating government funds to pollution cleanup work can contribute to the creation of a comfortable environment." Some advertise…

ChatGPT的局限性及商业化应用限制讨论

首先,ChatGPT仅使用公开可用的信息,这是其第一个局限。如果基础信息缺失、过时、模糊或过于泛化,AI生成的内容就将不会准确。 只有在使用企业内部专有信息和知识创建特定的GPT时,才会出现真正的商业化解决方案。但对企业而言&…

Opencv基于文字检测去图片水印

做了一个简单的去水印功能,基于文字检测去图片水印。效果如下: 插件功能代码参考如下: using namespace cv::dnn; TextDetectionModel_DB *textDetector0; void getTextDetector() {if(textDetector)return;String modelPath "text_de…

【MySQL】3、MySQL的索引、事务、存储引擎

create table class (id int not null,name char(10),score decimal(5,2)); insert into class values (1,zhangsan,80.5); update class set namewangwu,passwd123 where id2; select * from class where id2; drop 索引的概念 是一种帮助系统,能够更快速的查询信…

es6·await/async案例笔记

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>await/async案例笔记</title> </head> …