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 和自定义脚本ÿ…...
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…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
