redis
1.什么是redis,有什么优缺点?
redis是单线程的基于内存存储的非关系型数据库,他是支持高并发的分布式缓存
优点1.读取速度快,2.支持丰富的数据类型3支持事物,4丰富的功能主从复制、集群、数据持久化等功能。
缺点数据库容量有限 受到物理内存的限制,不能用作海量数据的读写。
2.分布式锁 为什么要有分布式锁?
保证一个方法在高并发情况下的同一时间只能被同一个线程执行。
3.分布式事务
单独的隔离操作
事物是一个原子操作
4.过期删除策略
定期,随机,惰性。
redis采用定期删除+惰性删除策略。
淘汰策略或机制
volatile-lru从已设置过期时期间的数据集中挑选最近最少使用的数据淘汰。
volatile-ttl挑选将要过期的数据淘汰
volatile-random任意选择数据淘汰
allkeys-lru从数据集挑选 最常用的 移出最近最少使用的key
allkeys-random任意选择数据淘汰
no-enviction禁止驱逐数据
5.缓存血崩 穿透,击穿及解决
1.缓存失效,在同一段时间缓存过期,数据库宕机,造成系统崩溃。加锁或队列的方式保证。我们可以将缓存的数据设置不同的失效时间,这样就可以避免缓存数据在某个时间段集中失效。例如对于热门的数据(访问频率高的数据)可以缓存的时间长一些,对于冷门的数据可以缓存的时间短一些。
2.用户查询数据,在数据库中没有,在缓存中找不到造成。
布隆过滤器、设置较短的缓存过期时间比如60秒。value为null查的值为null
大并发集中对这一个点进行访问,当这个key在失效的瞬间
3.击穿,将这些热点数据设置永不过期
6.为什么是单线程的
为什么设计成单线程的?
避免了不必要的上下文切换和竞争条件。
单线程为什么这么快
1.纯内存操作,2.单线程操作,避免了频繁的上下文切换3.采用了非阻塞IO多路复用机制。
7.持久化
1.Redis的持久化机制?
Redis 提供两种持久化机制 RDB 和 AOF 机制
用数据集快照的方式记录 redis 数据库的所有键值对,在某个时间点将数据写入一个临时文件,持久化结束 后, 用这个临时文件替换上次持久化的文件, 达到数据恢复
各自的优缺点?
优,方便持久化,启动效率高。缺点: 1、数据安全性低。
优,数据安全,缺:AOF 文件比 RDB 文件大, 且恢复速度慢。
rdb数据快照.aof追加文件
区别
aof文件比rdb大,持久化效率比rdb慢
8.数据类型及应用
string.hash.list.set.zset
验证码,缓存或购物车,点赞或消息队列,抽奖或共同好友,排行榜。
9.哈希槽
redis集群有16384个哈希槽,每个key通过crc16算法得到hash值,然后对16384取模来决定放置哪个槽。
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,
这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。
10.redis为什么需要把所有数据放到内存中
实现最快的对数据读取。存储在硬盘会影响redis性能。
11.缓存雪崩和缓存穿透,击穿
1.缓存雪崩缓存失效,在同一段时间缓存过期,数据库宕机,造成系统崩溃。加锁或队列的方式保证。我们可以将缓存的数据设置不同的失效时间,这样就可以避免缓存数据在某个时间段集中失效。例如对于热门的数据(访问频率高的数据)可以缓存的时间长一些,对于冷门的数据可以缓存的时间短一些。
2.用户查询数据,在数据库中没有,在缓存中找不到造成穿透。
设置较短的缓存过期时间比如60秒。value为null查的值为null
3.大并发集中对这一个点进行访问,当这个key在失效的瞬间击穿,某一时间大量请求并发访问某一个key,而正好这个key并没有在缓存中,从而跑到数据库查询,导致数据库压力过大甚至崩溃的情况。引起的原因一般是热点key过期导致的。
将这些热点数据设置永不过期。
击穿和雪崩的区别
击穿对于特定的热点数据来说,而雪崩是全部数据.
12.Redis的同步机制
第一次同步时,主节点做一次 bgsave, 并同时将后续修改操作记录到内存 buffer, 待完成后将 rdb 文件全量同步到复制 节 点, 复制节点接受完成后将 rdb 镜像加载到内存。加载完成后, 再通知主节点将期 间修改的操作记录同步到复制节点进行重放就完成了同步过程。
希望对大家有帮助,有用的大家可以关注点个赞~~~