【Java面试八股文宝典之Redis篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day14

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Java面试八股文宝典之Redis篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day14

 

大家好,我是陶然同学,软件工程大三即将实习。认识我的朋友们知道,我是科班出身,学的还行,但是对面试掌握不够,所以我将用这100多天更新Java面试题🙃🙃。

  不敢苟同,相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题的形式,带你过一遍热门面试题及恰如其分的解答。当然,我不会太深入,因为我怕记不住!!

  因此,不足的地方希望各位在评论区补充疑惑、见解以及面试中遇到的奇葩问法,希望这100天能够让我们有质的飞越,一起冲进大厂!!,让我们一起学(juan)起来!!!

Redis删除策略

redis有三种删除策略,分别是(1)定时删除;(2)惰性删除;(3)定期删除

(1)定时删除:在设置某个key 的过期时间同时,为每个设置过期时间的key都创造一个定时器;当

key过期时间到达时,由定时器任务立即执行对键的删除操作;

(2)惰性删除:数据到达过期时间,不做处理,只有访问这个键时才会检查它是否过期,如果过期

则清除,返回不存在;如果未过期,返回数据;      

(3)定期删除:每隔一段时间就对一些键进行检查,删除其中过期的键(周期性轮询redis库中的时效

性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度)。该策略是惰性删除和定

时删除的一个折中,既避免了占用大量CPU资源又避免了出现大量过期键不被清除占用内存的情

况。

Redis内存淘汰机制

背景:

Redis 是个基于内存的缓存数据库,既然是基于内存的,那肯定就会有存满的时候,再有新的数据

就存不进去了。

此时 Redis 会执行已经定义好的一些淘汰策略,本文大概讲一下 Redis 的 8 种数据淘汰策略。

8种内存淘汰策略:

当 Redis 达到最大内存限制时,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中,淘汰过期时间剩余最短的。

注意: 当使用 volatile-lru、volatile-lfu、volatile-random、volatile-ttl 这四种淘汰策略时,如果没有

key 可以淘汰,则和 neoviction 一样返回错误。

Redis6.0之前为什么一直不使用多线程

首先要明白,上边的种种分析,都是为了营造一个Redis很快的氛围。官方FAQ表示,因为Redis是

基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带

宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。

这里我们一直在强调的单线程,只是在处理我们的网络请求的时候只有一个线程来处理,一个正式

的Redis Server运行的时候肯定是不止一个线程的,这里需要大家明确的注意一下。例如Redis进行持久化的时候会以子进程或者子线程的方式执行。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3天前
|
Java 数据库连接 数据库
spring--为web(1),富士康java面试题整理
spring--为web(1),富士康java面试题整理
|
3天前
|
移动开发 前端开发 JavaScript
Java和web前端,IT新人该如何选择?,2024年最新Web前端内存优化面试
Java和web前端,IT新人该如何选择?,2024年最新Web前端内存优化面试
|
3天前
|
安全 Java 数据库
Spring boot 入门教程-Oauth2,java面试基础题核心
Spring boot 入门教程-Oauth2,java面试基础题核心
|
3天前
|
Java
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
|
4天前
|
算法 Java C++
刷题两个月,从入门到字节跳动offer丨GitHub标星16k+,美团Java面试题
刷题两个月,从入门到字节跳动offer丨GitHub标星16k+,美团Java面试题
|
存储 缓存 移动开发
redis 面试总结
前段时间找工作搜索 golang 面试题时,发现都是比较零散或是基础的题目,覆盖面较小。而自己也在边面试时边总结了一些知识点,为了方便后续回顾,特此整理了一下。
149 0
redis 面试总结
|
存储 NoSQL 数据库
|
存储 NoSQL 数据库
Redis面试总结
什么是redis? Redis 是一个基于内存的高性能key-value数据库。 (有空再补充,有理解错误或不足欢迎指正) Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。
1575 0
|
5天前
|
负载均衡 监控 NoSQL
Redis的几种主要集群方案
【5月更文挑战第15天】Redis集群方案包括主从复制(基础,读写分离,手动故障恢复)、哨兵模式(自动高可用,自动故障转移)和Redis Cluster(官方分布式解决方案,自动分片、容错和扩展)。此外,还有Codis、Redisson和Twemproxy等工具用于代理分片和负载均衡。选择方案需考虑应用场景、数据量和并发需求,权衡可用性、性能和扩展性。
44 2
|
5天前
|
存储 监控 负载均衡
保证Redis的高可用性是一个涉及多个层面的任务,主要包括数据持久化、复制与故障转移、集群化部署等方面
【5月更文挑战第15天】保证Redis高可用性涉及数据持久化、复制与故障转移、集群化及优化策略。RDB和AOF是数据持久化方法,哨兵模式确保故障自动恢复。Redis Cluster实现分布式部署,提高负载均衡和容错性。其他措施包括身份认证、多线程、数据压缩和监控报警,以增强安全性和稳定性。通过综合配置与监控,可确保Redis服务的高效、可靠运行。
27 2