【博学谷学习记录】超强总结,用心分享|狂野架构师Redis常用知识点
Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。
特征:
1.数据间没有必然的关联关系;
2.内部采用单线程机制进行工作;
3.高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是
81000次/s。
4.多数据类型支持
字符串类型,string list
列表类型,hash set
散列类型,zset/sorted_set
集合类型
有序集合类型
5.支持持久化,可以进行数据灾难恢复
应用场景
1.为热点数据加速查询(主要场景)。如热点商品、热点新闻、热点资讯、推广类等高访问量信息
等。
2.即时信息查询。如各位排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网
站)、设备信号等。
3.时效性信息控制。如验证码控制、投票控制等。
4.分布式数据共享。如分布式集群架构中的 session 分离 : 消息队列
2.1 数据存储类型介绍
2.1.1 业务数据的特殊性
未来会进入到我们来的redis中的数据
1.原始业务功能设计
秒杀。(618、双十一、购票)
他这个里边数据变化速度特别的快,访问量也特别的高,用户大量涌入以后都会针对着一部分数
据进行操作,这一类要记住。
2.运营平台监控到的突发高频访问数据(八卦热点)
此类平台临时监控到的这些数据,比如说现在出来的一个八卦的信息,这个新闻一旦出现以后呢,顺速
的被围观了,那么这个时候,这个数据就会变得访量特别高,那么这类信息也要进入进去。
3.高频、复杂的统计数据
在线人数。比如说直播现在很火,直播里边有很多数据,例如在线人数。进一个人出一个人,这个数据
就要跳动,那么这个访问速度非常的快,而且访量很高,并且它里边有一个复杂的数据统计,在这里这
种信息也要进入到我们的redis中。
投票排行榜。投票投票类的信息他的变化速度也比较快,为了追求一个更快的一个即时投票的名次变
化,这种数据最好也放到redis中。
Redis5种常用数据类型
string、hash、list、set、sorted_set/zset(应用性较低)
string
1.存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型。 string,他就是存一个字符串儿注意是value那一部分是一个字符串,它是redis中最基本、最简单的存储数据的格式。
2.存储数据的格式:一个存储空间保存一个数据每一个空间中只能保存一个字符串信息,这个信息里边如果是存的纯数字,他也能当数字使用,我们来看一下,这是我们的数据的存储空间。
3.存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用。
当你影响的数据比较少的时候,你可以用单指令,也可以用多指令。但是一旦这个量大了,你就
要选择多指令了,他的效率会高一些。
hash
同一对象类(直播频道粉丝人数、排行榜)中的多个数据,修改频繁
hash 类型数据操作的注意事项
1.hash类型中value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,对应的值为(nil)。
2.每个 hash 可以存储 232 - 1 个键值对
hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计 的,切记不可滥用,更不可以将hash作为对象列表使用。
3.hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈
应用场景
双11活动日,销售手机充值卡的商家对移动、联通、电信的30元、50元、100元商品推出抢购活动,每
种商品抢购上限1000 张。
list
数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
list类型:保存多个数据,底层使用双向链表存储结构实现
list 类型数据操作注意事项
1.list中保存的数据都是string类型的,数据总容量是有限的,最多232 - 1 个元素(4294967295)。
2.list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作
3.获取全部数据操作结束索引设置为-1
4.list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载
应用场景
企业运营过程中,系统将产生出大量的运营数据,如何保障多台服务器操作日志的统一顺序输出
set
新的存储需求:存储大量的数据,在查询方面提供更高的效率
需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的
set 类型数据操作的注意事项
set 类型不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份。
set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间。
set**应用场景**
黑名单、白名单
持久化
利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化 。
持久化用于防止数据的意外丢失,确保数据安全性。
RBD:
将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据。
RDB优点:
RDB是一个紧凑压缩的二进制文件,存储效率较高
RDB内部存储的是redis在某个时间点的数据快照,非常适合用于数据备份,全量复制等场景
RDB恢复数据的速度要比AOF快很多
应用:服务器中每X小时执行bgsave备份,并将RDB文件拷贝到远程机器中,用于灾难恢复。
RDB缺点
RDB方式无论是执行指令还是利用配置,无法做到实时持久化,具有较大的可能性丢失数据
bgsave指令每次运行要执行fork操作创建子进程,要牺牲掉一些性能
Redis的众多版本中未进行RDB文件格式的版本统一,有可能出现各版本服务之间数据格式无法兼
容现象
AOF:
将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作
过程。
补充RDB存在弊端:
RDB的存储:存储数据量较大,效率较低,基于快照思想,每次读写都是全部数据,当数据量巨大时,效率非常
低
大数据量下的IO性能较低
基于fork创建子进程,内存产生额外消耗
宕机带来的数据丢失风险
AOF执行策略
always(每次):每次写入操作均同步到AOF文件中数据零误差,性能较低,不建议使用。
everysec(每秒):每秒将缓冲区中的指令同步到AOF文件中,在系统突然宕机的情况下丢失1秒
内的数据 数据准确性较高,性能较高,建议使用,也是默认配置
no