Redis技术总结

本文详细介绍了Redis的核心技术,包括基本数据结构(String, List, Set, ZSet, Hash)及其底层原理,内存淘汰策略,过期删除策略,持久化方法。还探讨了Redis的高速性能原因,以及缓存问题如穿透、雪崩和击穿的解决方案。此外,文章涵盖了Redis的主从、哨兵和集群模式,分布式锁的实现,以及如何解决Redis和数据库的一致性问题。最后,文章讨论了Redis集群部署的优缺点和选型策略,以及字典扩容机制和缓存模式。" 122261890,8753399,VTK实战:3DArray操作指南,"['3D开发', 'C++编程', '图形学', '软件工程', 'VTK库']
摘要由CSDN通过智能技术生成

1.基本数据结构,底层原理,以及应用

String

底层使用了SDS简单动态字符,string一共三种编码方式,int,embstr,raw

int主要存储long型整数

string有两个数据结构redisObject和SDS

embstr和raw底层sds,主要区别是embstr的redisobject和sds连续存储在一起,而redisobject和sds通过指针相连,不连续。

当int型时,大于19用embstr,大于44用raw

浮点数,字符串默认embstr,大于44用raw

主要用途是存储用户信息,token,分布式锁,计数器等

List

底层使用了压缩链表和双向链表

压缩链表,包括zlbytes总字节数,zltail从首节点到尾节点一共多少字节,zllen节点数量,entries节点,zlend结束符,连续

他是一种紧凑型的数据结构,节省资源

双向链表,无环,包含两部分,一个list,一个listnode数据结构,listnode是双向链表,list通过指针链接到listnode的头尾节点。不连续

当存储每个节点小于64时,或总长度小于128时,用压缩链表

主要用途是消息队列

Set

底层使用了intset和哈希表

inset有三部分,编码,长度,数据,编码有三种,int16,int32,int64,分别是2,4,8字节

哈希表是两层的key -value

当集合中int数组数量大于512,或只要有其他类型都会使用哈希表

主要用途是共同粉丝,共同好友

ZSet

底层使用了压缩链表和跳表

压缩链表,紧凑型数据结构,连续存储

跳表是在链表基础上改进的。比当前节点大,比下一个小,则往下找。

当存储每个节点小于64,总长度小于128,用压缩链表

主要用途排行榜

Hash

底层哈希表或压缩链表

压缩链表,zlbyte总字节数,zltail首尾字节数,偏移量,zllen长度,zlend结束符,entry节点

哈希表,两层key-value

主要用途,存储对象

2.redis内存淘汰策略

一共有六种

淘汰最久未使用的

淘汰最近未使用的

随机淘汰

在过期的键值对中,再加上面三种情况

3.redis过期删除策略

定时删除 - 过期了就删除

定期删除 - 一段时间清理一次

惰性删除 - 过期了先不删除,等下次查询时判断是否过期在删除

4.redis持久化

三种策略

rdb 

快照存储,读取恢复数据快,每次采取覆盖方式写数据。

流程,先去判断父线程有没有子线程,如果没有,调用fork去创建子线程保存数据。bgsave

会丢失一次数据

aof

操作信息,采取追加的方式,数据会越来越多,但实时性强

流程先写入aof buffer,根据刷盘策略刷到磁盘,no 系统策略,everysec每秒,always每次操作

混合持久化

第一次先写rdb,后续追加aof

当达到一定条件时重写rdb

数据恢复先读取rdb,在读取aof

5.redis为什么这么快

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低调$(生活)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值