Redis_五种数据类型及操作命令
5.redis常用的五种数据类型
5.1 Redis String字符串
5.1.1 简介
- String类型在redis中最常见的一种类型
- string类型是二制安全的,可以存放字符串、数值、json、图像数据
- value存储最大数据量是512M
5.1.2 常用命令
set
< key>< value>:添加键值对(下面指令可以再后添加)- nx:当数据库中key不存在时,可以将key-value添加到数据库
- xx: 当数据库key存在时,可以将key-value添加到数据库,与nx参数互斥
- ex: 设置key-value添加到数据库,并设置key的超时时间(以秒钟为单位)
- px:设置key-value添加到数据库,并设置key的超时时间(以豪秒钟为单位),与ex互斥
get
< key>查询对应键值append
< key>< value>:将给定的值追加到key的末尾strlen
< key>:获取值的长度setnx
< key>< value>:只有在key不存在时,设置key-value加入到数据库setex
< key> < timeout>< value>:添加键值对,同时设置过期时间(以秒为单位)incr
< key>:将key中存储的数字加1处理,只能对数字值操作。如果是空,添加进key并设值为1decr
< key>:将key中存储的数字减1处理,只能对数字值操作。如果是空,值为1incrby
< key>< increment>:将key中存储的数字值增加指定步长的数值,如果是空,值为步长。
(具有原子性)decrby
< key>< decrement>: 将key中存储的数字值减少指定步长的数值,如果是空,值为步长。
(具有原子性)mset
< key1>< value1>[< key2>< value2>…]:同时设置1个或多个key-value值mget
< key1>[< key2>…]:同时获取1个或多个valuemsetnx
< key1>< value1>[< key2>< value2>…]:当所有给定的key都不存在时,同时设置1个或
多个key-value值**(具有原子性)**getrange
/substr
< key>< start>< end> 将给定key,获取从start(包含)到end(包含)的值setrange
< key>< offset>< value>:从偏移量offset开始,用value去覆盖key中存储的字符串值getset
< key>< value>: 对给定的key设置新值,同时返回旧值。如果key不存在,则添加一个key-value值
5.1.3应用场景
单值缓存
- 设置值:
set key value
; - 获取值:
get key
对象缓存
set stu:001 value(json)
(把对象转为json串保存)mset stu:001:name zhangsan stu:001:age 18 stu:001:gender 男
(分别对每个字段进行不同key的存储)mget stu:001:name stu:001:age
(批量获取)
分布式锁
setnx key:001 true
//返回1代表加锁成功setnx key:001 true
//返回0代表加锁失败,setnx如果存在,则无法存入数据,返回0- //…业务操作
del key:001
//执行完业务释放锁
set key:001 true ex 20 nx
//防止程序意外终止导致死锁
计数器
incr article:read:1001
//统计文章阅读数量,其中artcle:read:1001
是key
分布式系统全局序列号
incrby orderid 100
//批量生成序列号就是基于orderid的value加100
5.2 Redis List列表
5.2.1 简介
- Redis列表是简单的字符串列表,单键多值,按照插入顺序排序。 可以添加一个元素到列表的头部(左边)或者尾部(右边)
- 一个列表最多可以包含2^31-1个元素
- 底层是一个双向链表,对两端的操作新能很高,通过下标的操作中间节点性能较弱
5.2.2 常用命令
lpush
< key> < value1>[< value2>…]:从左侧插入一个或多个值lpushx
< key> < value1>[< value2>…]:将一个或多个值插入到已存在的列表头部 (有一个判断功能,存在的话才做,不存在就不做)lrange
< key>< start>< stop>:获取列表指定范围内的元素,0左边第1位,-1右边第1 位,0 ~-1取出所有rpush
< key> < value1>[< value2>…]:从右侧插入一个或多个值rpushx
< key> < value1>[< value2>…]:将一个或多个值插入到已存在的列表尾部lpop
< key>[count]:移除并获取列表中左边第1个元素,count表明获取的总数量,返回的为移除的
元素rpop
< key>[count]:移除并获取列表中右边第1个元素,count表明获取的总数量,返回的为移除的元素rpoplpush
< source>< destination>:移除源列表的尾部的元素(右边第一个),将该元素添加到目标列表的头部(左边第一个),并返回该元素lindex
< key>< index>:通过索引获取列表中的元素llen
< key>:获取列表长度linsert
< key> before|after < pivot>< element>:在< pivot>基准元素前或者后面插入< element>,如果key不存在,返回0。如果< pivot>不存在,返回-1,如果操作成功,返回执行后的列表长度- lrem < key>< count>< element>:根据count的值,移除列表中与参数相等的元素
- count=0 移除表中所有与参数相等的值
- count>0 从表头开始向表尾搜索,移除与参数相等的元素,数量为count
- count<0 从表尾开始向表头搜索,移除与参数相等的元素,数量为count的绝对值
- lset < key>< index> < element>:设置给定索引位置的值
- ltrim< key>< start> < stop>:对列表进行修剪,只保留给定区间的元素,不在指定区间的被删除
- brpop < key> timeout:阻塞式移除指定key的元素,如果key中没有元素,就等待,直到有元素或超时,执行结束
5.2.3 应用场景
数据队列
- 堆栈stack=lpush+lpop
- 队列queue=lpush+rpop
- 阻塞式消息队列 blocking mq=lpush+brpop
订阅号时间线
- lrange key start stop(队列就是数据,然后根据想要获取的元素,输入对应元素下标获取数据)
5.3 Redis Hash 哈希
5.3.1 简介
是一个String类型的键和value(对象),特别适合于储存对象,类似于Java中的Map<String, Object>
,有以下几种处理方式
- 用key存储学生id,用value存储序列化之后用户对象(如果用户属性数据需要修改,操作较复杂,开销较大)
- 用key存储学生id+属性名,用value存储属性值(用户id数据冗余)
- 用key存储学生id,用value存储field+value的hash。通过key(学生d)+field(属性)可以操作对应数据。
5.3.2 常用命令
hset
< key>< field>< value>[< field>< value>…]:用于为哈希表中的字段赋值,如果字段在hash表中存在,则会被覆盖hmset
:用法同hset,在redis4.0.0中被弃用hsetnx
< key>< field>< value>:只有在字段不存在时,才设置哈希表字段中的值(不支持多个)hget
< key>< field> 返回哈希表中指定的字段的值hmget
< key>< field>[< field>…]:获取哈希表中所有给定的字段值hgetall
< key>:获取在哈希表中指定key的所有字段和值hexists
< key>< field>:判断哈希表中指定的字段是否存在,存在返回1 ,否则返回0hkeys
< key>:获取哈希表中所有的字段hvals
< key>:获取哈希表中所有的值hlen
< key>:获取哈希表中的field数量hdel
< key>< field>[< field>…]:删除一个或多个哈希表字段- hincrby < key>< field>< increment>:为哈希表key中指定的field字段的整数值加上增加increment值
- hincrbyfloat < key>< field>< increment>:为哈希表key中指定的field字段的浮点数值加上增加increment值
5.3.3 应用场景
- 对象缓存 hset stu:001 name zhangsan age 20 gender man
- 电商购物车操作
- 以用户id作为key, 以商品id作为field,以商品数量作为value
- 添加商品:
- hset user:001 s:001 1
- hset user:001 s:002 2
- 增减商品数量:hincrby user:001 s:001 3
- 查看购物车商品总数: hlen user:001
- 删除商品 : hdel user:001 s:001
- 获取所有商品: hgetall user:001
5.4 Redis Set集合
5.4.1 简介
set是String类型元素无序集合,对外提供的功能和list类似
5.4.2 常用命令
sadd
< key>< member>[< member>…]:将一个或多个成员元素加入到集合中,如果集合中已经包含成员元素,则被忽略smembers
< key>:返回集合中的所有成员。sismember
< key>< member>:判断给定的成员元素是否是集合中的成员,如果是返回1,否则返回0scard
< key>:返回集合中元素个数srem
< key>< member>[< member>…]:移除集合中一个或多个元素spop
< key>[< count>]:移除并返回集合中的一个或count个随机元素srandmember
< key>[< count>]:与spop相似,返回随机元素,不做移除smove
< source> < destination> < member>:将member元素从source源移动到destination目标sinter
< key>[< key>…]:返回给定集合的交集(共同包含)元素sinterstore
< destination> < key1>[< key2>…]:返回给定所有集合的交集,并存储到destination目标中sunion
< key>[< key>…]:返回给定集合的并集(所有)元素sunionstore
< destination> < key1>[< key2>…]:返回给定所有集合的并集,并存储到destination目标中sdiff
< key>[< key>…]:返回给定集合的差集(key1中不包含key2中的元素)sdiffstore
< destination> < key1>[< key2>…]:返回给定所有集合的差集,并存储到destination目标中
5.4.3 应用场景
- 抽奖
- 参与抽奖:sadd cj001 user:13000000000 user:13455556666 user:13566667777 (将参与抽奖用户放入set中)
- 查看所有参与用户: smembers cj001 (查看set数组所有数据)
- 实现抽奖: spop cj001 3(弹出任意三个数据) / srandmember cj001 3 (返回任意三个数据)
- 朋友圈点赞 快手/抖音
- 点赞 (向set数组中添加元素)
- sadd like:friend001 user:001
- sadd like:friend001 user:002
- 取消点赞 srem like:friend001 user:001 (移除此元素)
- 判断用户是否已点赞 sismember like:friend001 user:001 (查看此元素是否存在set中)
- 显示点赞用户 smembers like:friend001 (查看set中的元素)
- 获取点赞次数 scard like:friend001 (获取set长度)
- 点赞 (向set数组中添加元素)
- 关注模型: sinter交集 sunion并集 sdiff 差集
- 微博 sadd g:list:u001 1001 sadd g:list:u002 1001 你们共同关注的 sinter交集
- QQ 你们有共同好友 sinter交集
- 快手 可能认识的人 sdiff差集
5.5 Redis ZSet有序集合
5.5.1 简介
- 有序集合是String的有序结合,不允许重复出现成员
- 每个元素关联一个double类型的分数,redis通过分数为集合中的成员进行从小到大的排序
- 有序集合成员是唯一的,但是分数可以重复
- 成员因为有序,可以根据分数或者次序来快速获取一个范围内的元素
5.5.2常用命令
zadd
< key> < score>< member>[< score>< member>…]:将一个或多个元素及其分数加入到有序集合中zrange
< key>< min>< max> [byscore|bylex] [rev] [ limit offset count] [withscores]:返回有序集合指定区间的成员,- byscore按分数区间,使用此方法通过分数排序获取所有的数据
zrange z1 -inf +inf byscore
- bylex按字典区间[其中如果想要全部查询,min和max是-和+],
- rev 反向排序(分数大的写前边,小的写后边),
- limit分页(offset偏移量,count返回的总数),
- withscores返回时带有对应的分数)
- byscore按分数区间,使用此方法通过分数排序获取所有的数据
zrevrange
< key>< start>< stop>[ limit offset count]:返回集合反转后的成员zrangebyscore
< key>< min>< max> [withscores] [ limit offset count]:参考zrange用法zrevrangebyscore
< key>< max>< min> [withscores] [ limit offset count]:参考zrange用法zrangebylex
< key>< min>< max>] [ limit offset count]:通过字典区间返回有序集合的成员zrangebylex
k2 - +:减号最小值,加号最大值zrangebylex
k2 [aa (ac:[ 中括号表示包含给定值,( 小括号表示不包含给定值
zcard
< key>:获取集合中的成员数量zincrby
< key> < increment>< member> :为集合中指定成员分数加上增量incrementzrem
< key> < member>[< member>…]:移除集合的一个或多个成员zcount
< key>< min>< max>:统计集合中指定区间分数(都包含)的成员数量zrank
< key>< member>:获取集合中成员的索引位置zscore
< key>< member>:获取集合中成员的分数值
5.3.3 应用场景
- 按时间先后顺序排序:朋友圈点赞 zadd 1656667779666(以时间作为分数) value
- 热搜: 微博 今日头条 快手 (主要使用分数做处理,每点击一次分数就加一,然后获取热点)
- 获取topN zrevrange k1 300 10 limit 0 10
相关文章:
Redis_五种数据类型及操作命令
5.redis常用的五种数据类型 5.1 Redis String字符串 5.1.1 简介 String类型在redis中最常见的一种类型string类型是二制安全的,可以存放字符串、数值、json、图像数据value存储最大数据量是512M 5.1.2 常用命令 set < key>< value>:添加…...

Mac如何打开隐藏文件中Redis的配置文件redis.conf
Redis下载(通过⬇️博客下载的Redis默认路径为:/usr/local/etc) Redis下载 1.打开终端进入/usr文件夹 cd /usr 2.打开/local/文件夹 open local 3.找到redis.conf并打开,即可修改配置信息...

nginx+flask+uwsgi部署遇到的坑
文章目录 1.环境:2.uwsgi_conf.ini具体配置内容3.nginx 具体配置4.具体命令(注意使用pip3命令安装)5.服务异常排查 1.环境: centos8 uWSGI 2.0.22 gmssl 3.2.2 nginx version: nginx/1.18.0 项目目录: 2.uwsgi_conf.ini具体配置内容 [uws…...

vue实现pdf预览功能
背景:材料上传之后点击预览实现在浏览器上预览的效果 效果如下: 实现代码如下: //预览和下载操作 <el-table-column fixed"right" label"操作" width"210"><template #default"scope">…...

(原创)Flutter与Native页面互相跳转
前言 实际开发混合项目时,常常会有页面跳转的需求 如果是原生界面和flutter界面需要互相跳转 这种情况应该怎么处理呢? 今天这篇博客主要就来介绍下这个情况 其实想一下,这个问题可以拆成四个小的问题来分析: 1:原生界…...

web集群学习--基于CentOS构建LVS-DR集群、配置nginx负载均衡
基于CentOS构建LVS-DR集群 环境准备 主机名 ip地址 node1 192.168.1.140 client node2 192.168.1.141 LVS node3 192.168.1.142 RS1 node4 192.168.1.143 RS2配置 1.关闭防火墙和SELinux [rootclient~]# systemctl stop firewalld [rootclient~]# systemctl disabl…...

基于 FPGA 的电机控制
FPGA 非常适合精密电机控制,在这个项目中,我们将创建一个简单的电机控制程序,在此基础上可以构建更复杂的应用。 需要的硬件 Digilent Pmod HB3 介绍 我们可以用一个简单的 8 位微控制器来控制电机,输出一个简单的脉宽调制波形。然…...

STM32F429IGT6使用CubeMX配置IIC通信(AT2402芯片)
1、硬件电路 写地址:0xA0 读地址:0xA1 存储容量:256Byte 2、设置RCC,选择高速外部时钟HSE,时钟设置为180MHz 3、配置IIC 4、生成工程配置 5、部分代码 #define IIC_WRITE_ADDR 0xA0 // IIC写地址 #define IIC_READ_ADDR 0xA1 …...

JS逆向系列之猿人学爬虫第14题-备而后动-勿使有变
文章目录 题目地址参数分析参考jspython 调用往期逆向文章推荐题目地址 https://match.yuanrenxue.cn/match/14题目难度标的是困难,主要难在js混淆部分。 参数分析 初始抓包有无限debugger反调试,可以直接hook 函数构造器过掉无限debugger Function.prototype.__construc…...
学cpp看的那点书
C C Primer 语言基础学习 C Templates The Complete Guide (2nd Edition) 学习模板,更好的阅读 STL 源码,毕竟C 标准库大部分是模板。 The C Standard Library 全称 The C Standard Library A Tutorial and Reference Second Edition简单的了解标…...

【C++】常用容器-string容器
1.string基本概念 2.string构造函数 #include <iostream> using namespace std;//string容器 void test01() {string s1;//创建空字符串,调用无参构造函数cout << "str1 " << s1 << endl;//什么都不输出const char* str "…...

SSH无法连接kali,拒绝密码
1,cd /etc/ssh 2,systemctl start ssh.server 3,vim /etc/ssh/sshd_config 将黄色文字改成这样 4,systemctl restart ssh 然后去连接就好了...

竞赛项目 深度学习的口罩佩戴检测 - opencv 卷积神经网络 机器视觉 深度学习
文章目录 0 简介1 课题背景🚩 2 口罩佩戴算法实现2.1 YOLO 模型概览2.2 YOLOv32.3 YOLO 口罩佩戴检测实现数据集 2.4 实现代码2.5 检测效果 3 口罩佩戴检测算法评价指标3.1 准确率(Accuracy)3.2 精确率(Precision)和召回率(Recall)3.3 平均精…...

redis 数据结构(一)
Redis 为什么那么快 redis是一种内存数据库,所有的操作都是在内存中进行的,还有一种重要原因是:它的数据结构的设计对数据进行增删查改操作很高效。 redis的数据结构是什么 redis数据结构是对redis键值对值的数据类型的底层的实现,…...

【高频面试题】JVM篇
文章目录 一、JVM组成1.什么是程序计数器2.什么是Java堆?3.能不能介绍一下方法区(元空间)4.你听过直接内存吗5.什么是虚拟机栈6.垃圾回收是否涉及栈内存?7.栈内存分配越大越好吗?8.方法内的局部变量是否线程安全?9.什么…...

第十三次CCF计算机软件能力认证
第一题:跳一跳 近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱。 简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。 如果跳到了方块上,但没有跳到方块的…...

无人驾驶实战-第十二课(强化学习自动驾驶系统)(完)
在七月算法上报了《无人驾驶实战》课程,老师讲的真好。好记性不如烂笔头,记录一下学习内容。 课程入口,感兴趣的也可以跟着学一下。 ————————————————————————————————————————— 强化学习ÿ…...
【flask sqlalchmey】一次性将返回的列表对象或者 一行数据对象转成dict---flask-sqlalchemy输出json格式数据
def model_to_dict(object):return {c.name: getattr(object, c.name) for c in object.__table__.columns}#将一组数据转为list def scalars_to_list(object):return [model_to_dict(c) for c in object]class Sysdict(Base,SerializerMixin):__bind_key__ forest_fire_contr…...

goland插件推荐Rider UI Theme Pack
推荐一个goland配色插件Rider UI Theme Pack,里面自带visual assist配色,配色截图如下: 直接在plugins里面进行搜索或者在插件home page下载后进行安装均可。 总算找到一统vscode 和goland二者优势的插件了。...
人工智能面试常识-10
目录 1. 人工智能的常见用途和应用有哪些? 2. 什么是智能代理,它们如何在人工智能中使用?...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...