这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
本篇笔记主要记录一下Redis的学习知识
1.Redis是什么?
Redis(Remote Dictionary Server - 远程数据字典服务器)。数据存在内存,读写速度快,提供Nosql服务。
2.Redis基本工作原理
其中AOF和RDB是两种不同的持久化方式。
- RDB:
功能核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数
- AOF:
每当执行服务器(定时)任务或者函数时flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作。
AOF写入保存:
WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件
SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。
其实是一个只进行追加操作的日志文件(append only log),通过重新进行操作还原数据。
3.几个Redis应用案例
1.连续签到
通过Redis的过期key机制,从而完成相关场景需求。对某个用户的签到存储,采用key存储用户id,value存储用户连续签到天数,并且加以设置该key的过期时间,如果超过一天没有打卡,则自动过期从而完成连续签到次数为0的实现。
2.消息通知
采用list数据结构作为消息队列。
3.计数
采用hash数据结构完成需求。
通过key独特用户id,内部存储需要进行计数的数据即可。
4.排行榜
采用跳表数据结构完成需求。
通过key操作跳表来实现。
5.限流
对同一秒内的请求进行计数,如果超出N,则禁止访问。
对key进行incr操作,之后再进行判断,key使用时间戳。
6.分布式锁
4.注意事项
1.大key、热key
- 大key:value的字节数大于10KB(String类型),元素个数大于5000个或总value字节数大于10MB(Hash/Set/Zset/List等复杂数据结构)
- 热key:访问一个key的QPS特别高,导致Server实例出现CPU负载突增或者不均的情况
主要出现的问题就是访问过频或者访问耗时长,需要进行优化从而提高效率。
- 大key解决方法:拆分、压缩、区分冷热(集合型结构)
- 热key解决方法:设置localcache(本地缓存)、拆分
2.慢查询
3.缓存穿透、缓存雪崩
人生苦短,不如go浪一下。