Redis录播学习笔记 | 青训营笔记

13 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

1.为什么需要Redis:

-数据分冷热
    -热数据:经常被访问到的数据
-将热数据存储到内存中

2.基本工作原理:(redis-client为RESP协议)

-数据从内存读写
-数据保存到硬盘上防止重启数据丢失
    -增量数据保存到AOF文件(最新的东西加到文件末尾,重启会对比文件命令)
    -全量数据保存为RDB文件(redis所有信息,重启对比没有执行的命令,会继续执行)
    -单线程处理所有操作命令(一定顺序执行命令,很重要的特性,数据同步,分布式锁会用到这个特性)
    

3.案例

 -连续签到:(1.Incr原有数值加一,2.设置过期时间,过期后归为0)
 -消息通知:队列》数据结构:Quicklist,双向链表与listpack(entry)一个节点上存好多元素,然后压缩到一个entry上,
 -计数:dicthash数据结构,一个用户有多项技术需求,组合多个key到一个hash里面,放入redis,减少数据库压力,多个hash数据设置为一个pipe一次性发送到redis服务端,增加值命令:HIncrBy()
 -排行榜:zset数据结构》zskiplist 最高4层,obj指向hash表
 -限流:redis中的一个key记录访问次数,调用incr加一
 -分布式锁:用setnx实现,单线程执行命令,setnx只有key未设置过才能被重复设置执行成功,不一定能保证高可用
 

4.String数据结构(二进制安全,存储节省空间,读取速度快,数据变更时可快速写入)sds设计结构及运行原理

-可以存储字符串、数字、二进制数据
-通常和expire配合使用
-场景:存储计数、Session

sds指针先只想len获取sdshdr长度,知道往右移动多少位是flags与buf,指到这两者中间,向左获取原信息,向右获取value。

5.Hash数据结构:dict,槽位存储,槽位过长,单链表查询性能降低,会扩容多个槽位

-rehash:ht[0]中数据直接拷贝到h[1]中,指到h[0]的指针会指到h[1]上,数据量大时,会阻塞用户操作

-渐进式rehash,每次迁移少量数据,将整个迁移过程平摊到所有的访问请求中