Redis的应用场景
数据库的数据量提升,访问数据代价提高。将经常访问的数据放到Redis里,类似于Cache
Redis工作原理
要保证一定程度上的可持久化,需要写到硬盘里。
AOF:增量数据保存的文件。
RDB:全量保存,保存Redis所有的文件。
启动时,先检查RDB,如有不存在于Redis中的数据,就先恢复(类似于数据库的日志)
Redis中的一些数据结构
String(实现连续签到)
sds指针后面的是具体内容,前面的是信息。len表示当前已使用的字节数,alloc表示已申请的,flags表示指针左移多少会遇到上一个信息。
Quicklist(消息通知)
双向链表,每个节点是一个listpack,保存多个数据。
应用方法:在go代码中设置循环,读取list,每当有新数据添加后都可以识别出来
hash(统计)
根据一个key可以获取一个结构,其中包含多个信息。
将多条数据一次性写入:使用pipeline结构
结构:
rehash:将ht[0]中的数据放到ht[1]
渐进式rehash:每次访问ht[0]的时候都将一部分ht[0]中的数据放到ht[1]中。将数据迁移的拷贝过程平摊到每次访问过程中。
应用方法:设置一个数据结构,拥有多个key和对应的value,根据一个key来查找一个整体的结构信息。
zset(排行榜)
使用skiplist+dict
skiplist用来加快查找链表的速度(按照顺序存放),dict用来保存每个节点内部的信息
分布式锁
setnx
使用前提:Redis是单线程执行命令;setnx只有未设置过才能执行成功(每个协程只用一次)