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

【分布式缓存学习篇】Redis数据结构

一、Redis的数据结构

在这里插入图片描述

二、String 数据结构

2.1 字符串常用操作

//存入字符串键值对
SET  key  value  
//批量存储字符串键值对           
MSET  key  value [key value ...]     
//存入一个不存在的字符串键值对
SETNX  key  value 
//获取一个字符串键值        
GET  key      
//批量获取字符串键值       
MGET  key  [key ...]       
//删除一个键  
DEL  key  [key ...]     
//设置一个键的过期时间(秒)    
EXPIRE  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

对象缓存

SET  user:1  value(json格式数据)MSET  user:1:name  zhuge   user:1:balance  1888
MGET  user:1:name   user:1:balance 

2.2 应用场景

分布式锁

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}

通过计数器方式实现某个文章的阅读数

存在的问题

注意:万级以上的QPS,会导致一瞬间CPU 100%

在这里插入图片描述

三、Hash 数据结构

3.1 Hash常用操作

存储一个哈希表key的键值

HSET  key  field  value             

如何哈希表中key的键值 不存在,则执行set

HSETNX  key  field  value         

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

HMSET  key  field  value [field value ...]     

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

HGET  key  field               

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

 HMGET  key  field  [field ...]         

删除哈希表key中的field键值

HDEL  key  field  [field ...]         

返回哈希表key中field的数量

HLEN  key               

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

HGETALL  key                

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

HINCRBY  key  field  increment        

对象缓存

HMSET  user  {userId}:name  zhuge  {userId}:balance  1888
HMSET  user  1:name  zhuge  1:balance  1888HMGET  user  1:name  1:balance

在这里插入图片描述

3.2 HASH应用场景

HSET  key field value;

电商购物车

  1. 以用户id为key
  2. 商品id为field
  3. 商品数量为value

购物车操作

添加商品

hset cart:1001 10088 1

增加数量

hincrby cart:1001 10088 1

商品总数

hlen cart:1001

删除商品

hdel cart:1001 10088

获取购物车所有商品

hgetall cart:1001

四、List数据结构

4.1 List常用操作

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

LPUSH  key  value [value ...]     

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

RPUSH  key  value [value ...]      

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

LPOP  key   

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

RPOP  key   

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

LRANGE  key  start  stop      

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

BLPOP  key  [key ...]  timeout    

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

BRPOP  key  [key ...]  timeout     

在这里插入图片描述

4.2 用List可以实现的数据结构

Stack() = LPUSH + LPOP
Queue(队列)= LPUSH + RPOP
Blocking MQ(阻塞队列)= LPUSH + BRPOP

4.3 List 应用场景

微博消息和微信公号消息

数据量小场景
诸葛老师关注了MacTalk,备胎说车等大V
1)MacTalk发微博,消息ID为10018

LPUSH  msg:{诸葛老师-ID}  10018

2)备胎说车发微博,消息ID为10086

LPUSH  msg:{诸葛老师-ID} 10086

3)查看最新微博消息

LRANGE  msg:{诸葛老师-ID}  0  4

相关文章:

【分布式缓存学习篇】Redis数据结构

一、Redis的数据结构 二、String 数据结构 2.1 字符串常用操作 //存入字符串键值对 SET key value //批量存储字符串键值对 MSET key value [key value ...] //存入一个不存在的字符串键值对 SETNX key value //获取一个字符串键值 GET ke…...

【跟着ChatGPT学深度学习】ChatGPT带我入门NLP

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...

RGB888与RGB565颜色

颜色名称RGB888原色RGB565还原色英RGB888[Hex]RGB888_R[Hex]RGB888_G[Hex]RGB888_B[Hex]RGB565[Hex]RGB565_R[Hex]RGB565_G[Hex]RGB565_B[Hex]黑色Black0x0000000000000x0000000昏灰Dimgray0x6969696969690x6B4DD1AD灰色Gray0x8080808080800x8410102010暗灰Dark Gray0xA9A9A9A9…...

常见的域名后缀有哪些?不同域名后缀的含义是什么?

域名发展至今,已演变出各种各样的域名后缀,导致很多网站管理人员在注册域名时不知该如何选择。下面,中科三方针对常见域名后缀种类,以及不同域名后缀的含义做下简单介绍。 什么是域名后缀? 域名是由一串由点分隔开的…...

LevelDB架构介绍以及读、写和压缩流程

LevelDB 基本介绍 是一个key/value存储,key值根据用户指定的comparator排序。 特性 keys 和 values 是任意的字节数组。数据按 key 值排序存储。调用者可以提供一个自定义的比较函数来重写排序顺序。提供基本的 Put(key,value),Get(key),…...

华为OD机试模拟题 用 C++ 实现 - 快递货车(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明快递货车题目输入输出示例一输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单…...

伺服三环控制深层原理解析

我们平时使用的工业伺服,通常是成套伺服,即驱动器和电机型号存在配对关系。 但有些时候,我们要用电机定转子和编码器制作非成套电机,这种时候,我们需要对驱动器进行各种设置才能驱动电机。 此篇文章将通过介绍伺服控制的三环控制原理入手来说明我们调试非成套伺服时需要…...

Cornerstone完整的基于 Web 的医学成像平台(一)

1.简介 Cornerstone是一个开源的基于Web的医学成像平台,它提供了一个易于使用的界面,可以用于加载、显示和处理医学图像。Cornerstone可以用于许多医学图像处理应用程序,例如计算机断层扫描(CT)、磁共振成像&#xff…...

老板让我在Linux中使用traceroute排查服务器网络问题,幸好我收藏了这篇文章!

一、前言 作为网络工程师或者运维工程师,traceroute命令不会陌生,它的作用类似于ping命令,用于诊断网络的连通性,不过traceroute命令输出的命令会比ping命令丰富的多,可以跟踪从源系统到目标系统的路径。 很多工程师…...

一文读懂【数据埋点】

数据埋点是数据采集领域(尤其是用户行为数据采集领域)的术语,指的是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。比如用户某个icon点击次数、观看某个视频的时长等等。 数据分析是我们获得需求的来源之一&#xff0c…...

Qt图片定时滚动播放器+透明过渡动画

目录参考结构PicturePlay.promain.cppmyqlabel.h 自定义QLabelmyqlabel.cpp自定义QLabelpictureplay.hpictureplay.cpppictureplay.uistyle.qss效果源码参考 Qt图片浏览器 QT制作一个图片播放器 Qt中自适应的labelpixmap充满窗口后,无法缩小只能放大 Qt的动画类修改…...

手把手带你做一套毕业设计-征程开启

本文是《手把手带你做一套毕业设计》专栏的开篇,文本将会包含我们创作这个专栏的初衷,专栏的主体内容,以及我们专栏的后续规划。关于这套毕业设计的作者呢前端部分由狗哥负责,服务端部分则由天哥操刀。我们力求毕业生或者新手通过…...

万字解析 Linux 中 CPU 利用率是如何算出来的?

在线上服务器观察线上服务运行状态的时候,绝大多数人都是喜欢先用 top 命令看看当前系统的整体 cpu 利用率。例如,随手拿来的一台机器,top 命令显示的利用率信息如下 这个输出结果说简单也简单,说复杂也不是那么容易就能全部搞明白…...

芯驰(E3-gateway)开发板环境搭建

1-Windows下环境配置 可以在Windows上使用命令行或者IAR IDE编译SSDK项目。Windows编译依赖的工具已经包含在 prebuilts/windows 目录中,包括编译器、Python和命令行工具。 1.1.1 CMD SSDK集成 msys 工具,可以在Windows命令行中完成SDK的配置、编译和…...

HiveSql一天一个小技巧:如何巧用分布函数percent_rank()求去掉最大最小值的平均薪水问题

0 问题描述参考链接(3条消息) HiveSql面试题12--如何分析去掉最大最小值的平均薪水(字节跳动)_莫叫石榴姐的博客-CSDN博客文中已经给出了三种解法,这里我们借助于此题,来研究如何用percent_rank()函数求解,简化解题思路…...

【python实现华为OD机试真题】优雅子数组【2023 Q1 | 200分】

题目描述 如果一个数组Q中出现次数最多的元素出现大于等于K次,被称为k-优雅数组,k也可以被称为优雅阈值只。 例如: 数组1,2, 3, 1、2, 3, 1,它是一个3-优雅数组,因为元素1出现次数大于等于3次, 数组[1,2, 3, 1, 2]就不是一一个3-优雅数组,因为其中出现次数最多的元素是1和…...

九种分布式ID解决方案

文章目录背景1、UUID2、数据库自增ID2.1、主键表2.2、ID自增步长设置3、号段模式4、Redis INCR5、雪花算法6、美团(Leaf)7、百度(Uidgenerator)8、滴滴(TinyID)总结比较背景 在复杂的分布式系统中,往往需要对大量的数据进行唯一标识,比如在对一个订单表…...

RocketMQ源码分析

RocketMQ源码深入剖析 1 RocketMQ介绍 RocketMQ 是阿里巴巴集团基于高可用分布式集群技术,自主研发的云正式商用的专业消息中间件,既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠…...

跟着我从零开始入门FPGA(一周入门系列)第六天

6、有限状态机状态机,只要C代码写过2年的人,估计无人不识君,稍微复杂的逻辑都可以借助状态机来简化问题。为了方便,我们使用前面用过的一个例子,来说明状态机的应用,也就是说我们前面已经有意无意的用过状态…...

2023最新JVM面试题汇总进大厂必备

JVM 面试题汇总 1.什么是 JVM?它有什么作用? 答:JVM 是 Java Virtual Machine(Java 虚拟机)的缩写,顾名思义它是一个虚 拟计算机,也是 Java 程序能够实现跨平台的基础。它的作用是加载 Java 程…...

从源码到桌面:手把手教你用Python搭建SimpleFOCStudio开发环境(Windows/Mac)

从源码到桌面:手把手教你用Python搭建SimpleFOCStudio开发环境(Windows/Mac) 在开源硬件和电机控制领域,SimpleFOCStudio已成为开发者调试无刷电机的利器。不同于直接下载可执行文件的"快餐式"使用,从源码构…...

ESP32无人机终极指南:从零开始打造你的开源飞控系统

ESP32无人机终极指南:从零开始打造你的开源飞控系统 【免费下载链接】esp-drone Mini Drone/Quadcopter Firmware for ESP32 and ESP32-S Series SoCs. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-drone 你是否梦想过亲手打造一架能够稳定飞行、…...

从《蜘蛛侠》到《黑客帝国》:聊聊大厂PCG管线里,美术和程序怎么‘分锅’与协作

从《蜘蛛侠》到《黑客帝国》:游戏工业化中的美术与程序协作范式演进 当《漫威蜘蛛侠》的虚拟曼哈顿在玩家眼前展开时,很少有人意识到这座数字城市的每块砖石都凝结着美术与程序团队的博弈。而在《黑客帝国:觉醒》的完全程序化都市里&#xff…...

常用命令大全

一、日常工具(最常用)calc:计算器notepad:记事本mspaint:画图工具osk:屏幕键盘write / wordpad:写字板explorer:文件资源管理器shell:recyclebinfolder:回收站shell:down…...

为AI助手打造企业级FTP/SFTP操作引擎:告别重复脚本,实现智能文件部署

1. 项目概述:为AI助手量身打造的FTP/SFTP操作引擎如果你和我一样,经常让AI助手(比如Claude、Cursor、Windsurf)帮忙写代码、部署项目,那你肯定遇到过这个让人哭笑不得的场景:AI能帮你从零开始配置一台VPS&a…...

构建个人知识记忆桥梁:从数据抽取到智能检索的工程实践

1. 项目概述:一个连接记忆与未来的桥梁最近在开源社区里,我注意到一个挺有意思的项目,叫leninejunior/engrene-memory-bridge。光看这个名字,就透着一股子“连接”和“记忆”的味道。作为一个长期在数据工程和知识管理领域摸爬滚打…...

【Matlab】MATLAB教程:Simulink与MATLAB交互(MATLAB函数模块案例+混合编程仿真)

MATLAB教程:Simulink与MATLAB交互(MATLAB函数模块案例+混合编程仿真) 本教程适配MATLAB R2020a及以上版本,聚焦Simulink与MATLAB交互核心技能,以MATLAB函数模块为核心案例,详解混合编程仿真的全流程,无需深厚编程基础,纯实操导向、案例可直接复刻,适配高校课程设计、…...

Cursor AI代码助手:重塑IDE开发体验,从智能补全到项目级协作

1. 项目概述:当AI代码助手遇上IDE,Cursor如何重塑开发体验 如果你是一名开发者,最近一定在圈子里频繁听到“Cursor”这个名字。它不是一个全新的编程语言,也不是一个颠覆性的框架,但它却实实在在地在改变着许多人的编码…...

株洲彩钢板厂家

彩钢板 彩色涂层钢板 以冷轧/镀锌钢板为基材,表面脱脂、磷化后,辊涂彩色有机涂层(聚酯、氟碳等),再烘烤成型。二、主要分类(3大类)1. 彩钢压型板(单板/彩钢瓦)• 结构&a…...

Unity 2D横版闯关游戏:从零到一构建像素风丛林冒险

1. 像素风游戏的前期准备 第一次打开Unity时,看着空荡荡的场景视图,我完全不知道从哪里开始。后来发现,制作2D横版游戏就像搭积木,需要先准备好所有零件。这里分享我制作《丛林法则》时的完整筹备过程。 像素风游戏最迷人的就是那…...