redis 10大数据类型
Redis 10大数据类型
这里说的数据类型是value的数据类型,key的类型都是字符串。
Redis key
Redis key是String类型,也是二进制安全的,我们可以使用任何二进制序列作为键,从像“foo”这样的字符串到 JPEG 文件的内容。
关于Redis的key有以下规则和建议:
- 太长的key不是个好的选择,不仅因为消耗内存,而且在数据中查找key也需要进行多次复杂的key比较。
- 太短的键值通常也不是好的选择,如果你要用”u:1000:pwd”来代替”user:1000:password”,这本身没有什么问题,但后者更易阅读,并且由此增加的空间消耗相对于key object和value object本身来说很小。当然,没人阻止您一定要用更短的键值节省一丁点儿空间。
- 最好是坚持一种命名模式。例如:”object-type🆔field”就是个不错的注意,像这样:“user:1000:password”。对多单词的字段名中可以加上一个点,就像这:“comment🔢reply.to”��:
- 允许的最大key的大小为 512 MB
数据类型概览
String
介绍
string是redis最基本的类型,一个key对应一个value。
string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M。
常用指令
基础指令
批量设置
计数器(字符串内容为整数时可以用)
过期
不存在插入
应用场景
缓存对象
使用 String 来缓存对象有两种方式:
直接缓存整个对象的 JSON,命令例子: SET user:1 '{"name":"haoer", "age":12}'。
采用将 key 进行分离为 user:ID:属性,采用 MSET 存储,用 MGET 获取各属性值,命令例子: MSET user:1:name haoer user:1:age 12 user:2:name zhangsan user:2:age 20。
常规计数
因为 Redis 处理命令是单线程,所以执行命令的过程是原子的。因此 String 数据类型适合计数场景,比如计算访问次数、点赞、转发、库存数量等等
分布式锁
共享session
List(列表)
Redis列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)他的底层实际是个双端链表,最多可以包含2^32-1个元素(4294967295, 每个列表超过40亿个元素)
常用指令
Hash
Redis hash是一个String类型的field(字段)和value(值)的映射表,hash特别适合用于存储对象。Redis中每个hash可以存储2^32-1个键值对(40多亿)
常用指令
Set(集合)
Redis的Set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象编码可以使intset或者hashtable.
Redis 中的Set集合是通过哈希表实现的,所以添加、删除、查找的时间复杂度都是O(1)。集合中最大的成员数为2^32-1(40多亿)
常用指令
添加
遍历集合
校验是否在集合中
删除元素
元素个数
随机展示指定数量的元素
随机弹出指定数量元素
从一个集合移动到另一个集合
集合运算
差集
并集
交集
交集的基数 SINTERCARD numkeys key [key ...] [LIMIT limit]
limit 用来提前返回结果,如 A B 两个集合数量很大时如果我们只想知道是否有相同元素则可指定 limit 1当找到第一个元素时会直接返回,不会对整个集合进行运算再返回,可以提高运算效率。默认值为0表示无限制。
使用场景
抽奖
朋友圈点赞
sadd、srem
Zset(sorted set :有序集合)
Redis zset 和set一样也是String类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数,redis正式利用这个分数来为集合中的成员从小到大排序。
Zset的元素是唯一的,但是分数(scope) 却可以重复。Zset也是通过hash表实现的,所以增删改查时间复杂度都是O(1),最大成员个数2^32 -1
常用指令
添加
按顺序返回
按倒序返回
返回分数范围内的数据
获取元素分数
获取元素数量
删除元素
增减元素的分数
获取分数范围内元素个数
获取成员下标
GEO(地理空间)
Redis GEO主要用于存储地理位置信息,并对存储的信息进行操作,包括添加地理位置的坐标、获取地理位置的坐标、计算两个位置的距离。根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
常用命令
添加坐标 GEOADD
返回经纬度 GEOPOS
返回坐标的GEOHASH
两个位置的距离GEODIST
GEORADIUS 以半径为中心查找xxx
HyperLogLog
HyperLogLog 是用来做基数同级的算法,HyperLogLog的优点是,在输入元素的数量或者体积非常非常大的时候,计算基数所需的空间总是固定的而且是很小。
在Redis里面,每个HyperLogLog键只需要花费12KB内存,就可以就算接近2^64个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明的对比。但是HyperLogLog只会根据输入的元素计算基数,而不会存储输入元素本身,所以HyperLogLog不能像集合那样,返回各个元素。
名称解释
基数:一种数据集,去重复后的真实个数
案例:I ={1 2 1 2 3 4} 去重复 基数 = {1 2 3 4 } = 4
命令
添加 pfadd
返回计算的基数
pfmerge 将多个合并成一个
使用场景
网站访问量统计(去重)
bitmap位图
由0和1状态表现的二进制位的bit数组,用String类型作为底层数据结构实现的一种统计二值状态的数据类型。位图的本质就是数组.
Bitmap支持的最大位数是2^32为,他可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息
常用命令
添加 setbit key offset value
获取 getbit key offset
获取1的数量
bitop
BITOP 命令用于对一个或多个保存二进制位的字符串 KEY 进行位操作,并将结果保存到 DESTKEY 上。
当 BITOP 处理不同长度的 字符串 时,较短的那个字符串所缺少的部分会被看作 0 。空的 KEY 也被看作是包含 0 的字符串序列
位域
通过bitfield命令可以一次性操作多个比特位域(指的是连续的多个比特位),它会执行一系列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应操作的执行结果。
说白了就是通过bitfield命令我们可以一次性对多个比特位域进行操作。
OVERFLOW 溢出控制[wrap|sat|fail]
WRAP:使用回绕方法处理有符号和无符号整数的溢出情况(默认)
SAT:使用饱和计算方法处理溢出,下溢出的结果为最小的整数值,而上溢计算的结果为最大证书
FAIL:拒绝执行导致上溢和下溢情况出现的计算,并向用户返回空值表示计算未执行
Stream
Redis Stream 是 Redis 5.0 版本新增加的数据结构。
Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。
简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。
而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失
__EOF__

本文链接:https://www.cnblogs.com/hoaer/p/17239978.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)