【Redis7】Redis7 十大数据类型
【大家好,我是爱干饭的猿,本文重点介绍Redis7 十大数据类型。
后续会继续分享Redis7和其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】
上一篇文章:《【Redis7】Redis7概述、安装和卸载 》
目录
🥗0. Redis 键(key)
🥗1. Redis 字符串(String)
🥗2. Redis列表(List)
🥗3. Redis哈希(Hash)
🥗4. Redis集合(Set)
🥗5. Reids有序集合(Zset)
🥗6. Redis位图(bitmap)
🥗8. Redis地理空间(GEO)
🥗9. Redis流(Stream)
🥗10. Redis位域(bitfield)
🥗0. Redis 键(key)
keys * //展示当前库的所有key
exists key //判断某个key是否存在
type key //查看你的key是什么类型
del key //删除指定的key数据
unlink key //非阻塞删除,仅仅将keys从keyspace元数据中删除,没真正的删除会在后续异步中操作
ttl key //查看还有多少秒过期 -1表示永不过期 -2 表示已过期
expire key 秒 //给key设置过期时间
move key [0-15] // 将当前数据库的key移动到指定的数据库中,redis默认是有16个数据库的
select [0-15] // 切换数据库[0-15],默认为0
dbsize // 查看当前数据库key的数量
flushdb // 清空当前库
flushall // 清空16个数据库 慎用
命令不区分大小写,而key的值是区分大小写的
help @+数据类型 会出现命令提示 比如 help @string
🥗1. Redis 字符串(String)
- string是redis最基本的类型,一个key对应一个value。
- string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象 。
- string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

常用命令
set key value ex 20 // 设置值 20秒过期
get key // 获得对应的值同时设置/获取多个键值
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之间的值
getrange [key] 1 xxx // 设置指定区间范围内的值数值增减
incr [key] // 递增数字 +1
incr [key] [increment] // 增加指定的整数 +increment
decr [key] // 递减数字 -1
decr [key] [increment] // 减少指定的整数 -increment 获取字符串长度和内容相加
strlen [key] // 获取key对应的值的长度
append [key] [vale] // 添加字符串内容分布式锁
setex [key] [过期时间] [value] // 设置带过期时间的key,动态设置
setex [key] [value] // 只有在 key 不存在时设置 key 的值。
set [key] [value] get // 给定 key 的值设为 value ,并返回 key 的旧值
getset [key] [value] // 给定 key 的值设为 value ,并返回 key 的旧值
应用场景
- dy点赞某个视频或商品,点一次加一次 -incr key
- 对于文章是否喜欢 -incr key
🥗2. Redis列表(List)
单key多vlue
结构:
- 一个双端链表的结构,容量是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景
- left、right都可以插入添加;
- 如果键不存在,创建新的链表
- 如果键已存在,新增内容
- 如果键全移除,对应的键也就消失了
- 底层就是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差
常用命令
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] [value] //移除列表的最后一个元素,并将该元素添加到另一个列表的第一个并返回
lset [key] [index] [value] //将key的第 index 个索引值改为value
linsert [key] brfore/after [value1] [value2] // 在list某个已有值的前后再添加具体值
应用场景
- 公众号的订阅的消息
- 关注的人发布文章,就会到我的List lpush likearticle:id 文章id
- 查看自己订阅的文章 lrange likearticle:id 0 9
🥗3. Redis哈希(Hash)
k-v 模式不变,但v是一个键值对 => Map<String,Map<Object,Object>
常用命令
hset/hget/hmset/hmget/hgetall/hdel 和set类似,不过多赘述
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] // 不存在赋值,存在了无效\
应用场景
- 早期购物车设计,基本不用了,中小厂可用
🥗4. Redis集合(Set)
单值多value,无重复
常用命令
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] // 不返回结果集,只返回结果的基数
应用场景
- 抽象小程序
- 将所有抽奖用户 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
🥗5. Reids有序集合(Zset)
注意: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 // 获得指定分数范围内的元素个数
ZMPOP numkeys key [key …] <MIN | MAX> [COUNT count] // 从键名列表中的第一个非空排序集中弹出一个或多个亓素,它们是成员分数对
ZRANK key values值 // 获得下标值
ZREVRANK key values // 逆序获得下标值
应用场景
- 根据商品销售对商品进行排序显示
- 思路:定义商品销售排行榜(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
🥗6. Redis位图(bitmap)
由 0 和 1 表示的二进制位的 bit 数组
介绍
- 用String类型作为底层数据结构实现的一种统计二值状态的数据类型
- 位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)
- Bitmap支持的最大位数是2^32位,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2的32次方 = 4294967296)
基本命令
SETBIT key offset value // 将第offset的值设为value value只能是0或1 offset 从0开始
GETBIT key offset // 获得第offset位的值
STRLEN key // 得出占多少字节 超过8位后自己按照8位一组一byte再扩容
BITCOUNT key // 得出该key里面含有几个1
BITOP and destKey key1 key2 // 对一个或多个 key 求逻辑并,并将结果保存到 destkey
BITOP or destKey key1 key2 // 对一个或多个 key 求逻辑或,并将结果保存到 destkey
BITOP XOR destKey key1 key2 // 对一个或多个 key 求逻辑异或,并将结果保存到 destkey
BITOP NOT destKey key1 key2 // 对一个或多个 key 求逻辑非,并将结果保存到 destkey
应用场景
- 做签到很适合位图
- 每天使用1个1亿位的Bitmap约占12MB的内存(10^8/8/1024/1024),10天的Bitmap的内存开销约为120MB,内存压力不算太高。
- 在实际使用时,最好对Bitmap设置过期时间,让Redis自动删除不再需要的签到记录以节省内存开销。
- 对于电影和广告是否被点击播放过也可以用位图
🥗7. Redis基数统计(HyperLogLog)
介绍
- 去重复统计功能的基数估计算法就是 HyperLogLog
- 基数
- 是一种数据集,去重复后的真实个数
- 基数统计
- 用于统计一个集合中不重复的元素个数,就是对集合去重复后剩余元素的计算
- 只需要花费12KB内存,就能记录 2的64次方=18446744073709551616 个不同元素的基数
- 但是,因为HyperLogLog只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLogLog 不能像集合那样,返回输入的各个元素。
基本命令
pfadd hllo1 1 3 5 7 9
pfadd hllo2 2 4 4 4 6 7 8
pfcount hllo2 //计算hllo2 中去重后元素个数
pfmerge distResult hllo1 hllo2 //合并hllo1 和 hllo2 中元素并去重
pfcount disResult //计算hllo2 中去重后元素个数
应用场景
- 统计某个网页的UV、某个文章的UV
- UV Unique Visitor 独立访客,一般理解为客户端IP,需要去重
- 用户搜索网站关键词数量
- 统计用户每天搜索不同词条个数
🥗8. Redis地理空间(GEO)
介绍
地球上的地理位置是使用二维的经纬度表示,经度范围 (-180, 180],纬度范围 (-90, 90],只要我们确定一个点的经纬度就可以名取得他在地球的位置。
- 例如滴滴打车,最直观的操作就是实时记录更新各个车的位置
- 然后当我们要找车时,在数据库中查找距离我们(坐标x0,y0)附近r公里范围内部的车辆
经纬度去地图上直接复制:拾取坐标系统 (baidu.com)
基本命令
GEOADD city 116.403963 39.915119 "天安门" 116.403414 39.924091 "故宫" //GEOADD添加经纬度坐标
ZRANGE city 0 -1 // 查看(会出现中文乱码)
redis -cli -a 123456 - raw // 解决中文乱码
GEOPOS city 天安门 故宫 // GEOPOS 返回经纬度//GEOHASH返回坐标的 geohash 表示 (base32编码)
GEOHASH city 天安门 故宫//GEODIST 返回两个位置之间的距离(m km )
GEODIST city 天安门 长城 km//GEORADIUS 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUS city 116.418017 39.9144444 10 km withdist withcoord count 10 desc//GEORADIUSBYMEMBER 找出指定范围内的元素,中心点是由给定的位置元素决定
GEORADIUsbymember city 天安门 10 km withdist withcoord count 10 withhash
应用场景
- 美团附近的饭店、酒店
- 高德地图附近的店
🥗9. Redis流(Stream)
- 实现消息队列的三个方式
- List实现消息队列
- Pub/Sub 发布订阅
- Stream流 (Redis版的MQ消息中间件+阻塞队列)
Stream流实现消息队列,它支持消息的持久化、支持自动生成全局唯一 ID、支持ack确认消息的模式、支持消费组模式等,让消息队列更加的稳定和可靠
Stream结构
基本命令
队列指令
消费组指令


重点

(复杂)
🥗10. Redis位域(bitfield)
介绍
- 将很多小的整数存储到一个长度较大的位图中,又或者将一个非常庞大的键分割位多个较小的键来进行储存,从而高效利用内存
- 也就是将 Redis 字符串看作是一个 由二进制位组成的数组 并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改
一句话:将一个Redis字符串看作是一个由二进制位组成的数组,并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改
基本命令

功能:
- 位域修改
- 溢出控制
分享到此,感谢大家观看!!!
如果你喜欢这篇文章,请点赞加关注吧,或者如果你对文章有什么困惑,可以私信我。
🏓🏓🏓
相关文章:
【Redis7】Redis7 十大数据类型
【大家好,我是爱干饭的猿,本文重点介绍Redis7 十大数据类型。 后续会继续分享Redis7和其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上一篇文章:《【Redis7】Redis7概述、安装…...
java 死锁怎么解决, 盘它
死锁归根结底还是资源的安排有问题如何使用 jps jstack,解决死锁如果是在分布式的系统中, 我该如何一步一步找到对应的堆栈解决死锁问题呢如何利用 skywalking 帮我解决死锁大多数人一辈子只做了三件事,自欺欺人被人欺 如何使用 jps jstack,解决死锁 jps和jstack都…...
【新2023Q2押题JAVA】华为OD机试 - 服务依赖
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:服务依赖 题目 在某系统中有…...
交友项目【通用设置】三个功能实现
目录 1:交友项目【通用设置】 1.1:查询通用设置 1.1.1:接口地址 1.1.2:流程分析 1.1.3:代码实现 1.2:设置陌生人问题 1.2.1:接口地址 1.2.2:流程分析 1.2.3:代码…...
MongoDB 更新文档(更新多条文档)
上一篇我们介绍了如何更新一条文档,本篇我们介绍一下,如果更新多条文档,我们来回顾一下更新多条文档的语法: db.collection.updateMany(filter, update, options) 上一篇我们对语法中的参数及参数的语法进行了详细的介绍…...
ubuntu20 qt6.4.3 ustc镜像安装 xdma
文件下载地质 命令 ./qt-unified-linux-x64-4.5.2-online.run --mirror https://mirrors.ustc.edu.cn/qtproject没有镜像就下砸错误hash verification while downloading,this is temporary error,please retry 部分安装器不支持 --mirror cd ~/workspace/dma_ip_drivers/X…...
15_I.MX6ULL_LCD显示原理
目录 LCD简介 分辨率 像素格式 LCD屏幕接口 LCD时间参数 RGB LCD屏幕时序 像素时钟 显存 LCD简介 LCD全称是Liquid Crystal Display,也就是液晶显示器,是现在最常用到的显示器,手机、电脑、各种人机交互设备等基本都用到了LCD,最常见就是手机和电脑显示器了。LCD的构造…...
Vue.js 2.0 实例
构造器 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的: var vm new Vue({// 选项 }) 虽然没有完全遵循 MVVM 模式, Vue 的设计无疑受到了它的启发。因此在文档中经常会使用 vm 这个变量名表示 Vue 实例。 在实例化 Vue 时&…...
安全技术和iptables防火墙
目录安全技术Netfilter防火墙工具介绍iptablesfirewalldnftablesiptables的组成概述netfilter与iptables关系iptables的四表五链结构介绍iptables安装iptables的命令格式数据包的常见控制类型iptables 命令常用管理选项添加规则删除规则修改规则 (不推荐使用&#x…...
StringBuilder和StringBuffer的区别
StringBuilder和StringBuffer的用法是一致的,平常我们最多用到的方法就是append()拼接字符串和reverse()翻转字符串等等。二者看起来方法是一样的,确实也是这样,其实它俩唯一的不同在于StringBuilder不是线程安全的,而StringBuffe…...
美团大数据开发转正实习面经(已OC)
一面面试体验整体很不错,面试官很温柔,也不会故意为难你。 一面(2023.3.21) 自我介绍简单介绍项目(研一在国电做的)你认为学习到的技术和实际使用的差距在哪项目中的数据都是哪里来的(集团中各种设备运行的数据)你说你用到了Spark那你介绍一下Spark的组件…...
leedcode刷题(2)
各位朋友们,又是新的一天,不知道大家过得怎样?今天是我leedcode刷题系列的第二篇,那么废话不多说,直接进入我们今天的主题。 文章目录有效的括号题目要求用例输入做题思路代码实现环形链表题目要求用例输入做题思路代码…...
0119 磁盘分区、挂载
1.Linux分区 1.Linux无论有几个分区,分给哪个目录使用,归根结底只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分 2.Linux采用了一种叫“载入”的处理方法,它的整个文件系…...
【独家】华为OD机试 - 打折买水果(C 语言解题)
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本期题目:打折买水果 题目 有 m m m…...
python使用args,kwargs
使用*args, **kwargs 在Python中,*args和**kwargs分别用于在函数定义中处理可变数量的位置参数和关键字参数。这使得您可以在调用函数时传入任意数量的参数,而不需要在函数定义中为每个参数单独声明一个形参。 这里是它们的使用方法: *arg…...
20230408英语学习
Planting This Could Feed Millions and Lock Away Tons of Carbon 食用菌:新型蛋白质来源,还能固碳 The world hungers for more food while wildlife yearns for untouched habitats.So goes the conflict between our seemingly insatiable need for…...
ReplacingMergeTree
在 MergeTree 的基础上,添加了“处理重复数据”的功能,该引擎和MergeTree的不同之处在于它会删除具有相同(区内)排序⼀样的重复项。数据的去重只会在合并的过程中出现。合并会在未知的时间在后台进⾏(⼿动合并),所以你⽆法预先作出计划。有⼀…...
Java核心技术知识点笔记—集合(二)
1、树集(TreeSet):是一个有序集合(sorted collection),与散列集类似,但比散列集有所改进。 (1)可以以任意顺序将元素插入到集合中; (2ÿ…...
Sharepoint Online手工迁移方案 | 分享二
目录 前言 1.创建新的目标网站集合 2.备份旧网站集合的内容数据库 3.卸载旧网站集合...
MVC获取当前区域、控制器、Action
控制器中获取: 获取区域名称:RouteData.DataTokens["area"].ToString() 获取控制器名称:RouteData.Values["controller"].ToString() 获取Action名称:RouteData.Values["action"].ToString() 视…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
