redis数据结构,跳表,缓存雪崩、穿透、击穿、并发,持久化aof、rdb,高可用主备哨兵及分布式,过期策略等

一:跳表

每两个节点抽一个节点做索引,两个索引之间也可以抽一个索引再做索引,递归的抽两个点做索引,类似金字塔形式

跳表插入:

可以选择同时将这个数据插入从第几级索引到最底层节点中,比如随机函数生成了值 K,那我们就将这个结点添加到底层叶子节点到第K层节点的所有节点及索引中,这样可以避免某两个节点或者索引值过多编程了单链表

二;redis的五种数据类型

1、String字符串:字符串类型是 Redis 最基础的数据结构,key value均为字符串。

2、Hash哈希:在Redis中,哈希类型是指value本身又是一个(可以,value)结构。

3、List列表(双向链表):列表(list)类型是用来存储多个有序的字符串(有索引下标)。

4、Set集合:类似list,但是是无序的,可以做集合操作(交集并集)。

5、Sorted Set有序集合(跳表实现):Sorted Set 有个score参数,用做排序。

三:REDIS为什么这么快

扫描二维码关注公众号,回复: 12255666 查看本文章

    1、单线程无需上下午切换

    2、数据保存在内存,所有操作基于内存

    3、非阻塞多路复用

四:redis过期策略

    1、定时器定期扫描所有key是否过期,优点:不会漏掉任何一个key;缺点:耗资源

    2、lazy的删除方法,在使用的是否判断是否过期,优点:节省资源;缺点:长期不用的会会一直存在内存中

    3、折中策略:定时随机扫描部分key

    4、内存不够淘汰策略,最基本的保底策略

五:缓存雪崩,缓存穿透,缓存击穿,缓存并发,缓存预热

    1、缓存雪崩:redis缓存服务异常,可能是大量过期,可能是服务挂掉等各种原因,解决方法

        事前:服务高可用

        事中:有其它缓存

        事后:备份及时恢复

    2、缓存穿透:大量请求不存在的key,视缓存如无物,解决方法:

        超过一定阈值,将该key写入缓存并标记为null

    3、缓存击穿:热点key突然失效瞬间导致大量请求数据库,解决方案;

         失效时间长或者不失效

    4、缓存并发:高并发的client同时set-key,server是单线程的,解决方法:

       队列化阻塞式执行

    5、缓存预热:刚上线的时候没有缓存,如果请求量比较大就会很慢,解决方案:

       推算数据库中可能的热点key或者数据量不大的时候全部缓存进去

六:redis持久化

    持久化就是将数据库落盘保证数据不丢失,redis持久化有两种方式

    1、AOF,默认一秒一次,将所有的修改操作记录到本地,所以一般会很大

    2、RDB,快照模式,fork一个子进程将当前所有key-value都dump出来并替换旧文件

七:redis高可用几种情况

    1、主备模式,会自动同步数据但是故障不会自动切换

    2、哨兵模式,主动同步并自动切换,另起一个哨兵程序进行主备监听和切换

    3、分布式模式,多台分布式,并且每台都有主备,做到高可用易扩展

猜你喜欢

转载自blog.csdn.net/shyrainxy/article/details/110805391