string sds(简单动态字符串) sds内部又可以转为int ,embstr(连续,查一次内存),raw(查两次)
效率 防止数据溢出 空间预分配 惰性空间释放
hash ziplist (数据量小) hashtable
list ziplist (连续内存空间,访问效率高) quicklist(更新效率高) 双向循环链表
set intset(都是整型) hashtable
zset 有序的,自动去重的数据类型,底层是由字典dict和跳表skiplist(跳表)实现,数据较少时用ziplist来存储
事务 i/o多路复用 read/write 计算
rdb + aof copy and write
过期删除策略: 惰性过期 定期过期
内存淘汰策略 LRU(最近最少使用) LFU(最近最不经常使用)
redis集群 hash槽 (比一致性hash算法简单) go协议
缓存穿透:原因:大量key同一时间失效 没有值也保存redis 封禁对方ip 对参数进行校验 布隆过滤器
缓存雪崩:原因:短时间内访问大量不存在的key 过期时间随机设置 定时任务重新设置过期时间 永不过期(不推荐)
缓存击穿:原因:热点key突然失效 解决方法:加锁,当第一个请求到达之后加锁(分布式锁或者互锁),其他请求等待几毫秒,当第一个请求拿到数据之后就会把数据放到redis中,其他请求等待以后再请求redis就有数据了
如何解决数据不一致问题:1.加锁 2.先更新数据,在删除缓存,间隔一段时间再删除缓存 (延迟双删)
热key 本地缓存 大key unlink代替del异步线程删除
redis高并发修改值 分布式锁+到达时间顺序 zookeeper(不会,下一步学)
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net