剑指Java面试--Redis

Redis简介

MySQL中的数据都是存储在缓存中的,虽然在数据库中做了对应的缓存,一般针对的是查询的内容,而且粒度比较小,并且当数据库内容不发生变更的时候,缓存才有作用。不能减轻业务系统对数据库的增删改查IO压力。因此缓存数据库应运而生,实现对热点数据的缓存,提高了响应速度,缓解后端数据库的压力。
主流应用架构

  • 穿透:穿透缓存层,访问数据库层
  • 熔断:不管有没有获得数据都返回,在有损的情况下,对外提供服务

缓存中间件

Memcache和Redis的区别

Memcache:代码层次类似Hash

  • 支持简单数据类型
  • 不支持数据持久化存储
  • 不支持主从
  • 不支持分片

Redis

  • 数据类型丰富
  • 支持数据磁盘持久化存储
  • 支持主从
  • 支持分片

为什么Redis能这么快

100000+QPS

  • 完全基于内存,绝大部分的请求是纯粹的内存操作,执行效率高
  • 数据结构简单(键值对),对数据的操作也简单
  • 采用了单线程,单线程也能处理高并发请求,想多核也可以启动多实例
  • 使用多路I/O复用模型,非阻塞IO

I/O多路复用模型

  • FD:文件描述符。一个打开的文件通过唯一的描述符进行应用,该描述符是打开文件的源数据到文件本身的映射。
  • Select系统调用:Selector负责监听这些文件是否可读或者可写
  • Redis采用的I/O多路复用函数:epoll/kqueue/evport/select?
    - 因地制宜:编译平台不同
    - 优先选择时间复杂度为O(1)
    - 以时间复杂度为O(n)的select为保底:扫描全部监听的文件
    - 基于react设计模式监听I/O事件:实现文件事件处理器

Redis简介

供用户使用的数据类型

  • String:最基本的数据类型,可以存储序列化对象,二进制图
  • Hash:String元素组成的字典,适合用于存储对象
  • List:列表,按照String元素插入顺序排列(类似栈)
  • Set:String元素组成的无需集合,通过hash表实现,不允许重复
  • Sorted Set:通过分数来为集合中的成员从小到大排序(增加权重)
  • 用于计数的HyperLogLog,用于支持存储地理位置信息的Geo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值