Redis常见数据结构的常用命令及引用

2023-11-10

String

1.常用命令

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

2.应用场景

- 单值缓存

SET key value
GET key

- 对象缓存

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

- 分布式锁

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}

- Web集群session共享

spring session + redis实现session共享

- 分布式系统全局序列号

INCRBY orderId 1000

Hash结构

- 对象缓存

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

在这里插入图片描述

- 电商购物车
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
在这里插入图片描述
优点

1)同类数据归类整合储存,方便数据管理
2)相比string操作消耗内存与cpu更小
3)相比string储存更节省空间

缺点

过期功能不能使用在field上,只能用在key上
Redis集群架构下不适合大规模使用

List

常用命令

LPUSH  key  value [value ...] //将一个或多个值value插入到key列表的表头(最左边)
RPUSH  key  value [value ...]//将一个或多个值value插入到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,一直阻塞等待

在这里插入图片描述

List应用场景

实现其他数据结构

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

微博消息和微信公号消息

诸葛老师关注了MacTalk,备胎说车等大V
1)MacTalk发微博,消息ID为10018
LPUSH msg:{诸葛老师-ID} 10018
2)备胎说车发微博,消息ID为10086
LPUSH msg:{诸葛老师-ID} 10086
3)查看最新微博消息
LRANGE msg:{诸葛老师-ID} 0 4

在这里插入图片描述

Set

Set常用操作

SADD  key  member  [member ...]	//往集合key中存入元素,元素存在则忽略,若key不存在则新建
SREM  key  member  [member ...]	//从集合key中删除元素
SMEMBERS  key	//获取集合key中所有元素
SCARD  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}

集合操作

SINTER set1 set2 set3 :{ c }
SUNION set1 set2 set3 :{ a,b,c,d,e }
SDIFF set1 set2 set3 :{ a }

在这里插入图片描述

集合操作实现微博微信关注模型

  1. 诸葛老师关注的人:
    zhugeSet-> {guojia, xushu}
  2. 杨过老师关注的人:
    yangguoSet--> {zhuge, baiqi, guojia, xushu}
  3. 郭嘉老师关注的人:
    guojiaSet-> {zhuge, yangguo, baiqi, xushu, xunyu)
  4. 我和杨过老师共同关注:
    SINTER zhugeSet yangguoSet--> {guojia, xushu}
  5. 我关注的人也关注他(杨过老师):
    SISMEMBER guojiaSet yangguo
    `SISMEMBER xushuSet yangguo
  6. 我可能认识的人:
    SDIFF yangguoSet zhugeSet->(zhuge, baiqi}

集合操作实现电商商品筛选

在这里插入图片描述
SADD brand:huawei P40
SADD brand:xiaomi mi-10
SADD brand:iPhone iphone12
SADD os:android P40 mi-10
SADD cpu:brand:intel P40 mi-10
SADD ram:8G P40 mi-10 iphone12

SINTER os:android cpu:brand:intel ram:8G  {P40,mi-10}

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应用

Zset集合操作实现排行榜

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

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis常见数据结构的常用命令及引用 的相关文章

  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • 有没有办法用Lettuce自动发现Redis集群中新的集群节点IP

    我有一个Redis集群 3主3从 运行在一个库伯内斯簇 该集群通过Kubernetes 服务 Kube 服务 我将我的应用程序服务器连接到 Redis 集群 使用Kube 服务作为 URI 通过 Redis 的 Lettuce java 客
  • Spring Data JPA Redis:无法编写基于自定义方法的查询

    我已经使用 Redis 配置了 Spring Data JPA 并使用RedisRepositorieswith 提供了类似的方法find findAll 所有这些方法似乎都工作得很好 但我无法编写我的自定义方法 RedisEntity f
  • Redis是如何实现高吞吐量和高性能的?

    我知道这是一个非常普遍的问题 但是 我想了解允许 Redis 或 MemCached Cassandra 等缓存 以惊人的性能极限工作的主要架构决策是什么 如何维持连接 连接是 TCP 还是 HTTP 我知道它完全是用C写的 内存是如何管理
  • 如何使redis中的“HSET”子键“过期”?

    我需要使 Redis 哈希中所有超过 1 个月的密钥过期 这不可能 https github com antirez redis issues 167 issuecomment 2559040 为了保持 Redis 简单 https git
  • 想要在后台不间断地运行redis-server

    我已经下载了 redis 2 6 16 tar gz 文件并安装成功 安装后我运行 src redis server 它工作正常 但我不想每次都手动运行 src redis server 而是希望 redis server 作为后台进程持续
  • 如何在Redis中只保存一个数据库?

    我是 Redis 新手 有一个与备份相关的问题 目前 我有一个实例在 Windows 服务器上运行 在这个实例中 我当前有一项 工作 将数据存储在一个数据库中 我不想备份这些数据 我必须创造一份新工作 我的第一个想法是将数据存储在另一个数据
  • 如何将“.csv”数据文件导入Redis数据库

    如何将 csv 数据文件导入 Redis 数据库 csv 文件中包含 id 时间 纬度 经度 列 您能否向我建议导入 CSV 文件并能够执行空间查询的最佳方法 这是一个非常广泛的问题 因为我们不知道您想要什么数据结构 您期望什么查询等等 为
  • Redis 队列工作程序在 utcparse 中崩溃

    我正在尝试按照以下教程获得基本的 rq 工作 https blog miguelgrinberg com post the flask mega tutorial part xxii background jobs https blog m
  • ServiceStack.Redis:无法连接:sPort:

    我经常得到 ServiceStack Redis 无法连接 sPort 0 或 ServiceStack Redis 无法连接 sPort 50071 或其他端口号 当我们的网站比较繁忙时 就会出现这种情况 Redis 本身看起来很好 CP
  • 使用环境变量在 redis.conf 中设置动态路径

    我有一个环境变量MY HOME其中有一个目录的路径 home abc 现在 我有一个redis conf文件 我需要像这样设置这个路径 redis conf pidfile MY HOME local var pids redis pid
  • Redis 中存储整数和字符串的区别

    这两个命令有什么区别吗 LPUSH myset 123 LPUSH myset 123 我想存储大约 500 万个整数 并且我想以最有效的方式做到这一点 不 没有什么区别 两者都存储为字符串 从redis io http redis io
  • 在 Redis 中存储 IP 范围

    我有很多不同提供商的 IP 范围 例如 P1 192 168 1 10 192 168 1 50 192 168 2 16 192 168 2 49 P2 17 36 15 34 17 36 15 255 P3 我将此 IP 转换为 int
  • 具有匹配模式的 ioredis 密钥

    我想用键匹配模式 LOGIN 搜索 Redis 数据库 我在我的应用程序中使用 ioredis 昨天我搜索了整个网络 我得到了一些执行这项工作的选项 如下所示 KEYS 扫描流 Issue import Redis from ioredis
  • Redis 客户端忽略其上设置的配置选项并尝试连接到默认 IP 127.0.01

    在AWS中 我使用ElastiCache Redis服务器并使用节点作为后端和 promise redis 包 这就是我尝试连接到我的 redis 服务器端点的方法 client redis createClient host my red
  • Redis - 错误:值不是有效的浮点数

    我在 Redis 中有一个排序集 我试图通过在Python代码中使用zincrby来更新特定元素的计数器值 例如 conn zincrby usersSet float 1 user1 但它显示错误为 错误 值不是有效的浮点数 我在 cli
  • spring中如何使用jackson代替JdkSerializationRedisSerializer

    我在我的一个 Java 应用程序中使用 Redis 并且正在序列化要存储在 Redis 中的对象列表 但是 我注意到使用 RedisTemplate 会使用 JdkSerializationRedisSerializer 相反 我想使用 J
  • Redis如何存储关联数组?设置、散列还是列表?

    我对 Redis 的所有可用存储选项有点困惑 我想做一些简单的事情 并且不想过度设计它 我正在与phpredis and Redis v2 8 6 我有一个需要存储的简单关联数组 我还需要能够通过其键检索项目并循环遍历所有项目 a arra
  • 如何让 Redis 在 Heroku 上启动?

    我已经添加了RedistogoHeroku 上的 nano 插件 我已经在控制台中成功测试了它 但是 当我的应用程序尝试连接 Redis 时 出现以下错误 Heroku 日志文件 2011 10 12T08 19 50 00 00 app
  • 将redis数据移至MySQL的更快方法

    我们拥有庞大的购物和产品交易系统 我们在 MySQL 方面遇到了很多问题 因此经过几次研发后 我们计划使用 Redis 并开始将 Redis 集成到我们的系统中 继之前直接访问数据库之后 现在我们已经移动了Redis系统 用户购物车详情 关

随机推荐

  • 串级PID与单极PID的区别

    目录 前言 一 什么是串级PID 二 串级PID与单极PID比较 1 控制小车开到某一位置 2 平衡小车速度控制 三 什么时候用串级PID 结语 前言 本文将讲述串级PID与单极PID的区别 并由此引出什么时候用串级PID 对于想深入学习P
  • electron vue3 + ts 初始化项目

    新建 vue3 ts 项目 npm init vitejs app electron demo 选择 vue ts 等待项目创建完成 安装 electron npm i electron D 确认 node modules electron
  • 【C++入门】运算符重载详解

    1 什么是运算符重载 不可重载运算符 运算符含义 成员访问运算符 gt 和 成员指针访问运算符 域运算符 sizeof 长度运算符 条件运算符 预处理符号 1 运算符 运算符分为算术运算符 关系运算符 逻辑运算符 等 2 运算符重载 给运算
  • idea授权服务器

    这里提供一个我已经搭建好的idea授权服务器 http ysk521 cn 1017
  • ctfshow萌新红包题writeup

    ctfshow萌新专属红包题writeup 题目来源 https ctf show 这一题是ctfshow平台上面2月17日更新的一个萌新红包题 当天在官方交流群内知道晚上会有一个萌新红包题之后 就有点期待了 小萌新也想拿一次红包 嘿嘿 下
  • 推挽输出和开漏输出区别

    推挽输出 可以输出高 低电平 连接数字器件 输出 0 时 N MOS 导通 P MOS 高阻 输出0 输出 1 时 N MOS 高阻 P MOS 导通 输出1 不需要外部上拉电路 开漏输出 输出端相当于三极管的集电极 要得到高电平状态需要上
  • 同步代码块、io、file常用的方法、流

    一 同步 1 同步代码块 把要实现线程安全的代码放在同步代码块中 java中任何对象内部都有一个开关 你可以理解为标志位 1就是表示关 0就表示开 2 同步方法 二 io input输入 output输出 计算机中的文件以及文件中的内容 F
  • maven的下载安装配置教程(详细图文)

    maven的下载安装配置教程 详细图文 一 maven的下载 https maven apache org download cgi 下载zip文件 二 maven的安装 注意 maven的安装需要依赖jdk的安装 所以必须先安装完成jdk
  • STM32的PWM相关函数TIM_SetCompare1的一定理解

    void TIM SetCompare1 TIM TypeDef TIMx uint16 t Compare1 Check the parameters assert param IS TIM LIST8 PERIPH TIMx Set t
  • mysql-mmm集群

    一 Mysql mmm集群技术概述 概述 MMM Master Master replication manager for MySQL 是一套支持双主故障切换和双主日常管理的脚本程序 MMM使用Perl语言开发 主要用来监控和管理MySQ
  • RecyclerView(一)—— ListView的使用

    ListView ListView在过去绝对可以称得上是Android中最常用的控件之一 几乎所有的应用程序都会用到它 由于手机屏幕空间比较有限 能够一次性在屏幕上显示的内容并不多 当我们的程序中有大量的数据需要展示的时候 就可以借助Lis
  • vscode给某行代码添加标签

    只有你习惯于一种编程工具风格 vscode几乎都能给你做的 Numbered Bookmarks 数字标签跳转类似与webstrom 定义 Ctrl SHIFT 数字 跳转 Ctrl 数字 vscode给某行代码添加标签 标注 用于代码间快
  • Qt使用QJSEngine执行脚本

    有时候需要进行一些计算 程序是使用c 来实现的 使用c 来进行计算不是很灵活 这时候可以使用脚本来进行计算 这样灵活 且易于扩展 写了一个简单的Demo进行验证 具体例子如下 include
  • Java - 带参的异常处理模块try(xxx){...}

    带资源的try语句 try with resource 的最简形式为 try Resource res xxx 可指定多个资源 do something try块退出时 会自动调用res close 方法 关闭资源 其实这样做的原因 主要是
  • mysql24,Mysql24之事务隔离级别和MVCC

    TOC 事前准备 为了故事的顺利发展 我们需要创建一个表 CREATE TABLE hero number INT name VARCHAR 100 country varchar 100 PRIMARY KEY number Engine
  • mmdetection 中 Mask Rcnn检测结果可视化(DICE计算、PR曲线绘制等)

    mmdetection中的Mask Rcnn是一个很不错的检测网络 既可以实现目标检测 也可以实现语义分割 官方也有很详细的doc指导 但是对新手来说并不友好 刚好之前笔者写的mmlab系列里面关于可视化都还没有一个详细的文档 也在此一并介
  • 逆向破解之破解补丁与劫持Dll

    破解补丁 前言 破解补丁的作用是修改程序内存地址的硬编码 以此来实现破解软件 这是常见的JE跳转用来判断注册码是否正确 若401108位置的汇编指令给Nop掉就能实现破解 编写代码 1 C语言 运行程序后输入要破解的程序进程ID inclu
  • yolov5源码解读--训练策略

    yolov5源码解读 训练策略 超参数解读 命令行参数 train 模型迭代 测试 超参数解读 hyp scratch yaml lr0 0 0032 初始学习率 lrf 0 12 使用余弦函数动态降低学习率 lr0 lrf momentu
  • spark入门小例子

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 1221 1 pyspark 2 spark shell spark网页管理页面 http 127 0 0 1 4040 jobs 3 设置日
  • Redis常见数据结构的常用命令及引用

    String 1 常用命令 字符串常用操作 SET key value 存入字符串键值对 MSET key value key value 批量存储字符串键值对 SETNX key value 存入一个不存在的字符串键值对 GET key