Redis常用五种数据类型
一、Redis String字符串
1.简介
- String类型在redis中最常见的一种类型
- string类型是二制安全的,可以存放字符串、数值、json、图像数据
- value存储最大数据量是512M
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处理,只能对数字值操作。如果是空(即不存在),值为1
- decr < key>:将key中存储的数字减1处理,只能对数字值操作。如果是空,值为1
- incrby < key>< increment>:将key中存储的数字值增加指定步长的数值,如果是空,值为步长。(具有原子性)
- decrby < key>< decrement>: 将key中存储的数字值减少指定步长的数值,如果是空,值为步长。(具有原子性)
- mset < key1>< value1>[< key2>< value2>...]:同时设置1个或多个key-value值
- mget < key1>[< key2>...]:同时获取1个或多个value
- msetnx < 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值
3.应用场景
3.1单值缓存
- set key value get key
3.2对象缓存
- set stu:001 value(json)
- mset stu:001:name zhangsan stu:001:age 18 stu:001:gender 男
- mget stu:001:name stu:001:age
3.3分布式锁
- setnx key:001 true //返回1代表加锁成功
- setnx key:001 true //返回0代表加锁失败
- 业务操作
- del key:001 //执行完业务释放锁
- set key:001 true ex 20 nx //防止程序意外终止导致死锁
3.4计数器
- incr article:read:1001 //统计文章阅读数量
3.5分布式系统全局序列号
- incrby orderid 100 //批量生成序列号
二、Redis List列表
1.简介
- Redis列表是简单的字符串列表,单键多值。按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)
- 一个列表最多可以包含2的32次方-1个元素
- 底层是一个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差
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中没有元素,就等待,直到有元素或超时,执行结束。
3.应用场景
- 数据队列
- 堆栈stack=lpush+lpop
- 队列queue=lpush+rpop
- 阻塞式消息队列 blocking mq=lpush+brpop
- 订阅号时间线
- lrange key start stop
三、Redis Hash 哈希
1.简介
- 是一个string类型的键和value(对象),特别适合于存储对象,类似于java里面学习的Map<String,Object>。
- 假设场景:需要在redis中存储学生对象,对象属性包括(id,name,gender,age),有以下几种处理方式
- 方式一:用key存储学生id,用value存储序列化之后用户对象(如果用户属性数据需要修改,操作较复杂,开销较大)
- 方式二:用key存储学生id+属性名,用value存储属性值(用户id数据冗余)
- 方式三:用key存储学生id,用value存储field+value的hash。通过key(学生d)+field(属性)可以操作对应数据
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 ,否则返回0
- hkeys < key>:获取哈希表中所有的字段
- hvals < key>:获取哈希表中所有的值
- hlen < key>:获取哈希表中的field数量
- hdel < key>< field>[< field>...]:删除一个或多个哈希表字段
- hincrby < key>< field>< increment>:为哈希表key中指定的field字段的整数值加上增加increment
- hincrbyfloat < key>< field>< increment>:为哈希表key中指定的field字段的浮点数值加上增加increment
3. 应用场景
- 1.对象缓存 hset stu:001 name zhangsan age 20 gender man
- 2.电商购物车操作
- 以用户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
四、Redis Set集合
1.简介
- set是string类型元素无序集合。对外提供的功能和list类似,是一个列表功能。集合成员是唯一的
2.常用命令
- sadd < key>< member>[< member>...]:将一个或多个成员元素加入到集合中,如果集合中已经包含成员元素,则被忽略
- smembers < key>:返回集合中的所有成员。
- sismember < key>< member>:判断给定的成员元素是否是集合中的成员,如果是返回1,否则返 回0
- scard < 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目标中
3.应用场景
- 抽奖
- 参与抽奖:sadd cj001 user:13000000000 user:13455556666 user:13566667777
- 查看所有参与用户: smembers cj001
- 实现抽奖: spop cj001 3 / srandmember cj001 3
- 朋友圈点赞 快手/抖音
- 点赞 sadd like:friend001 user:001
- sadd like:friend001 user:002取消点赞 srem like:friend001 user:001
- 判断用户是否已点赞 sismember like:friend001 user:001
- 显示点赞用户 smembers like:friend001
- 获取点赞次数 scard like:friend001
- 关注模型: sinter交集 sunion并集 sdiff 差集
- 微博 sadd g:list:u001 1001 sadd g:list:u002 1001 你们共同关注的 sinter交集
- QQ 你们有共同好友 sinter交集
- 快手 可能认识的人 sdiff差集
五、Redis zset有序集合
1.简介
- 有序集合是string类型元素的集合,不允许重复出现成员
- 每个元素会关联一个double类型的分数,redis是通过分数为集合中的成员进行从小到大的排序
- 有序集合的成员是唯一的,但是分数可以重复
- 成员因为有序,可以根据分数或者次序来快速获取一个范围内的元素
2. 常用命令
- zadd < key> < score>< member>[< score>< member>...]:将一个或多个元素及其分数加入到有序集合中
- zrange < key>< min>< max> [byscore|bylex] [rev] [ limit offset count] [withscores]:返回有序集合指定区间的成员,(byscore按分数区间,bylex按字典区间,rev 反向排序(分数大的写前边,小的写后边),limit分页(offset偏移量,count返回的总数),withscores返回时带有对应的分数)
- 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> :为集合中指定成员分数加上增量increment
- zrem < key> < member>[< member>...]:移除集合的一个或多个成员
- zcount < key>< min>< max>:统计集合中指定区间分数(都包含)的成员数量
- zrank < key>< member>:获取集合中成员的索引位置
- zscore < key>< member>:获取集合中成员的分数值
3.应用场景
- 1.按时间先后顺序排序:朋友圈点赞 zadd 1656667779666
- 2.热搜 微博 今日头条 快手
- 3.获取topN zrevrange k1 300 10 limit 0 10
相关文章:

Redis常用五种数据类型
一、Redis String字符串 1.简介 String类型在redis中最常见的一种类型 string类型是二制安全的,可以存放字符串、数值、json、图像数据 value存储最大数据量是512M 2. 常用命令 set < key>< value>:添加键值对 nx:当数据库中…...

C++ Primer第五版_第十一章习题答案(1~10)
文章目录练习11.1练习11.2练习11.3练习11.4练习11.5练习11.6练习11.7练习11.8练习11.9练习11.10练习11.1 描述map 和 vector 的不同。 map 是关联容器, vector 是顺序容器。 练习11.2 分别给出最适合使用 list、vector、deque、map以及set的例子。 list:…...

GEE:使用LandTrendr进行森林变化检测详解
作者:_养乐多_ 本文介绍了一段用于地表变化监测的代码,该代码主要使用谷歌地球引擎(GEE)中的 Landsat 时间序列数据,采用了 Kennedy 等人(2010) 发布的 LandTrendr 算法,对植被指数进行分割,通过计算不同时间段内植被指数的变化来检测植被变化。 目录 一、加入矢量边界 …...
docker项目实施
鲲鹏916架构openEuler-arm64成功安装docker并跑通tomcat容器_闭关苦炼内功的技术博客_51CTO博客鲲鹏916架构openEuler-arm64成功安装docker并跑通tomcat容器,本文是基于之前这篇文章鲲鹏920架构arm64版本centos7安装docker下面开始先来看下系统版本卸载旧版本旧版本…...

springboot实现邮箱验证码功能
引言 邮箱验证码是一个常见的功能,常用于邮箱绑定、修改密码等操作上,这里我演示一下如何使用springboot实现验证码的发送功能; 这里用qq邮箱进行演示,其他都差不多; 准备工作 首先要在设置->账户中开启邮箱POP…...

Java 进阶(5) Java IO流
⼀、File类 概念:代表物理盘符中的⼀个⽂件或者⽂件夹。 常见方法: 方法名 描述 createNewFile() 创建⼀个新文件。 mkdir() 创建⼀个新⽬录。 delete() 删除⽂件或空⽬录。 exists() 判断File对象所对象所代表的对象是否存在。 getAbsolute…...

“终于我从字节离职了...“一个年薪40W的测试工程师的自白...
”我递上了我的辞职信,不是因为公司给的不多,也不是因为公司待我不好,但是我觉得,我每天看中我憔悴的面容,每天晚上拖着疲惫的身体躺在床上,我都不知道人生的意义,是赚钱吗?是为了更…...

设计模式之策略模式(C++)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一、策略模式是什么? 策略模式是一种行为型的软件设计模式,针对某个行为,在不同的应用场景下&…...

从工厂普工到Python女程序员,聊聊这一路我是如何逆袭的?
我来聊聊我是如何从一名工厂普工,到国外程序员的过程,这里面充满了坎坷。过去我的工作是在工厂的流水线上,我负责检测电池的正负极。现如今我每天从早上6:20起床,6点四五十分出发到地铁站,7:40到公司。我会给自己准备一…...

全国青少年信息素养大赛2023年python·选做题模拟二卷
目录 打印真题文章进行做题: 全国青少年电子信息智能创新大赛 python选做题模拟二卷 一、单选题 1. numbers = [1, 11, 111, 9], 运行numbers.sort() 后,运行numbers.reverse() numbers会变成?( )...

分布式事务Seata原理
Seata 是一款开源的分布式事务解决方案,致力于提供高性能与简单易用的分布式事务服务,为用户提供了 AT、TCC、SAGA 和 XA 几种不同的事务模式。Seata AT模式是基于XA事务演进而来,需要数据库支持。AT 模式的特点就是对业务无入侵式࿰…...

用ChatGPT怎么赚钱?普通人用这5个方法也能赚到生活费
ChatGPT在互联网火得一塌糊涂,因为它可以帮很多人解决问题。比如:帮编辑人员写文章,还可以替代程序员写代码,帮策划人员写文案策划等等。ChatGPT这么厉害,能否用它来赚钱呢?今天和大家分享用ChatGPT赚钱的5…...

( “树” 之 DFS) 110. 平衡二叉树 ——【Leetcode每日一题】
110. 平衡二叉树 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1: 输入:root [3,9,20,null,null,15,7] …...

nvm软件使用-同一个环境下控制多个不同node版本
1.使用场景 nvm是一个用于管理Node.js版本的工具,它可以让你在同一台机器上安装和切换不同的Node.js版本。使用nvm的好处有以下几点: 1.1.nvm可以让你轻松地测试你的代码在不同的Node.js版本下的兼容性和性能,避免因为版本差异导致的问题。…...

连续两个南航的研究生面试出了从来没出现过的问题,本科和研究生都是计算机专业的,竟然说static是不可更改的。
最近面试人数有点多,面试有点频繁,因此发现了一些学生普遍会发生的错误,可以说是很离谱。 因为做了十多年的面试官,无论是大中小厂的面试,还是社招、校招。 从来没有遇到过这样的情况,而且发生在两个南航…...

How to install nacos/nacos-server:v2.1.2-slim with docker
今天给大家介绍一下如何基于Docker的nacos/nacos-server:v2.1.2-slim镜像安装nacos 1、Data Source 我们需要从nacos的github官网下载nacos 2.12发布包 nacos-server-2.1.2.tar.gznacos-server-2.1.2.zip 这里以nacos-server-2.1.2.tar.gz为例来介绍,解压后我们…...

Rust社区引发舆论危机,问题到底出在哪儿?
围绕开源的法律问题,讨论焦点往往集中在开源许可证、软件著作权等方面,商标的讨论却极少引人关注。事实上,关于开源软件以及开源软件的衍生产品的商标使用情况往往处于某种灰色地带。 最近,Rust基金会正在就更新的商标政策征求反馈…...

C++算法恢复训练之归并排序
归并排序(Merge Sort)是一种基于分治思想的排序算法,它将待排序数组分成两个子数组,然后对这两个子数组分别进行排序,最后将两个已排序的子数组合并成一个有序数组。归并排序是一种稳定的排序算法,具体体现…...

使用Process Explorer和Clumsy工具定位软件高CPU占用问题
目录 1、问题描述 2、使用Process Explorer初步找到CPU占用高的原因 3、使用Clumsy工具在公司内网环境复现了问题...

为何巴菲特和马斯克站在了一起?
股神巴菲特虽然非常传奇,但是马斯克对其并不感冒。马斯克曾经在一档电视节目中表示,实业才是王道,埋怨金融业抢走太多人才和精英,暗指巴菲特为年轻人做了错误示范。当然,巴菲特的投资非常厉害,但也有失手的…...

企业数字化转型全是坑?这几篇数字化转型成功案例,减少70%损失
这篇给大家整理了200企业数字化转型案例合集,涵盖了制造、建筑、教育、零售、互联网等10行业的大中小型企业数字化转型思路,希望对大家有所帮助。 案例全部整合在这篇文章中,点击即可查看>>数字化干货资料合集! 01 首先&…...

13.Java面向对象----嵌套类
Java面向对象—嵌套类、内部类、匿名类 一、static静态 在《Java编程思想》有这样一段话: “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来…...

Redis数据迁移过程,使用jedis客户端发送命令,需要注意string和byte类型的命令,如果使用的转换字符编码不一致,会导致丢数据
1.了解String与byte之间存在的字符编码映射规则(java为例) string与byte来回转换,需要指定一样字符编码规则 详细原因请参考:关于Java中bytes到String的转换-阿里云开发者社区 简单来说 (1)string和by…...

第六章 IA-32指令类型
IA-32指令类型1、传送指令1.1、常用传送指令1.1.1、通用数据传送指令1.2、传送指令执行过程2、定点算术运算指令2.1、常用定点运算指令2.2、加法运算的底层实现举例2.3、加法指令和乘法指令举例3、按位运算指令3.1、逻辑运算和移位运算3.2、按位运算指令举例4、控制转移指令4.1…...

基于BenchmarkSQL的Oracle数据库tpcc性能测试
基于BenchmarkSQL的Oracle数据库tpcc性能测试安装BenchmarkSQL及其依赖安装软件依赖编译BenchmarkSQLBenchmarkSQL props文件配置数据库用户配置BenchmarkSQL压测装载测试数据TPC-C压测(固定事务数量)TPC-C压测(固定时长)生成测试…...

Dapr和Rainbond集成,实现云原生BaaS和模块化微服务开发
背景 Dapr 是一个开源的分布式应用运行时,帮助开发者构建松耦合的分布式应用程序,具有良好的可扩展性和可维护性。Rainbond 是一款企业级的云原生应用管理平台,提供了丰富的功能和工具,方便开发者管理和部署应用。Rainbond 和 Da…...

全国青少年信息素养大赛2023年python·选做题模拟五卷
目录 下载打印文档做题: 全国青少年电子信息智能创新大赛 python选做题模拟五卷 一、单选题 1. 对于数列3,8,11,15,17,19,25,30,44,采用“二分查找”法查找8,需要查找多少次?( ) A、5...

itop-3568开发板驱动学习笔记(18)tasklet 机制
《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录tasklet 简介tasklet 结构体tasklet 初始化使能 tasklet失能 tasklettasklet 调度函数tasklet 取消调度函数tasklet 实验tasklet 简介 Tasklets 机制是linux中断处理机制中的软中断延迟机制。在linux中存在着…...

全国青少年电子信息智能创新大赛(复赛)python·模拟二卷
目录 编程题一 答案解析: 打印题目下载做题: 全国青少年电子信息智能创新大赛(复赛)python模拟二卷 编程题一 第一题:描述 输入两个整数,比较它们的大小。 输入 一行,包含两个整数x和y,中间用单个空格隔开。 0<= x<2^32,-2^31 <= y<2^31。 输出...

对标ChatGPT的开源中文方案
目录 前言 一、Meta发布大语言模型LLaMA 二、斯坦福基于 Meta 的 LLaMA 7B 模型微调出Alpaca 三、基于TencentPretrain训练中文LLaMA大规模语言模型 四、基于斯坦福Alpaca训练中文对话大模型BELLE 五、 清华开源项目ChatGLM中文对话模型 六、基于LLaMA的开源中文语言模型…...