先上redis面试题:后面讲述答案

* redis和其他缓存技术有什么区别
* redis有哪些数据结构
* 应用场景有哪些
* redis线程是否安全
* redis的单线程为什么特别高
* redis如何存放对象 json , 二进制 怎么选?
* redis中是否有事务机制,事务支持回滚吗(坑 不支持)
* redis是否有发布订阅的模式
* redis和数据库如何保持数据一致性
* redis宕机是否丢失数据
* redis数据持久化机制
* rdb和aof的区别
* 增量同步和全量同步的区别
* redis主从复制发生网络延迟怎么解决
* redis脑裂情况
* redis的哨兵机制 如何实现高可用
* redis集群方案 集群 主从 哨兵
* redis主从同步效率如果慢怎么办
* redis Cluster集群的整个实现原理
* redis缓存穿透 击穿 雪崩 解决方案
* redis如何实现分布式锁
* key的过期时间
* redis内存满了如何解决 数据舍弃机制
* 布隆过滤器 布谷鸟过滤器
redis应用场景
1 秒杀机制 登录token存储 token替换session 因为session不支持集群 短信验证码存储在redis中 减轻数据库访问压力
热点数据放入redis 例如首页 热点key预热 redis计数器 redis是单线程
redis分布式锁 setnx 使用框架
等等
亮点回答 :
redis时间监听 即将失效的监听回调

2 redis线程是否安全
安全!!!!!! redis是单线程
3 为什么单线程效率还高 1基于缓存 2 IO多路复用 3 redis官网不支持Windows系统
4 Windows没有eollp模型的实现
5 事务管理 依靠版本号机制实现 multi 和watch
6 redis事务不支持行锁
7 事务不支持回滚 支持事务取消
8 redis有发布订阅吗
有 但是极少用
9 订单超时三十分钟取消 消息超时回调方法
10 redis与数据库的一直性问题
1 清空redis 重新读取数据库
2 采用增量的binlog日志同步方案 引入消息中间件 订阅数据库的binlog文件,redis

11 redis内存满了怎么处理 数据淘汰策略
(1)volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。
(2)volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰。
(3)volatile-random:从已设置过期时间的数据集中任意选择数据淘汰。
(4)volatile-lfu:从已设置过期时间的数据集挑选使用频率最低的数据淘汰。 (5)allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
(6)allkeys-lfu:从数据集中挑选使用频率最低的数据淘汰。
(7)allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰 (8)
no-enviction(驱逐):禁止驱逐数据,这也是默认策略。意思是当内存不足以容纳新入数据时,
新写入操作就会报错,请求可以继续进行,线上任务也不能持续进行, 采用no-enviction策略可以保证数据不被丢失。
12 redis宕机后数据会不会丢失
不会 持久化策略 aof 或者rdb 最多丢失一秒数据
13 redis 持久化策略
rdb 全量持久化 定时性执行效率高但是有可能丢失数据 效率低 缓冲区
aop 是增量持久化 增量操作 将set操作计入日志操作 最多丢失一秒数据 效率高 但容易丢失数据
14 redis主从复制发生网络延迟怎么解决
一般情况下 redis主从基本都在内网中,所以网络延迟一般较小 当然内网依然存在网络延迟的信息那就只能提升带宽等方式作为解决方案
15 增量同步和全量同步
增量同步是每次修改数据 都会同步新的内容
全量同步是每次都把全部数据同步过来
16 redis主从同步效率慢怎么解决
慢 正常情况 采用多主多从或者树状形式去实现需求
17哨兵模式
当主节点宕机 哨兵选举出一个从节点做主节点 哨兵也要做集群为了投票的权重
但是会产生脑裂的情况需要做一定策略解决 应用了发布订阅原理
优缺点
缺点:哨兵需要多个 主节点只能有一个 数据可能产生冗余
优点:中心性质架构稳定
18分片集群
例如 三个主节点 每个主节点报存的数据不一样 16384卡槽位置均匀分配到三个阶段
redis-cluse即集群 最大优点 快速扩容缩容
19 缓存击穿 穿透雪崩
击穿和穿透不是一个
击穿是有数据 高并发场景下 会出现key的瞬间失效 大量请求就击穿了缓存 直接请求数据库 就想在屏障上凿开了一个洞
穿透是没有数据 查了缓存没有再查数据库 也没有 高频查询会造成数据库压力骤增
雪崩 缓存压力过大的情况下 redis失效然后查询数据库 高频下 数据压力过大

技术
©2019-2020 Toolsou All rights reserved,
13.解决 git 合并冲突Linux页面置换算法的C语言实现LinkedHashMap基本用法&使用实现简单缓存1190 反转每对括号间的子串 leetcode一个猜数字的小游戏,用JavaScript实现 Chrome OS,对程序员和Windows意味着什么?,互联网营销 网站安全有哪些防护措施?Java集合------LinkedHashMap底层原理 全球第一免费开源ERP Odoo Ubuntu最佳开发环境独家首发分享 如何建设数据安全体系?