当前位置: 首页 > 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
http://www.lryc.cn/news/22361.html

相关文章:

  • 【跟着ChatGPT学深度学习】ChatGPT带我入门NLP
  • RGB888与RGB565颜色
  • 常见的域名后缀有哪些?不同域名后缀的含义是什么?
  • LevelDB架构介绍以及读、写和压缩流程
  • 华为OD机试模拟题 用 C++ 实现 - 快递货车(2023.Q1)
  • 伺服三环控制深层原理解析
  • Cornerstone完整的基于 Web 的医学成像平台(一)
  • 老板让我在Linux中使用traceroute排查服务器网络问题,幸好我收藏了这篇文章!
  • 一文读懂【数据埋点】
  • Qt图片定时滚动播放器+透明过渡动画
  • 手把手带你做一套毕业设计-征程开启
  • 万字解析 Linux 中 CPU 利用率是如何算出来的?
  • 芯驰(E3-gateway)开发板环境搭建
  • HiveSql一天一个小技巧:如何巧用分布函数percent_rank()求去掉最大最小值的平均薪水问题
  • 【python实现华为OD机试真题】优雅子数组【2023 Q1 | 200分】
  • 九种分布式ID解决方案
  • RocketMQ源码分析
  • 跟着我从零开始入门FPGA(一周入门系列)第六天
  • 2023最新JVM面试题汇总进大厂必备
  • Cocoa-presentViewController
  • Vue Mixins
  • Django-版本信息介绍-版本选择
  • 写给交互设计新手的信息架构全方位指南
  • 15、主从复制,gtid,并行复制,半同步复制,实操案例,常用命令,故障处理
  • 【C语言】实现文件内容映射转移
  • html css输入框获得焦点、失去焦点效果
  • Spark Streaming
  • [kubernetes]-k8s通过psp限制nvidia-plugin插件的使用
  • 简单易懂又非常牛逼的Spring源码解析,推断构造与bean的实例化
  • Win11的两个实用技巧系列清理磁盘碎片、设置系统还原点的方法