Redis知识点总结

1.Redis的五种基本数据类型

String,Hash,list,set,zset,对应的基本操作

2.缓存穿透

完全不存在的一个数据,在缓存中查询不到,就去数据库中去查,查找不到,无法再缓存中存。

解决方法:1)布隆过滤器

算法:
1. 首先需要k个hash函数,每个函数可以把key散列成为1个整数
2. 初始化时,需要一个长度为n比特的数组,每个比特位初始化为0
3. 某个key加入集合时,用k个hash函数计算出k个散列值,并把数组中对应的比特位置为1
4. 判断某个key是否在集合时,用k个hash函数计算出k个散列值,并查询数组中对应的比特位,如果所有的比特位都是1,认为在集合中。

2)把空值也传入Redis中,设置一个过期时间,一般不超过5分钟

3.缓存雪崩

如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,造成了缓存雪崩。

解决方法:1)不同的key设置不同的实效时间,让缓存失效时间点均匀分布

2)做双份缓存,比如:a缓存设置失效时间短,b缓存是a缓存备份,b缓存是长期缓存,a缓存失效后,访问b缓存

3)加锁和队列,对一个key,只允许一个线程,查数据库和写缓存

4.Redis哨兵机制

首先要了解Redis的主从复制,主节点挂掉,从节点顶替,哨兵机制就是让这个过程完全自动化,保证Redis的高可用行,一个哨兵认为主节点挂掉是主观下线,超过半数的哨兵认为下线,才是客观下线。

5.Redis的排序算法

底层用了快速排序算法,详情看https://segmentfault.com/a/1190000002806846

6.Redis的过期策略

设置过期时间expire key time(秒),让时间失效  persist key,返回key的剩余时间ttl key。

1)定时删除:设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除

2)惰性删除:key过期的时候不删除,每次查数据库的时候,检查是否过期,若过期,则删除,缺点,若一个key值过期,又长期没有从数据库查询,则造成内存泄漏

3)每隔一段时间,定期对过期的key进行处理

7.Redis如何解决key冲突

源码:Redis一共有16384个槽,对key进行特定的hash计算,得到hash的存储位置,加入两个key计算到了同一个位置,则采用链表的方式,新来的key放在表头

业务:一个Redis节点支持16个数据库,0~15,不同数据之间的key互不影响

8.redis是单线程的么,为什么呢

因为Redis的数据是存储在内存当中的,已经很快了,单线程可以减少线程切换的时间

9.redis和memcache区别

1)Redis支持更多的数据类型,memcahed只支持key-value类型

2)Redis支持主从复制,即master—slave模式

4)Redis支持数据持久化

10.Redis的数据持久化

Redis支持两种形式的数据持久化,RDB快照和AOF日志

1)RDB快照:Redis主从同步用的就是这种方式,Redis内部使用copy on write 机制,fork一个子进程,子进程讲数据生成一个临时的文件,通过原子性命令将临时文件更改成RDB快照,我们可以通过Redis的Save命令来指定几分钟后生成或者多少次操作后生成快照

缺点:假如Redis宕机,上一次生成RDB的到宕机之间的数据会全部丢失

2)AOF 日志:对数据库更改的数据更改的指令将会记录到 AOF日志中,当操作越来越多,AOF文件也越来越大,可以启动AOF 的重写功能,Redisfork一个子进程,把以前的多条命令改成一条命令,此时如果数据再发生变化,所有的命令会记录在内存的缓冲区的临时文件中,也会在老的AOF文件中记录,当子进程重写完成后,缓冲区的内容会合并在新的AOF文件中。新的AOF 的文件将会替代旧的AOF文件

11.Redis的分布式锁

一般来讲,Redis的锁通过setnx实现,key是唯一键,value设置当前的时间+过期时间,其他线程等待,其他线程判断是否过期时间,如果过期,通过getset操作,返回旧值,比较当前时间,得到一个时间戳如果比当前时间小,删除ID,释放锁

12.Redis主从复制

https://www.cnblogs.com/lukexwang/p/4711977.html

slaveof 命令可以指定主从服务器,同步:1.从服务器向主服务器发送sync命令,主服务器生成RDB文件,并从现在开始在缓冲区记录所有写命令 3.主服务器把RDB文件发送给从服务器,从服务器拿到RDB文件同步数据库,4.主服务器把缓存区的命令发送给从服务器,从服务器执行缓存区的所有写命令

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值