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

23.Redis核心数据结构

一、String(k-v)

字符串常规操作

备注

应用场景

SET key value

存入字符转键值对

单值缓存、对象缓存

MSET [key value, key value]

批量存储字符串键值对

对象缓存

SETNX key value

存入一个不存在的键值对

分布式锁

GET KEY

获取一个字符串键值

MGET [key,key,key]

批量获取字符串值

DEL [key,key]

删除键

EXPIPE key seconds

设置一个键的过期时间

原子加减

INCR key

将key中存储的数字值加1

阅读量、登录统计

DECR key

将key中存储的数字值减1

INCRBY key increment

将key中存储的数字值加上increment

分布式全局序列号

DECRBY key decrement

将key中存储的数字值减去decrement

•单值缓存
SET  key  value  
GET  key
•对象缓存
1) SET  user:1  value(json格式数据)
2) MSET  user:1:name  xhz user:1: age 18MGET  user:1:name   user:1:age
•分布式锁SETNX  product:10001  true   //返回1代表获取锁成功SETNX  product:10001  true   //返回0代表获取锁失败//执行业务操作DEL  product:10001  //执行完业务释放锁SET product:10001 true  ex  10  nx  //防止程序意外终止导致死锁
•计数器
INCR article:readcount:{文章id}   
GET article:readcount:{文章id}
•分布式系统全局序列号 
INCRBY  orderId  1000  //redis批量生成序列号提升性能

二、Hash(k-(k,v))

Hash常规操作

备注

应用场景

HSET key field value

存储一个哈希表key的键值

对象缓存

HSETNX key field value

存储一个不存在的哈希表key的键值

HMSET key field value[field value.…]

在一个哈希表key中存储多个键值对

HGET key field

获取哈希表key对应的field键值

HMGET key field[field...]

批量获取哈希表key中多个field键值

HDEL key field[field..…]

删除哈希表key中的field键值

HLEN key

返回哈希表key中field的数量

HGETALL key

返回哈希表key中所有的键值

HINCRBY key field increment

为哈希表key中field键的值加上增量increment

•对象缓存
HMSET  user  {userId}:name xzh {userId}:age 18
HMSET  user  1:name  xhz  1:age  18
HMGET  user  1:name  1:age  
•电商购物车
1)以用户id为key
2)商品id为field
3)商品数量为value
•购物车操作
1)添加商品->hset cart:1001 10088 1
2)增加数量->hincrby cart:1001 10088 1
3)商品总数->hlen cart:1001
4)删除商品->hdel cart:1001 10088
5)获取购物车所有商品-> hgetall cart:1001

三、List (k,array)

List常规操作

备注

应用场景

LPUSH key value[value..]

将一个或多个值value插入到key列表的表头(最左边)

RPUSH key value[value..]

将一个或多个值value插入到key列表的表尾(最右边)LPOP key/移除并返回key列表的头元素

LPOP key

移除并返回key列表的头元素

RPOP key

移除并返回key列表的尾元素

LRANGE key start stop

返回列表key中指定区间内的元素,区间以偏移量start和stop指定

BLPOP key[key...]timeout

从key列表表头弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待

BRPOP key[key...]timeout

从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待

•常用数据结构
Stalck(栈)=LPUSH+LPOP
Queue(队列)=LPUSH+RPOP
Blocking MQ(阻塞队列)=LPUSH+BRPOP
•微博和微信公号消息流
xzh关注了MacTalk,备胎说车等大V
1)MacTalk发微博,消息ID为10018
LPUSH  msg:{xzh-ID}  10018
2)备胎说车发微博,消息ID为10086
LPUSH  msg:{xzh-ID} 10086
3)查看最新微博消息
LRANGE  msg:{xzh-ID}  0  4

四、Set(k,array)

Set常用操作

备注

应用场景

SADD key member[member..]

往集合key中存入元素,元素存在则忽略,若key不存在则新建

SREM key member[member...]

从集合key中删除元素

SMEMBERS key

获取集合key中所有元素

SISMEMBER key member

判断member元素是否存在于集合key中

SRANDMEMBER key[count]

从集合key中选出count个元素,元素不从key中删除

SPOP key[count]

从集合key中选出count个元素,元素从key中删除

Set运算操作

SINTER key[key...]

交集运算

SINTERSTORE destination key[key.]

将交集结果存入新集合destination中

SUNION key[key..]

并集运算

SUNIONSTORE destination key[key...]

将并集结果存入新集合destination中

SDIFF key[key..]

差集运算

SDIFFSTORE destination key[key..]

将差集结果存入新集合destination中

•微信抽奖小程序
1)点击参与抽奖加入集合
SADD key{userlD}
2)查看参与抽奖所有用户
SMEMBERS key
3)抽取count名中奖者
SRANDMEMBER key[count]/SPOP key[count]•微信微博点赞,收藏,标签
1)点赞
SADD like:{消息ID}{用户ID}
2)取消点赞
SREM like:{消息ID}{用户ID}
3)检查用户是否点过赞
SISMEMBER like:{消息ID}{用户ID}
4)获取点赞的用户列表
SMEMBERS like:{消息ID}
5)获取点赞用户数
SCARD like:{消息ID}
\

五、ZSet有序集合操作(k,array)

ZSet常用操作

备注

应用场景

ZADD key score member[score member]

往有序集合key中加入带分值元素

ZREM key member[member...]

从有序集合key中删除元素

ZSCORE key member

返回有序集合key中元素member的分值

ZINCRBY key increment member

为有序集合key中元素member的分值加上increment

ZCARD key

返回有序集合key中元素的个数

ZRANGE key start stop[WITHSCORES]

正序获取有序集合key从start下标到stop下标的元素

ZREVRANGE key start stop[WITHSCORES]

倒序获取有序集合key从start下标到stop下标的元素

Zset集合操作

ZUNIONSTORE destkey numkeys key[key..…]

并集计算

ZINTERSTORE destkey numkeys key[key..…]

交集计算

•Zset集合操作实现排行榜
1)点击新闻
ZINCRBY hotNews:20190819 1 守护香港
2)展示当日排行前十
ZREVRANGE hotNews:20190819 0 9 WITHSCORES
3)七日搜索榜单计算
ZUNIONSTORE hotNews:20190813-201908197
hotNews:20190813 hotNews:20190814..hotNews:20190819
4)展示七日排行前十
ZREVRANGE hotNews:20190813-20190819 0 9 WITHSCORES

相关文章:

23.Redis核心数据结构

一、String(k-v) 字符串常规操作 备注 应用场景 SET key value 存入字符转键值对 单值缓存、对象缓存 MSET [key value, key value] 批量存储字符串键值对 对象缓存 SETNX key value 存入一个不存在的键值对 分布式锁 GET KEY 获取一个字符串键值 MGET [key,key,…...

免费送源码:Node.JS+Express+MySQL Express 流浪动物救助系统 计算机毕业设计原创定制

摘 要 随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发达,流浪动物救助系…...

基于Java+Springboot+Vue开发的旅游景区管理系统

项目简介 该项目是基于JavaSpringbootVue开发的旅游景区管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的旅…...

Python 实现的风控系统(使用了kafka、Faust、模拟drools、redis、分布式数据库)

以下是一个使用 Python 实现的风控系统示例,涵盖以下技术组件: Kafka 消息中间件:用于实时接收支付业务系统传递的交易数据。Faust(Kafka Streams 的 Python 等价):用于流式处理 Kafka 中的消息。规则引擎…...

Linux运维_Rocky8 安装配置Zabbix

Zabbix 是一个开源的监控解决方案,用于监控网络、服务器、应用程序和服务的性能。它提供实时监控、数据收集、告警通知以及图形化界面,方便用户查看和分析监控数据。Zabbix 支持多种数据收集方式,包括 SNMP、IPMI、JMX 和自定义脚本&#xff…...

jQuery Mobile 滚屏事件

jQuery Mobile 滚屏事件 在移动开发中,滚屏事件是一个非常重要的交互方式,它可以让用户通过滚动屏幕来浏览内容。jQuery Mobile 是一个流行的移动框架,它提供了一套丰富的组件和事件,使得在移动设备上实现滚屏效果变得简单。本文将详细介绍 jQuery Mobile 中的滚屏事件,包…...

3.1.1ReactOS系统中搜索给定长度的空间地址区间函数的实现

系列文章目录 //搜索给定长度的空间地址区间 MmFindGap(); PMADDRESS_SPACE AddressSpace,//该进程用户空间 ULONG_PTR Length,//寻找的空间间隔大小 ULONG_PTR Granularity,//粒度位,表明空间起点的对齐要求,注意是起…...

arm64系统不支持32位的解决armel armhf

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...

【毕业设计】工具大礼包之『Maven3.6.3安装与配置』

系统版本 电脑系统:Windows 10 一.Maven下载 🎯 统一版本 apache-maven-3.6.3,下面两种下载方式2选1即可 1.官网直下 官网下载地址 https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/ 找到apache-maven-3.6.3-bin.zip 云盘…...

gin入门教程(9):路由分组与路由版本控制

在使用 Gin 框架构建 RESTful API 时,路由分组与版本控制是一种常见的实践,可以帮助你更好地管理不同版本的 API。下面是如何在 Gin 中实现路由分组和版本控制的示例。 目录结构 /hello-gin │ ├── cmd/ │ └── main.go ├── api/ │ ├── v1/ │ │ └─…...

rt-thread移植SystemView中遇到的问题

源代码地址dujunqiu/SystemView 我使用的rt-thread版本是5.2.0,应该是rt-thread适配的还有点问题 报错处理 1:warning: #223-D: function “typeof” declared implicitly 如下 typedef 的warning是C99规范没有typedef的定义,需要在keii中…...

【C++STL】list的模拟实现

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山冈! 🔥 所属专栏:C深入学习笔记 💫 欢迎来到我的学习笔记! 一、三个类与成员函数接口 在list.…...

以30个面试问题和案例为导向:全面解析 Java Servlet是什么?基本概念、实现原理、生命周期、类结构、请求与响应的处理机制,以及性能优化和安全性管理

Servlet 是 Java Web 开发的核心组件之一,负责处理客户端请求并生成动态响应。本文将深入探讨 Servlet 的基本概念、实现原理、生命周期、类结构、请求与响应的处理机制,以及性能优化和安全性管理,帮助开发者从多方面掌握 Servlet。 文章目录…...

MFC小游戏设计

框架: 各个界面: 用户: 登录注册:账号和密码(昵称) 主菜单:各种游戏,查看自己信息(积分,装备【游戏数据】),退出 游戏界面&#…...

[漏洞挖掘与防护] 04.Windows系统安全缺陷之5次Shift漏洞启动计算机机理分析

这是作者新开的一个专栏——“漏洞挖掘与防护”,前期会复现各种经典和最新漏洞,并总结防护技巧;后期尝试从零学习漏洞挖掘技术,包括Web漏洞和二进制及IOT相关漏洞,以及Fuzzing技术。新的征程,新的开启,漫漫长征路,偏向虎山行。享受过程,感谢您的陪伴,一起加油~ 欢迎关…...

​手机极简待办app哪款好用?

在快节奏的现代生活中,我们常常需要处理大量的任务和信息,这时候一款好用的极简待办软件就显得尤为重要。它们不仅能帮助我们记录和管理待办事项,还能提高我们的工作效率和生活质量。 在众多的待办软件中,敬业签是一款非常受欢迎…...

SpringBoot高级-底层原理

目录 1 SpringBoot自动化配置原理 01-SpringBoot2高级-starter依赖管理机制 02-SpringBoot2高级-自动化配置初体验 03-SpringBoot2高级-底层原理-Configuration配置注解 04-SpringBoot2高级-底层原理-Import注解使用1 05-SpringBoot2高级-底层原理-Import注解使用2 06-S…...

LabVIEW提高开发效率技巧----插入式架构

随着LabVIEW项目规模的扩大和系统复杂性的增加,传统的单一代码架构难以应对后期维护和功能扩展的需求。插入式架构(Plug-In Architecture)作为一种模块化设计方式,通过动态加载和运行子VI,使系统功能更加灵活、模块化&…...

MySQL COUNT(*)、COUNT(1)、COUNT(id)、COUNT(字段)效果及性能

文章目录 前言COUNT(exper)COUNT(*)优化COUNT(*) 与COUNT(1) COUNT(1)COUNT(id)COUNT(字段)总结参考 前言 业务开发中,我们经常要使用count做一些数据统计。今天根据MySQL5.7官方文档及丁奇老师的MySQL45讲,介绍一下COUNT(*)、COUNT(1)、COUNT(id)、COU…...

webpack4 - 动态导入文件 dynamic-import 报错的解决方法

介绍 webpack4动态导入文件报错,按照错误提示安装了插件,但未果。。 最后查到一个可行方案,记录如下。 1.通过懒加载的方式动态引入文件 const router new Router({routes: [{path: /home,name: Home,component: () >import(./views/h…...

idea大量爆红问题解决

问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色&#xf…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...