redis思维导图
2021-02-03 00:00:25 44 举报
AI智能生成
redis学习思维导图
作者其他创作
大纲/内容
基础
数据类型
Stirng
存储类型
用来存储INT,float,string
操作命令
获取指定范围字符getrange hello 0 1
获取长度 strlen hello
字符串追加内容 append hello world
设置多个值 mset hello 123 world 345
获取多个值 mget hello world
设置值,如果key存在则不成功 setnx hello 333
加过期时间 单独expire加过期 set key value [expiration Ex seconds|PX milliseconds][NX|XX]
使用参数的方式 set k1 v1 EX 10 NX
整数值递增值不存在会得到1 incr hello incrby hello 100
整数值递减 decr hello decr hello 100
浮点数增量 set mf 2.6 / incrbyfloat mf 7.3
存储原理
数据模型HashTable
dictEntry包含key value和下一个指针
Simple Dynamic String简单动态字符串存储
int 存储8个字节长整型
embstr代表embstr格式的SDS,存储小于44个字节的字符串
raw存储大于44个字节的字符串
原因:C语言没有String类型,只能用char[]实现
embstr分配一次内存空间(为RedisObject和SDS分配空间是连续的),raw需要分配两次内存空间(分别为RedisObject和SDS分配空间)
应用场景
缓存,分布式锁,分布式数据共享,全局ID,计数器,限流
Hash
存储类型
存储多个无序的键值对,只使用一个KEY
操作命令
hset/hmset/hget/hmget/hkeys/hvals/hgetall
hdel/hlen
存储原理
ziplist
hash对象保存的键值对小于512个,所有键值对的健和值的长度小于64byte
否则存储结构转换为hashtable
hashtable
场景
比String存储节省更多key的空间,也更加便于管理
List
存储类型
存储有序的字符串,元素可以重复
操作命令
lpush/rpush/lpop/rpop
lindex/lrange
存储原理
3.2版本之后统一采用quicklist存储,quicklist是数组+链表的格式
Set
存储类型
String类型无序集合
操作命令
sadd/smembers/scard/spop/srem
存储原理
元素是整数类型用intset存储
不是整数类型用hashtable存储
应用场景
抽奖,点赞,打卡,用户关注等
ZSet
存储类型
存储有序集合,每个元素有个score,按从小到大排名
操作命令
zadd/zcard
存储原理
默认使用ziplist存储
skiplist跳表
应用场景
排行榜
Hyperloglog
统计有个集合中不重复的元素个数
Geo
地理位置信息,计算地理位置距离
Streams
5.0版本,用于可持久化的消息队列
原理
发布订阅模式
channel
支持?和*占位符
redis事务
特性
redis操作时原子性的
按照进入队列的顺序执行
不会收到其它客户端请求影响
事务不能嵌套,多个multi命令效果一样
用法
muti开启事务
exec执行事务
discard取消事务
watch监视
lua脚本
eval执行lua脚本
redis快速的原因
纯内存结构
请求处理单线程
多路复用机制
内存回收
过期策略
立即过期(主动淘汰)
惰性过期(被动淘汰)
定期过期
淘汰策略
最大内存设置
LRU最近最少使用
LFU最不常用
random随机
持久化机制
RDB默认(如果开启了AOF,优先使用AOF)
自动触发
shutdown
flushall
手动触发
save
bigsave
AOF
采用日志的形式来记录写操作
分布式
redis主从复制
全量复制,增量复制
哨兵机制
raft算法
客户端sharding
一致性HASH
代理Proxy
Redis Cluster
redis常用客户端
jedis redisson luttuce
高并发
缓存雪崩
大量热点数据同时过期失效,请求落到数据库中
加互斥锁或者使用队列,只允许一个线程去查询数据库
缓存定时预先更新,避免同时失效
加随机值,使key在不同时间失效
缓存永不过期
缓存穿透
Hash碰撞
布隆过滤器
判断不存在则一定不存在,判断存在不一定存在
Guava BF实现
缓存击穿
0 条评论
下一页