Redis
1: 什么是redis 他的特征是什么
Redis 是 NoSQL 中的一种存储工具,他是一个 key-value 存储系 统
-
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
-
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
-
Redis支持数据的备份,即master-slave模式的数据备份。
2:为什么redis是单线程的 可是效率那么高
数据库的工作模式按存储方式可分为:硬盘数据库和内存数据库。Redis 将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度极快。
Redis采用的是基于内存的采用的是单进程单线程模型的 KV 数据库


3:你们项目中哪些地方用到了redis
计数器、实时排行榜、分布式锁、cms、单点登录(jwt、redis)
4: redis 的5种基本类型是?
1、string(字符串)
2、hash(哈希)
3、list(列表)
4、set(集合)
5、zset (有序集合)
其中,string(字符串)是redis中最基本的数据类型,一个key对应一个value,string 可以包含任何数据。
5: spring data redis 的常见序列化方案 和 默认的序列化方案是
JDK(默认)、JSON、String
6:怎样保证缓存和 数据库中的数据一致【 怎样保证 缓存和数据库的双写一致】
延时双删

7:redis 的持久化策略有哪些 项目中怎样选择
redis的数据从内存保存到硬盘中的过程叫做数据持久化
AOF持久化(文本数据):Redis默认情况是不开启AOF的
RDB持久化(二进制数据):存储的频率没有AOF那么频繁

8: redis 的过期key 删除策略是什么
主动删除
惰性删除(使用key之前先看这个key是否过期,过期了就删除)
及时删除(每隔一段时间,线程会去扫描key是否过时,过时就删除)
9: 为什么明明所有的key 已经过期,但是还占着内存

删除策略的不同
10: redis的内存淘汰策略是什么,有哪些常见的淘汰策略
1.noeviction(默认策略): 不会删除任何数据,拒绝所有写入操作并返回客户端错误消息(error)OOM command not allowed when used memory,此时 Redis 只响应删和读操作;
2.allkeys-lru: 从所有 key 中使用 LRU 算法进行淘汰(LRU 算法:最近最少使用算法);
3.allkeys-lfu: 从所有 key 中使用 LFU 算法进行淘汰(LFU 算法:最不常用算法,根据使用频率计算,4.0 版本新增);
4.volatile-lru: 从设置了过期时间的 key 中使用 LRU 算法进行淘汰;
5.volatile-lfu: 从设置了过期时间的 key 中使用 LFU 算法进行淘汰;
6.allkeys-random: 从所有 key 中随机淘汰数据;
7.volatile-random: 从设置了过期时间的 key 中随机淘汰数据;
8.volatile-ttl: 在设置了过期时间的key中,淘汰过期时间剩余最短的。
11: lru 和 lfu 指的是什么,描述一下 怎样实现lru 和 lfu 算法
LRU:

LFU:

12:什么是缓存击穿 怎样防止
缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。数据库中有但缓存没有
解决方案:缓存击穿的话,设置热点数据永远不过期。或者加上互斥锁就能搞定了。缓存预热。
13: 什么是缓存穿透怎么防止
数据库中没有数据,缓存中也没数据

最常见的则是采用
14:什么是缓存雪崩 怎样防止
雪崩其实也可以做到提前预防,那就是用到过期时间的key,时间全部错开,此外,有些数据可以做永久保存的话那就直接保存好了,这样就不会造成大面积的key失效了。
方案一:
大多数系统设计者考虑:用加锁或者队列的方式,来保证同一时间内不会有大量的线程,同时对数据库进行读写,从而避免 数据库崩溃掉。
方案二:
还有一个简单方案就是:将缓存的失效时间分散开,这样每一个缓存的过期时间的重复率就会降低,就很难引发大量的缓存集体性失效的事件。
15:什么是缓存倾斜
缓存中存在这个key,但是由于这个key突然成为高热点key,(比如明星出轨),这样导致大量的用户突然高并发的访问这个高热点key所在的那台缓存服务器,最终导致那台缓存服务器崩掉,继而请求又到达下一个缓存服务器,下一个缓存服务器又承受不住而崩掉,最终导致整个缓存模块崩掉。
解决办法:
方案一: 在 Redis 集群的基础之上,扩展主从结构(读写分离),增加从节点数量–读操作,缓解redis的压力。
方案二: 我们可以将这个热点key复制出多个子key,每个子key的value值一样,查询的时候使用hash取模算法,将压力分摊到不同的服务端节点。
16: redis 的部署架构有哪些 方便用在什么样的好处
单机:开发使用
主从:高并发 读写分离
哨兵:高可用
集群:海量数据
17: 为什么redis的集群架构中 主节点的数量要是单数
不管是3个节点还是4个节点,都只能允许一个节点宕机。所以在实际使用过程中出于成本的考虑,一般会建议奇数个节点。
18:简单说一下redis-cluster里面选举投票机制
redis cluster集群是一个由多个主从节点集群组成的分布式服务集群,它具有复制、高可用和分片特性。cluster集群不需要

19: redis的哨兵机制指的是什么 起了什么作用
监控节点的健康状态、通知、故障迁移
20:说一下 redis 主从复制的过程

21: redis 怎样实现原子操作

浙公网安备 33010602011771号