Redis | 青训营

73 阅读2分钟

Redis的应用场景

数据库的数据量提升,访问数据代价提高。将经常访问的数据放到Redis里,类似于Cache

Redis工作原理

要保证一定程度上的可持久化,需要写到硬盘里。
AOF:增量数据保存的文件。
RDB:全量保存,保存Redis所有的文件。

image.jpeg

启动时,先检查RDB,如有不存在于Redis中的数据,就先恢复(类似于数据库的日志)

Redis中的一些数据结构

String(实现连续签到)

image.jpeg

sds指针后面的是具体内容,前面的是信息。len表示当前已使用的字节数,alloc表示已申请的,flags表示指针左移多少会遇到上一个信息。

Quicklist(消息通知)

image.jpeg

双向链表,每个节点是一个listpack,保存多个数据。
应用方法:在go代码中设置循环,读取list,每当有新数据添加后都可以识别出来

hash(统计)

根据一个key可以获取一个结构,其中包含多个信息。
将多条数据一次性写入:使用pipeline结构
结构:

image.jpeg

rehash:将ht[0]中的数据放到ht[1]
渐进式rehash:每次访问ht[0]的时候都将一部分ht[0]中的数据放到ht[1]中。将数据迁移的拷贝过程平摊到每次访问过程中。
应用方法:设置一个数据结构,拥有多个key和对应的value,根据一个key来查找一个整体的结构信息。

zset(排行榜)

使用skiplist+dict

image.jpeg

skiplist用来加快查找链表的速度(按照顺序存放),dict用来保存每个节点内部的信息

分布式锁

setnx
使用前提:Redis是单线程执行命令;setnx只有未设置过才能执行成功(每个协程只用一次)