Redis 八股文之特性

Redis 八股文之特性

一,为什么这么快?
  • 基于C 语言编写
  • 重新设计的简单数据结构
  • 基于内存
  • 单线程处理,避免上下文切换。注意6.x 版本后支持多线程,但在执行命令的时候还是单线程,仅是在与客户端建立socket连接和回写数据到socket时多线程,因为Redis的瓶颈不在于CPU,而是在于网络和内存。但内存不够可以通过加内存,数据结构优化和其他优化解决。可网络I/O占大部分的CPU时间,所以客户端socket的读取和回写在6.x版本被设计成多线程
  • 基于I/O多路复用的事件模型
  • 使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求
二,五大基本数据类型?
  • string:字符串
  • hash:哈希
  • set:无序集合
  • zet:有序集合
  • list:列表
三,其他数据结构和功能
  • geohash:地理位置,两经纬度之间的计算
  • heyperLog:基于伯努利试验设计的基数统计算法
  • 计数器
  • bitmap:位图
  • 跳表:类似于jdk中的 ConcurrentHashMap
四,常见的Redis可实现的业务方案?
  • 缓存用户共享信息:token,认证信息,session,页面,热点数据等等
  • 点赞,收藏,关注
  • 基于计数器和数据结构实现 pv,uv,ip,停留页面等指标的统计量系统
  • 基于hash实现短链接转换器
  • 布隆过滤器:可基于谷歌的guava工具包实现大数据量判断是否存在的业务功能
  • 订阅发布功能,可实现轻量级消费队列。何为轻量就是没有异常处理,异常重试等健壮性功能。基于此功能亦可实现,微服务的注册中心。
  • 分布式锁,典型的就是Redisson分布式工具包
  • 多个Redis命令的事务执行
  • Redis实现限流:1,漏桶算法;2,令牌桶算法 ;3,基于list的滑动窗口算法;4,基于时效性的 setnx 实现的限流
五,Redis的键淘汰策略?
  • volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
  • volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰
  • volatile-random:从已设置过期时间的数据集中任意选择数据淘汰
  • volatile-lfu:从已设置过期时间的数据集挑选使用频率最低的数据淘汰
  • allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
  • allkeys-lfu:从数据集中挑选使用频率最低的数据淘汰
  • allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  • no-enviction(驱逐):禁止驱逐数据,这也是默认策略。意思是当内存不足以容纳新入数据时,新写入操作就会报错,请求可以继续进行,线上任务也不能持续进行,采用no-enviction策略可以保证数据不被丢失
六,Redis备份策略?
  • AOF:增量备份,执行一条命令,备份一条命令
  • RDB:全量备份,内存快照,某一时刻的内存快照
七,集群架构模型?
  • 单机模式
  • 集群模式,通过负载均衡均衡的算法,存储在每一个实例上面,每个实例上的数据都是一样的
  • 主从模式,主为写,从为读,主的数据定时备份到从实现数据同步。缺点也明显,主挂了,从会出现脏数据以及系统不能进行写操作
  • 哨兵+ 主从模式 ,哨兵就是为了解决单点故障二设计出的第三方仲裁实例
  • Cluster 集群 根据 分片算法将 数据切分成 多段 存储在 不同实例上
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值