Redis的五大数据类型及其使用场景

这篇具有很好参考价值的文章主要介绍了Redis的五大数据类型及其使用场景。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

redis是一个非常快速‎‎的非关系数据库‎‎解决方案。其简单的键值数据模型使 Redis 能够处理大型数据集,同时保持令人印象深刻的读写速度和可用性。‎redis提供了五种数据类型,分别是是:1、string(字符串);2、hash(哈希);3、list(列表);4、set(集合);5、sort set (有序集合)(其实随着 Redis 版本的更新,后面又支持了四种数据类型:BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增),本文暂不作介绍。)。接下我就给大家介绍一下这五种数据类型的基本用法和使用场景。

Redis的五大数据类型及其使用场景

Redis五大数据类型

一. String

1、简介

字符串类型:实际上可以是字符串(包括XML、JSON)、还有数字(整形、浮点数)、二进制(图片、音频、视频),最大不能超过512MB。

 

2、常用命令

(1)设值命令:

set age 23 ex 10 //10秒后过期 px 10000 毫秒过期

setnx name test //不存在键name时,返回1设置成功;存在的话失败0

set age 25 xx //存在键age时,返回1成功

(2)获值命令:

get age //存在则返回value, 不存在返回nil

(3)批量设值:

mset country china city beijing

(4)批量获取:

mget country city address //返回china beigjin, address为nil

(5)计数命令:

incr age //必须为整数自加1,非整数返回错误,无age键从0自增返回1
decr age //整数age减1
incrby age 2 //整数age+2
decrby age 2//整数age -2
incrbyfloat score 1.1 //浮点型score+1.1

 

(6)append追加指令:

set name hello; append name world //追加后成helloworld

(7)字符串长度:

set hello “世界”;strlen hello//结果6,每个中文占3个字节

(8)截取字符串:

set name helloworld ; getrange name 2 4//返回 llo

 

3、使用场景

(1) 简单字符缓存

(2) 分布式锁

(3)计数功能——》计数服务

INCR article:001 (文章001阅读数加1)
GET airticle:001
Redis的五大数据类型及其使用场景

文章阅读数

(4) 各类场景下(单机或分布式)的标识号

Incrby serialNo 1 ——》分给每个服务1000个本地缓存Incrby serialNo 1000

(5) 集群环境下的Session共享

 

二、Hash

1、简介

哈希hash是一个string类型的field和value的映射表,hash特适合用于存储对象

Redis的五大数据类型及其使用场景

hash

 

2、常用命令

(1)设值命令:

设值:

hset user:1 name james //成功返回1,失败返回0

批量设值:

hmset user:2 name james age 23 sex boy //返回OK

(2)取值命令:

取值:

hget user:1 name //返回james

批量取值:

hmget user:2 name age sex //返回三行:james 23 boy

(3)删除命令:

hdel user:1 age //返回删除的个数

(4)计算个数:

hset user:1 name james;
hset user:1 age 23;
hlen user:1 //返回2,user:1有两个属性值

(5)判断field是否存在:

hexists user:2 name //若存在返回1,不存在返回0

(6)获取所有field:

hkeys user:2 // 返回name age sex三个field

(7)获取user:2所有value:

hvals user:2 // 返回james 23 boy

(8)获取user:2所有field与value:

hgetall user:2 //name age sex james 23 boy值

(9)增加1:

hincrby user:2 age 1 //age+1
hincrbyfloat user:2 age 2 //浮点型加2

 

3 、使用场景

(1) 存储对象

实例:购物车

Hmset cart:001 prod:01 1 prod:02 1

当前登录用户ID号为key,商品ID号为Field,加入购物车数量为value

Redis的五大数据类型及其使用场景

购物车展示

三、 List

1、简介

用来存储多个有序的字符串,一个列表最多可存2的32次方减1个元素。因为有序,可以通过索引下标获取元素或某个范围内元素列表,列表元素可以重复

Redis的五大数据类型及其使用场景

list

2、常用命令

(1)添加命令:

rpush james c b a //从右向左插入cba, 返回值3
lrange james 0 -1 //从左到右获取列表所有元素 返回 c b a
lpush key c b a //从左向右插入cba
linsert james before b teacher //在b之前插入teacher, after为之后,使 用lrange james 0 -1 查看:c teacher b a

 

(2)查找命令:

lrange key start end //索引下标特点:从左到右为0到N-1
lindex james -1 //返回最右末尾a,-2返回b
llen james //返回当前列表长度
lpop james //把最左边的第一个元素c删除
rpop james //把最右边的元素a删除

 

3、使用场景

(1)利用List实现栈、队列

1.先进后出:栈 = LPUSH+LPOP->FILO

2.先进先出:队列=LPUSH+RPOP

3.Blocking MQ(堵塞队列)= LPUSH+BRPOP

 

(2)redis做消息队列(不推荐使用redis做消息队列)

下面以订单为例子进行演示:

  1. 每个用户有多个订单key为 order:1 order:2 order:3, 结合hmset
hmset order:1 orderId 1 money 36.6 time 2018-01-01
hmset order:2 orderId 2 money 38.6 time 2018-01-01
hmset order:3 orderId 3 money 39.6 time 2018-01-01
  1. 把订单信息的key放到队列
lpush user:1:order order:1 order:2 order:3
  1. 新产生了一个订单order:4,
hmset order:4 orderId 4 money 40.6 time 2018-01-01
  1. 追加一个order:4放入队列第一个位置
lpush user:1:order order:4
  1. 当需要查询用户订单记录时:
List orderKeys = lrange user:1:order 0 -1 //查询user:1 的所有订单key值
for(Order order: orderKeys){
		hmget order:1
}

 

(3)列表缓存

Redis的五大数据类型及其使用场景

微信订阅号展示

 

小明微信号ID:001,他关注了顶级架构师、爱敲代码的小黄、程序员蜗牛上图的展示效果应该如何设计?

  1. 顶级架构师发布了一条文章ID为100的文章
lpush:mes:001 100
  1. 爱敲代码的小黄发布了一条文章ID为101的文章
lpush:mes:001 101
  1. 程序员蜗牛发布了一条文章ID为102的文章
lpush:mes:001 102
  1. 小明的微信订阅号列表实现如下
lrange mes:001 0 5

 

四、Set

1、简介

保存多元素,与列表不一样的是不允许有重复元素,且集合是无序,一个集合最多可存2的32次方减1个元素,除了支持增删改查,还支持集合交集、并集、差集;

Redis的五大数据类型及其使用场景

sey

2、常用命令

(1)检查user键值是否存在

exists user 

(2)设置命令:

sadd user a b c//向user插入3个元素,返回3
sadd user a b //若再加入相同的元素,则重复无效,返回0

(3)查找命令:

smember user //获取user的所有元素,返回结果无序

(4)删除命令:

srem user a //返回1,删除a元素

(5)计算元素个数

scard user //返回2,计算元素个数

 

3、Set 集合特殊的操作指令

(1)集合与集合之间的交集

sinter setA setB -> 得到集合 {B,C}

(2)集合与集合之间的并集

sunion setA setB -->得到集合{A,B,C}

(3)集合与集合之间的差集

sdiff setA setB-->得到集合{A}

 

4、使用场景:

(1)标签,社交,查询有共同兴趣爱好的人,智能推荐

使用方式:

给用户添加标签:

sadd user:1:fav basball fball pq
sadd user:2:fav basball fball
............

 

或给标签添加用户

sadd basball:users user:1 user:2
sadd fball:users user:1 user:2
........

 

计算出共同感兴趣的人:

sinter user:1:fav user2:fav

 

(2)抽奖

Redis的五大数据类型及其使用场景

微信抽奖

 

微信有一个活动,活动ID为001,如何实现微信抽奖功能,基于Redis设计实现?

假设小明的userId为: 004

  1. 当小明点击参与抽奖时,数据放入set集合
sadd active:001 004
  1. 开始抽奖2名中奖者(随机)
srandmember active:001 2

或者

 spop act:001 2
  1. 查看有多少用户参加了本次抽奖
smembers active:001

 

(3)朋友圈点赞

朋友圈消息ID:008,微信点赞如何设计?

张三用户ID 为userId:01

Redis的五大数据类型及其使用场景

朋友圈点赞

 

(1)张三对消息ID008点赞啦

sadd zan:008 userId:01

(2)张三取消了对消息008的点赞

srem zan:008 userId:01

(3)检查用户是否点过赞

sismember zan:008 userId:01

(4)获取消息ID008所有的点赞用户列表

smembers zan:008

(5)消息ID008的点赞数计算

scard zan:008

 

 

(4)Set集合特殊的操作指令应用场景

如何实现微博的微关系设计?

Redis的五大数据类型及其使用场景

微博关注

条件:

1 James关注的人

sadd jamesCares Irving,peter,king,jack

条件2 Irving关注的人

sadd IrvingCares james,jack,cjk,king

条件3 jack关注的人

sadd avCares deer,cjk,king

 

计算:

计算1 James和Irving共同关注的人

sinter jamesCares IrvingCares , 计算结果为 {jack, king}

计算2 我关注的人也关注他(king)

sismember IrvingCares king
sismember avCares king

计算3 我可能认识的人

SDIFF IrvingCares jamesCares-> {james.cjk}

 

五、ZSet

1、简介

常用于排行榜,如视频网站需要对用户上传视频做排行榜,或点赞数与集合有联系,不能有重复成员

Redis的五大数据类型及其使用场景

zset

2、常用命令

(1)添加命令

zadd key score member [score member......]
zadd user:zan 200 james //james的点赞数1, 返回操作成功的条数1
zadd user:zan 200 james 120 mike 100 lee// 返回3
zadd test:1 nx 100 james //键test:1必须不存在,主用于添加
zadd test:1 xx incr 200 james //键test:1必须存在,主用于修改,此时为300
zadd test:1 xx ch incr -299 james //返回操作结果1,300-299=1

(2)查询命令

zrange test:1 0 -1 withscores //查看点赞(分数)与成员名

 

(3)计算成员个数

zcard test:1 //计算成员个数, 返回1

 

3、使用场景

排名场景:

zadd user:3 200 james 120 mike 100 lee//先插入数据
zrange user:3 0 -1 withscores //查看分数与成员
zrank user:3 james //返回名次:第3名返回2,从0开始到2,共3名
zrevrank user:3 james //返回0, 反排序,点赞数越高,排名越前

 

排行榜系统,如视频网站需要对用户上传的视频做排行榜

点赞数:

zadd user:1:20180106 3 mike //mike获得3个赞

再获一赞:

zincrby user:1:20180106 1 mike //在3的基础上加1

用户作弊,将用户从排行榜删掉:

zrem user:1:20180106 mike

展示赞数最多的5个用户:

zrevrangebyrank user:1:20180106 0 4

查看用户赞数与排名:

zscore user:1:20180106 mike zrank user:1:20180106 mike

 

实例

以最典型的微博热搜为例,描述用Redis设计实现, 以日期做为Key

Redis的五大数据类型及其使用场景

微博热搜展示

 

(1)点击话题

zincrby topic:20230717 1 狗头萝莉

(2)上图排行实现,展示今日前10排名

zrevrange topic:20230717 0 9 withscores

(3)统计近3日点击数据

zunionstore topic:3day 3 

(4) 展示近3日的排行前10名

zrevrange topic:20230717-20230717 0 9 withscores

 

4、ZSet和List、Set对比

Redis的五大数据类型及其使用场景

ZSet和List、Set对比文章来源地址https://www.toymoban.com/news/detail-594343.html

到了这里,关于Redis的五大数据类型及其使用场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis五大数据类型

    Redis-Key 官网:https://www.redis.net.cn/order/ 序号 命令语法 描述 1 DEL key 该命令用于在 key 存在时删除 key 2 DUMP key 序列化给定 key ,并返回被序列化的值 3 EXISTS key 检查给定 key 是否存在,存在返回1,否则返回0 4 EXPIRE key seconds 为给定 key 设置过期时间,以秒计 5 EXPIREAT key timestamp E

    2024年02月11日
    浏览(37)
  • Redis入门-redis的五大数据类型+三种特殊的数据类型

    Redis有 五大基本类型 : 字符串(string) 、 哈希(hash) 、 列表(list) 、 集合(set) 和 有序集合(sorted set) 。 字符串(string)是Redis最基本的类型,可以存储任意类型的数据 ,如整数、浮点数、二进制数据等。字符串类型的操作包括设置键值对、获取值、增减值等。

    2024年01月21日
    浏览(41)
  • 【Redis】五大数据类型(操作命令)

    🚩Redis 键(key) 这些是 Redis 数据库中的命令,用于对数据类型进行操作和管理。以下是每个命令的含义和用法: DEL:删除一个或多个键。 DUMP:将一个键的值转储到一个字符串中。 EXPIRE:设置键的过期时间。 EXPIREAT:在给定的时间戳之后为键设置过期时间。 KEYS:返回匹配给

    2024年02月13日
    浏览(58)
  • Redis(二)—— 五大基本数据类型和三大特殊数据类型

    1、常用命令  批量操作: redis可以定义对象  方式(一) :以JSON格式(其实就是key-value格式)保存一个对象 方式(二) : 把对象的两个属性定义成两个key 注意,如果采用第一种方式,那么无法单独取出字段哦~ 2、使用场景 数字int类型的string作为计数器,比如统计文章的

    2024年02月15日
    浏览(34)
  • Redis五大数据类型以及相关操作

    keys * 查看当前库的所有键 exists key 判断某个键是否存在 type key 查看键的类型 del key 删除某个键 expire key seconds 为键值设置过期时间,单位秒 ttl key 查看还有多久过期,-1表示永不过期,-2表示已过期 dbsize 查看当前数据库中key的数量 flushdb 清空当前库 Flushall 通杀全部库 String类型

    2024年02月02日
    浏览(35)
  • Redis的五大数据类型的数据结构

      Redis底层有六种数据类型包括: 简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组 。这六种数据结构五大数据类型关系如下: String:简单动态字符串 List:双向链表、压缩列表 Hash:压缩列表、哈希表 Sorted Set:压缩列表、跳表 Set:哈希表、整数数组   

    2024年02月11日
    浏览(38)
  • 【Redis高手修炼之路】②Redis的五大数据类型

    字符串是Redis最基础的数据类型: 字符串类型实际可以存储字符串、数字、二进制数据; Redis中的键都是字符串类型,值也支持字符串类型; 字符串类型的存储空间是有限的,最大可以存放512M的数据。 1.1.1 添加、查询、获取长度、字符串的追加 set key value 设置指定 key 的值 get

    2023年04月19日
    浏览(40)
  • Redis常用数据类型和使用场景

    Redis目前支持5种数据类型,分别是:     String(字符串) List(列表) Hash(字典) Set(集合) Sorted Set(有序集合) 下面就分别介绍这五种数据类型及其相应的操作命令。   1. String(字符串) String是简单的 key-value 键值对,value 不仅可以是 String,也可以是数字。String在r

    2024年02月16日
    浏览(34)
  • 系列六、Redis中的五大数据类型及相关操作

            Redis中的五大数据类型是指:String、List、Set、ZSet、hash。         Redis中的List类型,类似于Java中的List集合,其特点是:元素有序 且 可以重复。           Redis中的Set类型,类似于Java中的Set集合,其特点是:元素无序且不可以重复。         可排序的不可重复的

    2024年02月13日
    浏览(38)
  • Redis基本数据类型常用操作以及使用场景

    单值缓存 对象缓存 分布式锁 计数器 分布式系统全局序列号       对象缓存 电商购物车 优缺点 队列 微博消息和微信公号消息  微信抽奖小程序  微信微博点赞,收藏,标签   集合操作实现微博微信关注模型 集合操作实现电商商品筛选  常用操作  Zset集合操作实现排行

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包