详解Redis五种数据格式--小白的进阶之路

❤️ 随手一写,开始日益积累的行程❤️
❤️目前博主已经转到SOLO如果喜欢大家可以到www.wslhome.top进行查看❤️

一、前言:

redis:
所有的操作都是原子性的,采用单线程的形式处理事务、命令按顺序一个个执行,可以不用考虑并发对数据的影响。然而在之前简单说过redis的应用场景有:

  • 缓存:秒杀活动、排队购票、在线人数、点赞、投票
  • 系统优化升级:集群、session管理、Token管理

现在我们来聊聊redis的物种数据类型相关的东西


二、String:

1. 存储结构:

image.png

2. 命名规范:
表名:主键名:主键值:字段名
3. 应用场景:

  • 点赞\浏览量\访问量统计(PV)
  • mysql 数据库的分表

(可用于控制数据库表的主键id.为数据库主键提供生成策略,从而保证数据库表的一致性)

  • 一定时间内的投票、一个用户一定时间内只能投票一次

    setx key seconds value (set sirwsl 86400 1)
    psetex key milliseconds value
    
  • 验证码存储

    (set phone:183142633336 123456)
    

4. 注意事项:

  • 数据指令操作时,不同指令返回不同、有的0(false)1(true),有的0、1是具体数值
  • 数据存储的最大值为:512M
  • 计算最大值为java中的long 的最大值
  • 未获取到值未(nil)等同于null

三、Hash

1. 存储结构:

对一系列的数据进行编组处理(对象存储),在一个存储空间中保存多个键值对数据,底层采用哈希表结构实现数据存储

image.png

2. hash优化(内):

  • 如果filed数量比较少,存储结构为类数组结构
  • 如果filed数量比较多,存储结构采用HashMap的结构

3. 应用场景:

  • 存储对象:对象名作为key、属性作为filed、值作为value(不能进行大量存储)
  • 电商网站:购物车、商品:
  • 每个用户的id作为key,商品id作为filed,商品数量作为value;可以对应增删改等相关操作(hincr、hdecr、hdel、hset、hsetnx)
  • 每个商家id作为key,优惠券作为filed、数量作为value。

4. 注意事项:

  • hash类型下的value只能存储字符串
  • hash虽然看似对象的数据格式,但是不能够用于大量存储对象
  • 每个hash可以存储pow(2,31)-1个键值对
  • 我们采用hgetall进行获取全部属性时,如果里面的filed过多就会变得效率低下

四:list

1. 存储结构:双向链表

image.png

2. 应用场景

  • 有严格的顺序控制:
  • 朋友圈、QQ的点赞显示好友的点赞顺序。
  • 做消息队列、堆栈
  • 按照时间顺序统计:eg博客文章、新闻
  • 消息排队、最新消息的展示

3. 注意事项:

  • list 保存数据为String类型,数据总量为pow(2,31)-1个元素
  • list 具有索引的概念,但是操作数据时候通常进行入队出队、入栈出栈的操作
  • list 一般存储分页的第一页信息,后面信息数据库加载

五:set

1. 存储结构

image.png

2. 应用场景:

  • 随机热点数据推送=>随机取出(srandmember )移除(spop)
  • 查看共同好友、共同属性 =>交、并、差集合(subter、 sunion、sdiff)
  • 应用不同数据的合并
  • 记录网站的IP数量与UV

3. 注意事项:

  • set数据类型不允许数据重复

六:sorted_set

1. 数据结构:在set基础上多出一个score,但这一列非数值记录,只是类似标志位存在

image.png

2. 应用场景:

  • 成绩、工资等的排序、排行榜
  • 对于带有权重的任务

3. 注意事项:

  • score字段的存储空间是64位的,如果是整数,范围:-9007199254740992-9007199254740992
  • score字段存储池也可以是double,但是使用时候可能会丢失精度
  • sorted_set底层存储是set结构,因此数据不能重复,如果重复score会被反复修改

猜你喜欢

转载自blog.csdn.net/qq_40432886/article/details/106796067