Redis的十大数据类型的常用命令(上)
目录
- 1.key的操作命令
- 2.String的常用命令
- 案例一:dy点赞
- 案例二:文章的喜欢数
 
- 3. List的常用命令
- 案例:公众号订阅的消息
 
- 4. Hash的常用命令
- 案例:早期购物车设计
 
- 5. Set的常用命令
- 案例一:抽奖小程序
- 案例二:朋友圈点赞
- 案例三:朋友圈点赞
 
- 6. Zset的常用集合(sorted set)
- 案例一:根据商品销售对商品进行排序显示
 
1.key的操作命令
redis是k-v键值对进行存储,这里的数据类型是value的数据类型,key的类型都是字符串
 
 
keys *        //当前库的所有key
exists        //判断某个key是否存在   1代表true 0代表false
type key      //查看你的key是什么类型
del key       //删除指定的key数据
unlink key    //非阻塞删除,仅仅将keys从keyspace元数据中删除,没真正的删除会在后续异步中操作
ttl key       //查看还有多少秒过期 -1表示永不过期 -2 表示已过期
expire key 秒    // 给key设置过期时间
move key dbindex [0-15]   // 将当前数据库的key移动到指定的数据库中  redis默认是有16个数据库的
select dbindex [0-15]   // 切换数据库[0-15],默认为0
dbsize   			// 查看当前数据库key的数量
flushdb         		// 清空当前库
flushall 			// 清空16个数据库 慎用
命令不区分大小写,而key的值是区分大小写的
help @+数据类型 会出现命令提示 比如 help @string
2.String的常用命令
-  String是redis最基本的类型,一个key对应一个value。 
-  String类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象。 
-  String类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M 

 
最常用
set key value ex 20   // 设置值 20秒过期
get key   // 获得对应的值

 
重点 keepttl 仍沿用之前设置的时间

同时设置/获取多个键值
MSET [key1] [value1] [key2] [value2] [key3] [value3]  // 同时设置一个或多个键值对
MGET [key1] [key2] [key3]  // 同时获取多个key的值
MSETNX [key1] [value1] [key2] [value2]  // 同时设置一个或多个 key-value 对  必须保证key都不存在才能成功
获取指定区间
GETRANGE [key] 0 -1  // 获取这个key的值的全部
GETRANGE [key] 0 2   // 获取这个key的值索引0到索引2之间的值
SETRANGE [key] 1 xxx  // 设置指定区间范围内的值

数值增减
INCR [key]    // 递增数字 +1
INCRBY [key] [increment]   // 增加指定的整数  +increment 
DECR [key]   // 递减数字 -1
DECRBY [key] [increment]   // 减少指定的整数  -increment 
获取字符串长度和内容相加
STRLEN [key]        // 获取key对应的值的长度
APPEND [key] [vale]   // 添加字符串内容

分布式锁
当三个微服务去抢占一个资源时,syn/lock/unolck只保证在一个jvm中,只管自己,找一个折中的,在redis中有个节点key,setnx lock uuid,先在redis创建成功,就创建锁成功,就可以去抢夺这个资源,然后再del lock,释放锁,这个redis就相当于第三方机构
redis创建的是k-v 键值对
zookeeper创建的是node
setnx/setex [key] [过期时间] [value]  // 设置带过期时间的key,动态设置
setnx [key] [value] // 只有在 key 不存在时设置 key 的值。
// 一般是两个命令连用,写成lua脚本连用,具体在Redis高级分布式锁中使用
getset(先get再set)
getset [key] [value]  // 给定 key 的值设为 value ,并返回 key 的旧值(先返回旧值,再set)
应用场景:
案例一:dy点赞
- dy点赞某个视频或商品,点一次加一次 - 使用incr key 获得多少人喜欢
 
案例二:文章的喜欢数
- 对于文章是否喜欢 - 使用incr key 获得多少人喜欢
 
3. List的常用命令
单key多vlue
结构:
- Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边〉或者尾部〈右边)
- 它的底层实际是个双端链表,最多可以包含2^32-1个元素(4294967295,每个列表超过40亿个元素)



lpush [key] [value] ...  // 往 列表头部(左边)放入元素
Rpush [key] [value] ...  // 往 列表(右边)放入元素
lrange [key] 0 -1      // 从左边开始遍历列表  只能从左边遍历
lpop [key]           // 最左边的出栈 也就是lrange遍历的第一个
rpop [key]           // 最右边的出栈 也就是lrange遍历的最后一个
lindex [key] [index]  // 通过索引值获取值
llen [key]    // 获得元素个数
lrem [key] [num] [value]  // 从左往右删除 num个值为 value的值
lrem [key] 0 [value]  // 从左往右删除所有值为value的值
ltrim [key] [开始] [结束] // 截取指定范围的值后再赋给[key],也就是删除这个区间外的值RPOPLPUSH [key1] [key2]  //移除列表的最后一个元素,并将该元素添加到另一个列表的第一个并返回lset [key] [index] [value]   //将key的第 index 个索引值改为value
linsert [key] before/after [value1] [value2] // 在list某个已有值的前后再添加具体值应用场景
案例:公众号订阅的消息
- 公众号的订阅的消息 - 关注的人发布文章,就会到我的List lpush likearticle:id 文章id
- 查看自己订阅的文章 lrange likearticle:id 0 9
 
4. Hash的常用命令
k-v 模式不变,但v是一个键值对 => Map
结构:
- Redis hash是一个string类型的 field(字段)和value(值)的映射表,hash特别适合用于存储对象
- Redis 中每个hash可以存储2个32-1键值对(40多亿)

hset/hget/hmset/hmget/hgetall/hdel

hlen   // 获取在某个key内的全部数量
hexists [key] [k1]   // 看key中是否有k1这个键
hkeys [key]    // 获取key里面的所有key
hvals [key]    // 获取key里面的所有value
hincrby [key] k1 [num] // key里面k1的值增长num 整数
hincrbyfloat [key] k1 [num] // key里面k1的值增长num 小数
hsetnx [key] k1 [value] // 不存在赋值,存在了无效\
应用场景:
案例:早期购物车设计
- 早期购物车设计,基本不用了,中小厂可用
新增商品:hest shopcar:uid1024(用户id) 334488(商品id) 1(商品数量)
新增商品:hest shopcar:uid1024(用户id) 334477(商品id) 1(商品数量)
增加商品数量:hincrby shopcar:uid1024(用户id) 334477 1
商品总数:hlen shopcar:uid1024
全选:hgetall shopcar:uid1024
5. Set的常用命令
单值多value,无重复
结构:
-  Redis 的 Set 是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是intset或者hashtable。 
-  Redis 中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 
-  集合中最大的成员数为2^32 - 1(4294967295,每个集合可存储40多亿个成员) 

 
常用的
SADD key member ...   // 添加元素
SMEMBERS key      // 遍历集合中所有元素
SISMEMBER key member    // 判断元素是否在集合中
SREM key member ...     // 删除元素
SCARD  key          // 获取集合长度
SRANDMEMBER key m   // 从set集合里面随机取出m个    如果超过最大数量就全部取出   如果写的值是负数,比如-3 ,表示需要取出3个,但是可能会有重复值    不会删除
SPOP key m   // 从集合中随即弹出一个元素  出一个删一个
SMOVE key1 key2 在key1里已存在的某个值  // 将key1的已存在的某个值赋给key2
集合运算
SDIFF keyA keyB     // A - B  属于A但不属于B的元素构成的集合
SUNION keyA keyB    // A U B  属于A或者属于B的元素合并后的
SINTER keyA keyB    // A ∩ B  属于A同时属于B
SINTERCARD numkeys keyA keyB [LIMIT limit] // 不返回结果集,只返回结果的基数
基数:去重统计数,例如一共五个数字,重复的有俩,去掉重复的,还有三个,3就是基数SDIFF key1 key2

SUNION key1 key2

SINTER keyA keyB

SINTERCARD numkeys keyA keyB [LIMIT limit]

应用场景:(三个案例)
案例一:抽奖小程序
- 抽奖小程序 - 将所有抽奖用户 sadd key 用户ID
- 显示多少人参加 SCARD key
- 从set中任意选取N个中奖人 - SRANDMEMBER key 2 随机抽奖两个人,元素不删除
- SPOP key 2 随机抽奖两个人,元素会删除
 
 

案例二:朋友圈点赞
- 朋友圈点赞 - 新增点赞 SADD pub:msgID 点赞用户Id1 点赞用户Id2
- 取消点赞 SREM pub:msgID 点赞用户Id
- 展现所有点赞过的用户 SMEMBERS pub:msgID
- 点赞用户统计 SCARD pub:msgID
- 判断某个朋友是否对楼主点赞过 SISMEMBER pub:msgID 用户Id
 
 
案例三:朋友圈点赞
-  可能认识的人 - 求两个人的差集 SDIFF user1 user2
  
6. Zset的常用集合(sorted set)
注意:Zset和set的区别,就是在set的基础上加了一个score分数值。
- set k1 v1 v2 v3
- Zset k1 score1 v1 score2 v2
常用的:


ZADD key score member [ score member ] // 添加元素
ZRANGE key start stop [WITHSCORES] // 返回元素分数从小到大的顺序   返回索引从start到stop之间的所有元素
ZREVRANGE key 0 - 1 [WITHSCORES]   // 反序
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] // 获取指定分数范围的元素  (min,max) 不包含   limit是返回限制,返回多少个 
ZSCORE key member     // 获取元素的分数
ZCARD key             // 获取集合中元素的数量
ZREM key 某score下对应的value值   // 删除元素
ZINCRBY key increment member    // 增加某个元素的分数
ZCOUNT key min max     // 获得指定分数范围内的元素个数
ZRANK key values值     // 获得下标值
ZREVRANK key values    // 逆序获得下标值
ZMPOP numkeys key [key …] <MIN | MAX> [COUNT count] //弹出元素 会删除  numkeys 表示几个key <MIN | MAX> 小 | 大  [COUNT count] count num 弹出num个
重点是ZMPOP numkeys key [key …] <MIN | MAX> [COUNT count]

应用场景:
案例一:根据商品销售对商品进行排序显示
- 根据商品销售对商品进行排序显示 - 思路:定义商品销售排行榜(sorted set集合),key为goods:sellsort,分数为商品销售数量。
- 商品编号1001的销量是9,商品编号1002的销量是15 - zadd goods:sellsort 9 1001 15 1002
 
- 有一个客户又买了2件商品1001,商品编号1001销量加2 - zincrby goods:sellsort 2 1001
 
- 求商品销量前10名 - ZRANGE goods:sellsort 0 9 withscores
 
 

相关文章:
 
Redis的十大数据类型的常用命令(上)
目录 1.key的操作命令2.String的常用命令案例一:dy点赞案例二:文章的喜欢数 3. List的常用命令案例:公众号订阅的消息 4. Hash的常用命令案例:早期购物车设计 5. Set的常用命令案例一:抽奖小程序案例二:朋友…...
智慧服务管理平台小程序开发方案
智慧服务管理平台小程序系统为用户提供一站式、个性化的服务管理解决方案,帮助用户优化服务流程、提升服务效率、增强客户满意度。适用于智慧校园、食堂、养老、智慧停车、智慧园区、智慧医院、智慧农业、康养、智慧社区、智慧农场等行业场景。一、目标用户 企业客户…...
 
【轻松拿捏】Java中ArrayList 和 LinkedList 的区别是什么?
ArrayList 和 LinkedList 的区别是什么? 1. ArrayList 2. LinkedList 3.总结 🎈边走、边悟🎈迟早会好 ArrayList 和 LinkedList 都是 Java 中常用的 List 接口的实现类,但它们在内部结构和操作性能上有所不同。 1. ArrayLis…...
 
【排序篇】快速排序的非递归实现与归并排序的实现
🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 文章目录 1 快速排序非递归2. 归并排序3.排序算法复杂度及稳定性分析 1 快速排序非递归 利…...
Java垃圾收集器工作原理
在Java编程中,对象的内存分配主要发生在堆(Heap)上。堆是Java虚拟机(JVM)中的一块运行时数据区,用于存放由new关键字创建的对象和数组。与栈(Stack)内存分配相比,堆内存分…...
 
STM32CubeMX stm32不限长度使用DMA收发串口数据
STM32CubeMX 配置 代码 stm32h7xx_it.c /*** brief This function handles UART7 global interrupt.*/ void UART7_IRQHandler(void) {/* USER CODE BEGIN UART7_IRQn 0 */if (UART7 huart7.Instance) // 判断是否是空闲中断{if (__HAL_UART_GET_FLAG(&huart7, UART_FLA…...
 
Jmeter系列之作用域、执行顺序
这一节主要解释元件作用域和执行顺序,以及整理之前说过的参数化的方式。 作用域 之前也留下了一个问题。怎么给不同的请求设置不同的Header?后续也透露了可以使用Sample Controller,结合元件的作用域来实现 在Jmeter中,元件的作…...
 
舜宇光学科技社招校招入职测评:商业推理测验真题汇总、答题要求、高分技巧
舜宇光学科技(集团)有限公司,成立于1984年,是全球领先的综合光学零件及产品制造商。2007年在香港联交所主板上市,股票代码2382.HK。公司专注于光学产品的设计、研发、生产及销售,产品广泛应用于手机、汽车、…...
C语言——构造(结构体)
指针——内存操作 我们对于内存的操作借助于 <string.h>这个库提供的内存操作函数。 内存填充 头文件: #include<string.h> 函数原型: void*memset(void *s,int c,size_t n); 函数功能: 填充s开始的堆内存空间前n个字节,使得每个字节值为c…...
 
京东2025届秋招 算法开发工程师 第2批笔试
目录 1. 第一题2. 第二题3. 第三题 ⏰ 时间:2024/08/17 🔄 输入输出:ACM格式 ⏳ 时长:2h 本试卷还有选择题部分,但这部分比较简单就不再展示。 1. 第一题 村子里有一些桩子,从左到右高度依次为 1 , 1 2…...
 
模具监视器的技术参数有哪些
模具监视器的技术参数涵盖了多个方面,这些参数对于确保模具监视器的性能、稳定性和检测精度至关重要。以下是一些主要的技术参数: 一、显示器参数 屏幕尺寸:常见的模具监视器显示器尺寸为12.5英寸至13.5英寸,具体尺寸可能因不同…...
 
使用QGIS配置管线流向地图
一、需求概述 在管网项目中,需要进行地图配置使用QGIS显示管网的流向。 二、目标 配置一副管网地图,可以在地图上显示出每个管段的流向。 三、数据结构 管网数据: id[管线编码]source[起始节点ID]target[终点节点ID]dir[方向]1100101FT2101102FT……………………节点数据…...
白骑士的C#教学附加篇 5.1 C#开发工具
系列目录 上一篇:白骑士的C#教学实战项目篇 4.4 游戏开发 在这一部分,我们将介绍一些额外的内容和工具,以帮助您提高 C# 开发的效率和质量。掌握合适的开发工具和调试技巧,可以让您在编写和维护代码时更加高效和从容。 开发工具对…...
C++中的多线程编程和锁机制
二、多线程、锁 2.1 C语言线程库pthread(POSIX threads) 2.2.1 线程创建 pthread_create #include <pthread.h>pthread_t thread; ThreadData args {1, "Hello from parameterized thread"}; int result pthread_create(&threa…...
 
【投融界-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
 
自动打电话软件给企业带来了什么?
使用机器人外呼系统肯定都是想要给自己企业带来好处和解决问题的,想让自己的企业有所改变,有更好的发展,所以才会选择使用机器人外呼系统。而它也确实没让大家失望,使用了机器人外呼系统之后确实有许多企业发生了很大改变和进步&a…...
 
聚鼎科技:新手做装饰画生意卖什么比较好
在艺术的广阔天地里,装饰画以其独特的魅力逐渐成为室内装饰不可或缺的元素。对于刚入行的新手而言,选择合适的装饰画产品至关重要,它关系到业务的成功与否。以下是一些关于新手做装饰画生意卖什么比较好的建议。 考虑到市场需求的多样性&…...
 
从零开始搭建k8s集群详细步骤
声明:本文仅作为个人记录学习k8s过程的笔记。 节点规划: 两台节点为阿里云ECS云服务器,操作系统为centos7.9,master为2v4GB,node为2v2GB,硬盘空间均为40GB。(节点基础配置不低于2V2GB) 主机名节点ip角色部…...
大模型智能体可以用来实现哪些需求?
大模型智能体可以用来实现广泛的需求,以下是一些常见的应用场景: 自然语言处理(NLP)应用 文本生成:自动撰写文章、编写代码、生成新闻摘要。 对话系统:智能客服、虚拟助手、聊天机器人。 语言翻译…...
Vue 3 组合式 API 全面讲解:defineCustomElement
Vue 3 引入的组合式 API(Composition API)为开发者提供了更加灵活和强大的代码组织能力。除了常用的 defineComponent 用于定义普通组件外,Vue 3 还提供了 defineCustomElement 函数,允许开发者定义可在 Web Components 规范下使用…...
 
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
 
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
 
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
 
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
