详解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会被反复修改