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

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

一、前言:

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

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


二、String:

1. 存储结构:

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

(可用于控制数据库表的主键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. 存储结构:

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

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. 存储结构:双向链表

2. 应用场景

3. 注意事项:

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

五:set

1. 存储结构

2. 应用场景:

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

3. 注意事项:

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

六:sorted_set

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

2. 应用场景:

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

3. 注意事项:

    score字段的存储空间是64位的,如果是整数,范围:-9007199254740992-9007199254740992 score字段存储池也可以是double,但是使用时候可能会丢失精度 sorted_set底层存储是set结构,因此数据不能重复,如果重复score会被反复修改
经验分享 程序员 微信小程序 职场和发展