❤️ 随手一写,开始日益积累的行程❤️
❤️目前博主已经转到SOLO如果喜欢大家可以到www.wslhome.top进行查看❤️
一、前言:
redis:
所有的操作都是原子性的,采用单线程的形式处理事务、命令按顺序一个个执行,可以不用考虑并发对数据的影响。然而在之前简单说过redis的应用场景有:
- 缓存:秒杀活动、排队购票、在线人数、点赞、投票
- 系统优化升级:集群、session管理、Token管理
现在我们来聊聊redis的物种数据类型相关的东西
二、String:
1. 存储结构:
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. 存储结构:
对一系列的数据进行编组处理(对象存储),在一个存储空间中保存多个键值对数据,底层采用哈希表结构实现数据存储
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. 应用场景
- 有严格的顺序控制:
- 朋友圈、QQ的点赞显示好友的点赞顺序。
- 做消息队列、堆栈
- 按照时间顺序统计:eg博客文章、新闻
- 消息排队、最新消息的展示
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会被反复修改