Redis知识点总结
2020-10-15 16:55:06 1 举报
AI智能生成
Redis知识点总结(Redis深度历险)
作者其他创作
大纲/内容
Redis知识点总结
基础数据结构
String(字符串)
基本使用
键值对方式
set
设置一个键值
get
通过名称获取一个键值
批量键值对
mset
批量设置键值对
mget
批量获取键值对
计数
incr
将整数+1
incrby
将整数-1
底层结构
SDS
长度小于44字节
Embstr
长度大于44字节
Raw
list(列表)
队列
rpush
右边压入
lpop
左边出队
栈
rpop
右边弹出
慢操作
lindex
时间复杂度O(n)
ltrim
截断list一部分
元素少
ziplist(压缩列表)
元素多
quicklist(快速列表)
由linkedlist以及ziplist组合而成
hash(字典)
hset
设置元素
hget
通过名称获取元素
两个HashMap
当前使用的Map
扩容的缩容使用的Map
扩容
渐进式ReHash
同时保留旧数组与新数组
在定时任务中以及后续对hash的操作指令中渐渐将旧数组中的元素挂接到新数组中
set(集合)
sadd
添加一个元素到set中
spop
从set中删除一个元素
scrad
统计元素个数
smembers
获取set中所有元素
没有value的HashTable
zset(有序列表)
zadd
添加一个value-score到zset中
zrange
统计一个段中的元素
zcard
获取元素个数
skiplist(跳跃列表)
底层结构实现
基本对象
基本对象类型
SDS(字符串)
SDS结构
当长度特别短时(小于44字节)
当长度超过44字节时(64(分配小字符串的最大容量)- 16(对象头) - 3(SDS信息) - 1(字节数组结尾结束符))
扩容策略: 在1MB之前翻倍.1MB之后每次增加1MB;
ListPack(紧凑列表)
ListPack
SkipList(跳跃列表)
数据结构
注
对每一个节点由算法随机分配一个合理的层级几率依次递减为上一次的1/4
skiplist
HashTable(哈希表)
HashTable
扩容缩容
缩容
搬迁
QuickList(快速列表)
quicklist
IntSet(整数集合)
IntSet
ZipList(压缩列表)
ziplist构成
结构
Encoding编码前缀
1.00XXXXXX:最大长度为63位的字符串.后面6位存储字符串的位数.剩余的字节则是字符串的内容.
div yne-bulb-block=\"paragraph\" style=\"white-space: pre-wrap; line-height: 1.75; font-size: 14px;\
9.11111111: ziplist结束符号.
ZipList
Redis应用
String
位图
setbit
通过位置设置bit
getbit
通过位置获取bit
bitcount
统计1的个数
一般用于类似统计登陆天数
bitfield
对段进行读写
一次最多处理64个连续的位
用于布隆过滤器
HyperLogLog
一种Redis的高级数据结构
用于粗略统计
布隆过滤器
对于见过的元素不会误判
原理
一个大型的位数组
几个无偏hash函数
用于
常用与邮件过滤系统
List
Set
Hash
zset
限流策略
滑动窗口限流
使用过程
2.判断当前时间与最早时间戳之间的差距
4.将超出时间的时间戳删除
限制
同样不适用于时间长的限流
漏斗限流
参数设置
1.漏斗容量
2.漏斗流水速率
3.漏斗剩余空间
4.上次漏水时间
1.计算上次漏水时间到现在时间的差
2.通过漏斗流水速率计算所需容量
3.当所需容量超过剩余空间则需要被限流
GeoHash地理查询
常用于查看附近的人
Scan语法
scan number match \"前缀\" count cnt
持久化机制
RDB(快照)
Copy On Write机制
AOF(增量日志)
缺点
解决方式
通过bgrewriteaof指令重写AOF日志
同步
通常Redis一秒钟会调用一次fsync函数将日志刷新到磁盘中
Redis提供了两种策略
来一个指令调用一次fsync(效率极低)
混合持久化
在Redis4.0之后支持混合持久化
Redis集群
CAP原理
一致性
数据保持一致
可用性
服务保持可用
分区容忍性
主从同步
保证最终一致性
增量同步
快照同步
快照同步非常消耗资源
过期策略
Redis每秒进行十次过期扫描
定时扫描策略
1.从过期字典中随机选出20个Key
2.删除20个Key中过期的Key
从节点过期策略
淘汰算法
LRU算法
2.allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
3.allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
4.volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
5.volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
6.volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
LRU具体实现
Redis实现 : 近似LRU算法
在Redis每个对象头中有24bit的字段用于记录最近一次访问的时间戳
LFU算法
在Redis每个对象头中有16bit的字段用于记录最近一次访问的时间戳
懒惰删除
使用unlink指令对删除进行懒处理
0 条评论
回复 删除
下一页