当前位置: 首页 > 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…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

反射获取方法和属性

Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...