数据结构-Redis(三)

news2025/1/20 1:51:44

前面介绍了redis的String和哈希,接下来看看其他的数据结构

  • List

LPUSH:左边放入

RPUSH:右边放入

LPOP:取出左边第一个数,并且移除

RPOP:取出右边第一个数,并且移除

 

由上操作可以看出,先进后出,符合栈的原则,所以用list命令实现栈非常容易。

同理如果选择使用LPUSH 和 RPOP,这时候 则先进先出,符合队列原则

Blocking MQ(阻塞队列)可以用LPUSH 和 BRPOP

BLPOP key timeout

解析:BLPOP从列表的左边弹出一个元素,若列表没有元素,阻塞等待timeout秒,

如果timeout=0,则一直阻塞。

BRPOP key timeout

右边弹出一个从列表的右边弹出一个元素,若列表没有元素,阻塞等待timeout秒,

如果timeout=0,则一直阻塞。

LRANGE key 0 5,则可以实际作用于微信公众号和微博推送,按顺序推送前五个发消息给你的文章显示出来,这种redis实现比数据库实现效率高很多。

  • SET

1、抽奖

Set会自动去重,比如抽奖的情况下,防止用户重复抽奖,如图可以看到,李四sadd了两次,但是并没有成功,用SMEMBERS 可以看到所有用户。

SRANDMEMBER  key 2:随机在key抽取两个随机数。

所以用SRANDMEMBER就可以实现抽奖的功能。

这种抽奖抽完还是会在集合中,不会移除,如何抽奖完直接移除呢?

SPOP key 1:这个也是随机抽奖,但是抽完会直接移除。

 

2、朋友圈点赞

另外set也非常适合朋友圈点赞,比如

给某人朋友圈点赞的张三和李四,也可以用SREM 取消点赞

可以查看某人是否点赞SISMEMBER

可以查看总点赞数SCARD

也可以查看点赞列表SMEMEBERS

 

除此之外,每个set集合还可以求集合操作。

比如set1{a,b,c},set2{b,c,d},set3{c,d,e}

求三个set集合的交集?

SINTER set1 set2 set3 ->{c}

求三个集合的并集?

SUNION set1 set2 set3->{a,b,c,d,e}

求三个集合的差集?

SDIFF set1 set2 set3->{a}

差集怎么理解的,是第一个集合减去后面两个集合的并集。

因为后面两个并集是 bcde

然后第一个集合减去 abc - bcde

结果留下第一个集合还剩下的元素

所以剩下a

3、朋友圈查看同时关注的人

而这个处理集合最常用的场景就是 朋友圈看互相点赞的功能

我和朋友共同关注的大v,可以互相看到对方的点赞,可以用set交集。

我和朋友同时关注的人,取交集。

我可能关注的人,就是朋友set集合减去我的。

  1. 搜索功能

Set集合还可以用于大家熟知的搜索功能

SADD os:android p40 mi10

SADD brand:huawei p40

SADD brand:iphone iphone14

SADD ram:8G p40 mi-10 iphone 14

搜索点击了8g,并且系统iphone的手机,于是set求并集实现搜索:

SINSERT brand:iphone ram:8g ->{iphone14}

  • ZSET

实际用例则是微博排行榜

ZINCRBY hotNews:20230608 1 mcnxs 代表明朝那些事被用户点击了一次。

ZINCRBY hotNews:20230608 1 st 代表三体被用户点击了一次。

如何展示这些点击数呢?

ZREVRANGE hotNews:20230608 0 3 WITHSCORES

后面的代表数值也一起展示出来。

那么我们现在计算的20230608的,我们如何计算三天呢?

ZUNIONSTORE hotNews:20230608-20230610 3 hotNews:20230608 hotNews:20230609

hotNews:20230610

这样则会求的这三天的排行点击数。后面再用命令显示出来。

ZREVRANGE  hotNews:20230608-20230610 0 9 WITHSCORES

 

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

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

相关文章

chatgpt赋能python:Python中一行输出的方法

Python中一行输出的方法 Python是一种高级编程语言,其语法简洁、易于阅读、丰富的库和解释器使其成为了众多程序员的选择。在Python中有时需要一行输出多个值、变量或者其他信息,因此在本文中将介绍如何在Python中实现一行输出的方法。 一般的输出方法…

chatgpt赋能python:Python如何一行一行运行?

Python 如何一行一行运行? Python是一门广泛应用于开发Web、科学计算、人工智能等领域的高级编程语言。相比其他编程语言,Python简单易学,语法简洁优雅,拥有许多强大的第三方库和工具。但作为一个新手,可能会对Python…

【复习笔记】FreeRTOS(四) 列表项的插入和删除

本文是FreeRTOS复习笔记的第四节,列表项的插入和删除。 上一篇文章: 【复习笔记】FreeRTOS(三)任务挂起和恢复 文章目录 一、列表和列表项1.1. 列表1.2. 列表项1.3. 迷你列表项 二、实验目的三、测试例程四、实验效果 一、列表和列表项 列表和列表项是F…

Dubbo 注册,调用,通信,容错

Dubbo简化模型 3种开发方式 开发方式 举例 特点 XML配置 等 业务代码零侵入 扩展修改方便 注解方式 EnableDubbo DubboService DubboReference 扩展修改方便 修改需要重新编译代码 API编程 DubboBootstrap ServiceConfig ReferenceConfig应用 业务侵入性大 修改复杂…

【前端学习】React学习资料

React 是一种开源的 JavaScript 库,用于构建用户界面。它由 Facebook 开发并维护,已经成为了当今最流行的前端库之一。与其他框架不同,React 主要专注于视图层(View),旨在通过声明式、组件化的方式来构建复…

Pagination分页(antd-design组件库)展示所有配置选项和onChange的作用

1.Pagination分页 采用分页的形式分隔长列表,每次只加载一个页面。 2.何时使用 当加载/渲染所有数据将花费很多时间时; 可切换页码浏览数据。 组件代码来自: 分页 Pagination - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-d…

redis到底是怎么样进行渐进式hash的

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。那么redis的底层是如何来存储数据的呢? 一、redis如何在存储大量的key时候,查询速度还能接近O(1)呢&#xf…

分布式事务方案学习

第100篇文章啦!分布式事务在面试中分布式事务也是十分重要的点,所以学习完分布式锁后我们就来学习分布式事务吧。 事务表示的是我们在业务逻辑中对数据库进行操作的一组单元,需要同时成功或同时失败,不了解的小伙伴们可以看一下下…

Linux编译器-gcc/g++(动静态链接)

目录 一、Linux编译器-gcc/g的使用1.1 背景知识1.2 预处理,编译,汇编,链接1.3 动静态链接 二、补充sudo设置 一、Linux编译器-gcc/g的使用 1.1 背景知识 我们为什么能在windows或者linux下进行C/C或者其它形式的开发呢?前提条件…

我在VScode学Java(Java一维数组、二维数组、JVM中的堆和栈)重制版

​ 我的个人博客主页:如果’真能转义1️⃣说1️⃣的博客主页 关于Java基本语法学习---->可以参考我的这篇博客:《我在VScode学Java》 Java一维数组、二维数组 零._.在Java中_什么是数组Java 数组是一种数据结构,存储一组相同类型的数据。引…

Docker网络模型(七)使用 IPvlan 网络

使用 IPvlan 网络 IPvlan 驱动为用户提供了全面控制 IPv4 和 IPv6 寻址的能力。 IPvlan 让操作者能完全操控二层(数据链路层)网络的 vlan 标签,甚至也提供了三层(网络传输层)路由控制给感兴趣的用户。对于抽象出物理限…

【SpringSecurity】CSRF、环境配置、授权、认证功能、记住我功能实现

SpringSecurity 文章目录 SpringSecurityCSRF跨站请求伪造攻击开发环境搭建认证直接认证使用数据库认证自定义登录界面 授权基于角色的授权基于权限的授权使用注解判断权限 记住我SecurityContext SpringSecurity是一个基于Spring开发的非常强大的权限验证框架,其核…

Java快速安装以及入门指南

安装 Java 环境教程 Java 是一种广泛应用于软件开发、Web 应用程序和移动应用程序等领域的编程语言。如果您要使用 Java 进行开发或运行需要 Java 程序,您需要先在计算机上安装 Java 环境。 本教程将向您介绍如何在 Windows 操作系统上安装和验证 Java 环境。还将…

第2章 可行性研究

文章目录 第2章 可行性研究2.1 可行性研究的任务2.2 可行性研究过程2.3 系统流程图2.3.1符号2.3.3 分层 2.4 数据流图2.4.1 符号1. 数据源点或终点2. 数据加工(变换数据的处理)3. 数据存储4.数据流数据流与数据加工之间的关系 2.4.2绘制数据流图的例子顶…

chatgpt赋能python:Python3.6.5到Python3.7.5:升级指南

Python 3.6.5到Python 3.7.5:升级指南 Python是一种广泛使用的编程语言,拥有强大的库和框架,能够开发各种类型的应用程序。在Python的发行版中,版本更新是常见的过程,以提供更好的性能和新的功能。 本文将介绍如何将…

手记系列之六 ----- 分享个人使用kafka经验

前言 本篇文章主要介绍的关于本人从刚工作到现在使用kafka的经验,内容非常多,包含了kafka的常用命令,在生产环境中遇到的一些场景处理,kafka的一些web工具推荐等等。由于kafka这块的记录以及经验是从我刚开始使用kafka&#xff0…

chatgpt赋能python:Python怎么一行一行读文本?

Python怎么一行一行读文本? 在Python中,要一行一行地读取文本文件,我们可以使用Python内置函数readline()。它每次读取一行文本,并且会自动把文本的换行符\n去掉。下面我们来详细了解如何使用readline()函数读取文本文件。 读取…

4.卡尔曼滤波原理及实战

欢迎访问个人网络日志🌹🌹知行空间🌹🌹 文章目录 0.关于卡尔曼1.卡尔曼滤波算法2.卡尔曼滤波算法的应用一个简单例子一个复杂的例子参考 0.关于卡尔曼 卡尔曼,匈牙利数学家,1930年出生于匈牙利首都布达佩斯…

chatgpt赋能python:Python数据分析:Vlookup函数在Python中的实现

Python数据分析:Vlookup函数在Python中的实现 简介 Vlookup是一种常见的数据分析函数,用于在两个数据表/数据集中查找并关联相应的数据。这个函数是在Excel中非常常见的,但是当我们进行大型数据分析时,我们可以使用Python来实现…

2023.6.8小记——嵌入式系统初识、什么是ARM架构?

今天还挺充实的,早上在图书馆本来想学一下notion,结果看李沐老师的动手深度学习看到十点半,在电脑上配置了李沐老师的d2l和jupyter,等后续有时间的时候再继续学。 下午看了一下notion的使用方法,这玩意初学者用起来是…