首页 > 数据库 >Redis数据类型和应用场景

Redis数据类型和应用场景

时间:2023-10-08 09:22:53浏览次数:49  
标签:... 场景 Hash 数据类型 Redis 指定 value key 集合

一、Redis常用的5种数据类型

  1. 字符串(String):最基本的数据类型,可以存储字符串、整数或浮点数。
  2. 哈希(Hash):键值对的集合,可以在一个哈希数据结构中存储多个字段和值。
  3. 列表(List):按照插入顺序存储一组有序的值,可以在列表的两端执行插入、删除和访问操作。
  4. 集合(Set):无序的唯一值的集合,支持对集合执行添加、删除和集合间的交集、并集、差集等操作。
  5. 有序集合(Sorted Set):也叫Zset,类似于集合,但每个成员都关联着一个分数(score),可以根据分数对成员进行排序,同时保持唯一性。

除了以上5种数据类型,还提供了Bitmap和HyperLogLog。

  1. 位图(Bitmap):使用字符串来表示位数组,可以对位进行逻辑操作,例如AND、OR、XOR等。
  2. HyperLogLog:用于进行基数估算的数据结构,可以快速估计集合中不重复元素的数量。

二、String类型

常用操作

  1. SET key value:设置指定 key 的值为给定的 value。
  2. GET key:获取指定 key 的值。
  3. DEL key:删除指定的 key。
  4. MSET key value [key value ...]:批量设置key value。
  5. MGET key [key ...]:批量获得key value。
  6. SETEX key seconds value:设置指定 key 的值,并指定过期时间(以秒为单位)。
  7. SETNX key value:设置 key 不存在的key value,如果key存在,那么当前value不会覆盖已存在key的value。
  8. STRLEN key:返回指定 key 的值的长度。

原子加减操作:

  1. INCR key:将指定 key 的值加 1。
  2. DECR key:将指定 key 的值减 1。
  3. INCRBY key increment:将指定key的value与increment相加,只针对数字类型。
  4. DECEBY key decrement:将指定key的value减去decrement,只针对数字类型。
  5. APPEND key value:将指定 value 追加到指定 key 的值末尾。
  6. GETSET key value:设置指定 key 的新值,并返回旧值。

单值缓存操作:

  1. SET key value
  2. GET key

对象缓存操作:

  1. SET user:1 value(value是一个JSON字符串)
  2. MSET user:1:name zhangsan user:1:age 18

分布式锁操作:

  1. SETNX lock_key 1 (lock_key:要锁的键, 1: 可以是任意非空的值,用于表示锁的存在。结果返回0表示false,1表示true)
  2. DEL lock_key //执行完业务逻辑释放锁
  3. SETEX lock_key expiration_time 1(设置有时效的锁)

Sting类型适用场景

  1. 例如统计一篇文章的阅读量,在业务场景上来说用户打开一篇文章则+1,那么可以使用redis的计数器。使用incr article:readcount:1000,每执行一次表示文章ID为1000的累加一次。article:readcount是我们自定义的前缀,为了更好的见名识义
  2. Web集群session共享,spring session + redis实现session共享
  3. 分布式全局序列号,使用redis批量生成序列号提升性能,INCRBY orderId 1

三、Hash类型

常用操作

  1. HSET key field value:设置 Hash 中指定键的字段和值。
  2. HGET key field:获取 Hash 中指定键的字段的值。
  3. HDEL key field1 [field2 ...]:删除 Hash 中指定键的一个或多个字段。
  4. HEXISTS key field:检查 Hash 中指定键是否存在指定字段。
  5. HKEYS key:获取 Hash 中指定键的所有字段名。
  6. HVALS key:获取 Hash 中指定键的所有字段值。
  7. HGETALL key:获取 Hash 中指定键的所有字段和值。
  8. HINCRBY key field increment:将 Hash 中指定键的字段值按给定增量递增。
  9. HLEN key:获取 Hash 中指定键的字段数量。

对象缓存操作

  1. HMSET key field1 value1 [field2 value2 ...]:同时设置 Hash 中指定键的多个字段和值。
  2. HMGET key field1:获取 Hash 中指定键的字段值。

Hash应用场景

电商系统购物车数据存储,存储的结构为:

用户ID为key ,例如:cart:userId
商品ID为field,例如:10000
商品数量为value,例如:1

下面举例说明:

商品加入购物车使用:HMSET key field1 value1 [field2 value2 ...]

购物车商品数量+1使用HINCRBY key field increment

由上图可知购物车的商品总数是3条,使用HLEN key 获得

如果要删除一个商品,使用HDEL key

获得购物车所有商品

不要使用大key存储,如果大key存储需要分段存储。

优点:同类数据归类存储方便管理。从底层结果来说,比string操作消耗内存更小,也比string存储更节省空间。

缺点:有效时间只能设置在key上,不能设置在field字段上。Redis集群架构下不适合大规模使用。

四、List类型

常用操作

  1. LPUSH key element1 [element2 ...]:将一个或多个元素从左侧插入到列表中。
  2. RPUSH key element1 [element2 ...]:将一个或多个元素从右侧插入到列表中。
  3. LPOP key:从左侧移除并返回列表中的第一个元素。
  4. RPOP key:从右侧移除并返回列表中的最后一个元素。
  5. BRPOP key [key ...] timeout:从右侧移除一个元素,如果没有则等待,timeout是等待时长(秒),0则一直等待
  6. LINDEX key index:获取列表中指定索引位置的元素值。
  7. LRANGE key start stop:获取列表中指定范围内的元素列表。
  8. LLEN key:获取列表的长度(即列表中元素的数量)。
  9. LREM key count element:从列表中移除指定数量的匹配元素。
  10. LINSERT key BEFORE|AFTER pivot element:在列表中指定元素的前面或后面插入一个元素。
  11. LSET key index element:将列表中指定索引位置的元素替换为新的值。

应用场景:

1、实现常用的数据结构

使用LPUSH结合LPOP实现先进后出的stack栈结构

使用LPUSH结合RPOP实现后进先出的Queue队列结构

使用LPUSH结合BRPOPS实现阻塞队列BlockingMQ

2、微博、微信朋友圈、公众号等消息流

我们在发微博或者朋友圈时永远看到的都是最新时间发布的消息,也就是说是按照时间先后顺序展现的,最先发布的在最后面,最后发布的在最前面,那么这种就可以用List的LPUSH+RPOP队列结构来实现。比起数据库要简单很多了。

再比如我们关注了多个订阅号,当点开订阅号消息时,每个订阅号都会显示最近发表的前1~4条文章,在基于LPUSH+RPOP结构上,那么我们可以使用LRANGE key start stop 获得最近几条文章进行回显。

五、Set类型

常用操作

  1. SADD key member1 [member2 ...]:将一个或多个成员添加到集合中,成员存在则忽略,不存在则新建。
  2. SREM key member1 [member2 ...]:从集合中移除一个或多个成员。
  3. SISMEMBER key member:检查指定成员是否存在于集合中。
  4. SMEMBERS key:获取集合中的所有成员。
  5. SCARD key:获取集合中的成员数量。
  6. SPOP key [count]:从集合中随机移除并返回一个或多个成员。
  7. SRANDMEMBER key [count]:从集合中随机获取一个或多个成员,但不移除。
  8. SDIFF key1 [key2 ...]:获取多个集合的差集。(计算公式为:list1-(list2、list2、...的并集),第一个集合减去其他几个集合的并集。排除相同的元素,第一个集合剩下的就是并集)
  9. SINTER key1 [key2 ...]:获取多个集合的交集。
  10. SUNION key1 [key2 ...]:获取多个集合的并集。

应用场景:

1、抽奖活动

一次抽奖多个用户,例如参与抽奖的用户有10个,一次抽取2个用户作为中奖用户,使用SMEMBERS key查看所有抽奖成员,使用SRANDMEMBER key [count]抽取2个成员。

多次抽奖,被开奖的用户不可再次参与。使用SPOP key [count]抽取成员作为开奖用户,同时会移除已开奖的用户。

2、微信点赞、评论

存储的结构为:

消息ID为key ,例如:like:msgID
用户ID为field,例如:10000

朋友圈消息点赞时使用SADD key member添加一条记录,例如sadd like:1 1000。取消点赞srem like:1 1000。消息点赞后的图标高亮,使用SISMEMBER key member查询成员是否存在,存在则高亮。使用SCARD key获得点赞成员数量。

朋友圈消息点赞成员列表,在微信朋友圈当我点赞朋友的一条消息时,会在下方显示点赞成员列表,这个列表只显示与我是好友点赞成员,不是好友则不显示。那么此时可以使用交集查询。

3、电商系统购买电脑时配置选择

六、Sorted Set(Zset)

  1. ZADD key score1 member1 [score2 member2 ...]:将一个或多个成员及其分数添加到有序集合中。各参数的具体含义:key为键,score为member的分数,用于排序,member是key的值,可以批量添加。
  2. ZREM key member1 [member2 ...]:从有序集合中移除一个或多个成员。
  3. ZSCORE key member:获取有序集合中指定成员的分数。
  4. ZRANGE key start stop [WITHSCORES]:按照分数从小到大的顺序,获取有序集合中指定索引范围内的成员。
  5. ZREVRANGE key start stop [WITHSCORES]:按照分数从大到小的顺序,获取有序集合中指定索引范围内的成员。
  6. ZCARD key:获取有序集合中的成员数量。
  7. ZCOUNT key min max:计算有序集合中分数在给定范围内的成员数量。
  8. ZRANK key member:获取有序集合中指定成员的排名,排名从0开始。(按照分数从小到大的顺序)。
  9. ZREVRANK key member:获取有序集合中指定成员的排名(按照分数从大到小的顺序)。
  10. ZINCRBY key increment member:将有序集合中指定成员的分数增加给定的增量值。

应用场景

体育赛事排行榜、新闻热度排行榜。我们任意打开一个新闻网站,总有块区域显示排行前10的新闻,排行版一般都是根据点击数来排行的,这个点击数就可以使用ZINCRBY key increment member指令来实现。例如:zincrby hotNews:currentDate 1 newsTopic,每点击一次 newsTopic+1(新闻主题的分值+1)。

更多的Redis操作指令,请查看官方文档Commands

标签:...,场景,Hash,数据类型,Redis,指定,value,key,集合
From: https://www.cnblogs.com/jiaodaoniujava/p/17748048.html

相关文章

  • 企业场景面试题
    面试时,在询问一些技术场景问题的时候,通常以如下的问题。这些是每一个项目都需要面对的问题,能够回答这些问题才能够说明有过实际的开发经验,同时从回答种也可以看出我们的真实实力水平......
  • Go 基础之基本数据类型
    Go基础之基本数据类型目录Go基础之基本数据类型一、整型1.1平台无关整型1.1.1基本概念1.1.2分类有符号整型(int8~int64)无符号整型(uint8~uint64)1.2平台相关整型1.2.1基本概念1.2.2注意点1.2.3获取三个类型在目标运行平台上的长度1.3整型的溢出问题1.3.1什么是整形溢出?1.......
  • Go 复合数据类型之结构体与自定义类型
    Go复合数据类型之结构体与自定义类型目录Go复合数据类型之结构体与自定义类型一、类型别名和自定义类型1.1类型定义(TypeDefinition)简单示例1.2类型别名简单示例1.3类型定义和类型别名的区别二、结构体2.1结构体介绍2.2结构体的定义2.3定义一个空结构体2.3.1空结构体介......
  • 正向代理和反向代理的区别、应用场景及在nginx上的应用
    正向代理和反向代理是两种常见的代理服务器架构,它们在网络通信中扮演不同的角色和应用场景。1、正向代理(ForwardProxy):正向代理是一个位于客户端和目标服务器之间的代理服务器。当客户端需要访问互联网上的资源时,它首先将请求发送给正向代理服务器,然后由代理服务器代表客户端发送请......
  • TSINGSEE青犀基于AI视频智能分析的客流统计分析场景方案
    随着AI技术的不断发展与人类需求的不断提升,视觉目标的检测识别、智能监控在人们的生活中均有着广泛的应用。其中,智能安防视频监控是计算机视觉的重要应用领域,而AI客流统计则是近年来此领域大家关注热度较高的技术之一。行业痛点传统的客流量统计采用的仍是人工计数方法,对进出商超的......
  • TSINGSEE青犀基于AI视频智能分析的客流统计分析场景方案
    随着AI技术的不断发展与人类需求的不断提升,视觉目标的检测识别、智能监控在人们的生活中均有着广泛的应用。其中,智能安防视频监控是计算机视觉的重要应用领域,而AI客流统计则是近年来此领域大家关注热度较高的技术之一。行业痛点传统的客流量统计采用的仍是人工计数方法,对进出......
  • RedisStack部署/持久化/安全/与C#项目集成
    前言Redis可好用了,速度快,支持的数据类型又多,最主要的是现在可以用来向量搜索了。本文记录一下官方提供的redis-stack部署和配置过程。关于redis-stackredis-stackinstallsaRedisserverwithadditionaldatabasecapabilitiesandtheRedisInsight.redis提供了俩......
  • 简述redis特点及其应用场景
     1、Redis特点1.1.速度快:10WQPS,基于内存,C语言实现,而众所周知,C语言是“距离”操作系统最近的的编程语言,执行速度快1.2.单线程:Redis采用了单线程的架构,避免了多线程的资源竞争问题1.3.简单:代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖......
  • java程序出现oom如何解决?什么场景下会出现oom?
     1、概述 OOM,全称“OutOfMemory”,翻译成中文就是“内存用完了”。当JVM因为没有足够的内存来为对象分配空间、并且垃圾回收器也已经没有空间可回收时,就会抛出这个error。2、常见OOM情况及解决方法情况一、java.lang.OutOfMemoryError:Javaheapspace——>j......
  • 对比redis的RDB、AOF模式的优缺点
     1.RDB模式优缺点1.1.RDB模式优点1.1.1.RDB快照保存了某个时间点的数据,可以通过脚本执行redis指令bgsave(非阻塞,后台执行)或者save(会阻塞写操作,不推荐)命令自定义时间点备份,可以保留多个备份,当出现问题可以恢复到不同时间点的版本,很适合备份,并且此文件格式也支持......