Java缓存面试题——Redis应用

在这里插入图片描述

1、为什么要使用Redis做缓存?

缓存的好处

使用缓存的目的就是提升读写性能。而实际业务场景下,更多的是为了提升读性能,带来更高的并发量。

Redis的好处

  1. 读取速度快,单机轻松10W+并发。
  2. 支持多种数据结构,包括字符串、列表、集合、有序集合、哈希等
  3. 拥有其他丰富的功能,主从复制、集群、数据持久化等
  4. 可以实现其他功能,消息队列、分布式锁等

2、为什么Redis单线程模型效率也能那么高?

  1. C语言实现,效率高:C语言程序运行时要比其他语言编写的程序快得多,因为它“离底层机器很近”
  2. 单线程的优势:使用了单线程后可以省去多线程的CPU上下文会切换的时间,也不用去考虑锁导致的性能消耗等问题,可维护性高
  3. Pipeline:Redis主要受限于内存和网络,几乎不会占用太多CPU。利用pipeline操作,减少命令在网络上的传输时间,将多次网络IO缩减为一次网络IO
  4. 存储实现优化:Redis的基础数据结构每一种至少有2种及2种以上的实现,在不同的大小或长度下选用适合的数据类型,达到极致的存储效率,从而提高写入和读取速度

3、Redis6.0为什么要引入多线程呢?

多线程只是针对IO线程,执行命令还是单线程。

Redis服务器可以处理80,000到100,000QPS,对于80%的公司来说,单线程的Redis已经足够使用了。但随着越来越复杂的业务场景,有些公司动不动就上亿的交易量,因此需要更大的QPS。所以Redis作者在6.0引入了多线程,性能提升至少一倍以上。当然集群方案也可以解决更大QPS的问题,但是集群方案还是有一些问题的:

  • 常见集群方案是对数据进行分区并采用多个服务器,但该方案有非常大的缺点,例如要管理的Redis服务器太多,维护代价大
  • 某些适用于单个Redis服务器的命令不适用于数据分区
  • 数据分区无法解决热点读/写问题;数据倾斜、重新分配变得更加复杂等等

4、Redis常见数据结构以及使用场景

字符串(String)

使用场景

  1. 计数:使用Redis 作为计数的基础工具,它可以实现快速计数、查询缓存的功能,同时数据可以异步落地到其他数据源
  2. 共享Session:使用Redis将用户的Session进行集中管理,避免在访问分布式服务时Session不存在导致重新登录
  3. 限速:短信接口不被频繁访问,例如一分钟不能超过5次

哈希(Hash)

Java里提供了HashMap,Redis中也有类似的数据结构,就是哈希类型。但是要注意,哈希类型中的映射关系叫作field-value,注意这里的value是指field对应的值,不是键对应的值。

使用场景

哈希类型比较适宜存放对象类型的数据,我们可以比较下,如果数据库中表记录user为:

id name age
1 test1 18
2 test2 20

使用String类型

set user
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王二蛋!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值