【每日面试题】精选java面试题之redis
- Redis是什么?为什么要使用Redis?
Redis是一个开源的高性能键值对存储数据库。它提供了多种数据结构,包括字符串、列表、集合、有序集合、哈希表等。Redis具有快速、可扩展、持久化、支持多种数据结构等特点,适用于缓存、消息队列、排行榜等场景。
- Redis的常见数据结构有哪些?
Redis的常见数据结构包括字符串、列表、集合、有序集合和哈希表。
- Redis的持久化方式有哪些?
Redis提供了两种持久化方式:RDB和AOF。
- RDB是将Redis在某个时间点的数据保存到硬盘上,以文件的形式存储。通过恢复这个文件,可以还原Redis的数据。适合备份、全量恢复等场景。
- AOF(Append Only File)是将Redis的操作日志以追加的方式保存到硬盘上,以文本的形式存储。通过重新执行这些操作,可以还原Redis的数据。适合灾难恢复、增量恢复等场景。
- Redis的数据淘汰策略有哪些?
Redis的数据淘汰策略包括:
- volatile-lru:从已设置过期时间的数据集中删除最近最少使用的数据;
- volatile-ttl:从已设置过期时间的数据集中删除即将过期的数据;
- volatile-random:从已设置过期时间的数据集中随机删除数据;
- allkeys-lru:从所有数据集中删除最近最少使用的数据;
- allkeys-random:从所有数据集中随机删除数据;
- no-eviction:禁止删除数据,即空间不足时不做任何淘汰操作。
- Redis的主从复制是什么?有什么用?
Redis的主从复制是指将一个Redis实例(主节点)的数据复制到其他Redis实例(从节点)上。主节点将写操作(包括数据修改、删除等)广播给所有从节点,从节点将操作应用到自己的数据集上。
主从复制有以下用途:
- 实现数据的备份与恢复:主节点故障时,可以通过从节点恢复数据;
- 实现读写分离:主节点负责写操作,从节点负责读操作,提高系统的并发能力;
- 实现高可用性:主节点故障时,从节点可以接替主节点继续提供服务。
- Redis的发布订阅功能是什么?
Redis的发布订阅功能是指可以将消息发送给多个客户端,这些客户端可以订阅与之相关联的频道,并在有消息发布到该频道时收到通知。该功能可以用于实现实时消息推送、事件通知等场景。
- Redis的事务是怎样实现的?
Redis的事务使用MULTI、EXEC、WATCH和DISCARD等命令实现。MULTI命令表示开启一个事务,EXEC命令表示执行事务中的命令,WATCH命令用于在执行事务前监视一个或多个键,如果这些键在执行期间被修改,则事务会被放弃;DISCARD命令用于放弃一个事务。
- Redis的线程模型是什么?
Redis使用单线程模型,采用多路复用机制来处理客户端的连接请求。它通过一个事件循环(Event Loop)来接收客户端的请求,并使用非阻塞IO来处理请求。这种线程模型能够高效地处理大量的并发请求。
- Redis的缓存穿透和缓存击穿是什么?如何解决?
- 缓存穿透是指查询一个不存在的数据,导致每次查询都会去数据库查询,而不会命中缓存。可以通过为不存在的数据设置一个特殊的值,比如null或-1,来缓存起来,避免频繁查询数据库。
- 缓存击穿是指一个热点数据过期或失效,导致大量的请求直接穿透缓存,直接查询数据库。可以通过给热点数据设置较长的过期时间,或使用互斥锁来避免缓存击穿。
- Redis的pipeline有什么作用?
Redis的pipeline可以将多个命令一次性发送给服务器执行,减少网络通信的开销。可以将多个读操作或写操作合并在一起执行,提高系统的性能。但要注意,pipeline并不能减少服务器端的计算和IO开销。
- Redis的分布式锁是怎样实现的?
Redis的分布式锁可以使用SETNX命令结合超时设置来实现。使用SETNX命令尝试获取锁,如果返回1表示获取锁成功,可以执行业务逻辑;如果返回0表示获取锁失败,需要等待一段时间后再次尝试。为了避免死锁,可以为锁设置一个超时时间,当锁超时后自动释放。
- Redis的哨兵模式是什么?有什么作用?
Redis的哨兵模式是一种主从复制的高可用性解决方案,通过监控主节点和从节点的状态来实现故障转移。哨兵节点会定期检测主节点和从节点的状态,当主节点故障时,会选择一个从节点升级为主节点,然后通知其他从节点更新配置。
哨兵模式的作用是:
- 实现高可用性:主节点故障时,可以自动切换到从节点继续提供服务;
- 自动故障恢复:当主节点恢复后,可以自动将其设置为从节点,保证数据的一致性;
- 配置更新通知:当主节点切换或恢复时,可以通知其他从节点更新配置。
- Redis的集群模式是什么?有什么特点?
Redis的集群模式是一种分布式的高可用性解决方案,通过将数据分片存储在不同的节点上来实现数据的扩展。集群模式中的每个节点都可以同时提供读和写操作,节点之间通过内部总线进行通信。
集群模式的特点包括:
- 数据分片:将数据分散存储在不同的节点上,提高数据的存储能力;
- 自动故障转移:当节点故障时,会自动将故障节点的数据迁移到其他节点上;
- 水平扩展:可以通过增加节点的数量来扩展集群的容量。
- Redis如何保证数据的一致性?
Redis通过主从复制、哨兵模式和集群模式来保证数据的一致性。主从复制和哨兵模式可以实现主节点的故障转移和自动恢复,保证数据的可用性;集群模式通过将数据分片存储在多个节点上来提高数据的存储能力,并通过分片槽迁移来保证数据的一致性。
- Redis如何解决缓存击穿问题?
Redis可以通过给热点数据设置较长的过期时间来避免缓存击穿。当一个热点数据即将过期时,使用一个后台线程更新该数据的缓存。这样,即使在缓存过期期间有大量的请求访问该热点数据,也能够命中缓存。
相关文章:
【每日面试题】精选java面试题之redis
Redis是什么?为什么要使用Redis? Redis是一个开源的高性能键值对存储数据库。它提供了多种数据结构,包括字符串、列表、集合、有序集合、哈希表等。Redis具有快速、可扩展、持久化、支持多种数据结构等特点,适用于缓存、消息队列…...
OSCP 靶场 - Vault
端口扫描 nmap nmap -O 192.168.162.172 smb枚举 smbmap(kali自带) //枚举GUEST用户可以使用的目录 smbmap -u GUEST -H 192.168.162.172 NTLMrelay—smbrelay 1.制作钓鱼文件 使用GitHub - xct/hashgrab: generate payloads that force authentication against an attacker…...
uniapp子组件向父组件传值
目录 子组件向父组件传值子组件1子组件2 父组件最后 子组件向父组件传值 子组件1 <template><view class"content"><view v-for"(item,index) in list" :key"index">{{item}}</view></view> </template>&…...
过滤特殊 微信昵称
$nickName preg_replace(/[\xf0-\xf7].{3}/, , $userData[nickName]);...
LLM、AGI、多模态AI 篇一:开源大语言模型简记
文章目录 系列开源大模型LlamaChinese-LLaMA-AlpacaLlama2-ChineseLinlyYaYiChatGLMtransformersGPT-3(未完全开源)BERTT5QwenBELLEMossBaichuan...
微信小程序中获取用户当前位置的解决方案
微信小程序中获取用户当前位置的解决方案 1 概述 微信小程序有时需要获取用户当前位置,以便为用户提供基于位置信息的服务(附近美食、出行方案等)。 获取用户当前位置的前提是用户手机需要打开 GPS 定位开关;其次,微…...
Vue3-35-路由-路由守卫的简单认识
什么是路由守卫 路由守卫,就是在 路由跳转 的过程中, 可以进行一些拦截,做一些逻辑判断, 控制该路由是否可以正常跳转的函数。常用的路由守卫有三个 : beforeEach() : 前置守卫,在路由 跳转前 就会被拦截&…...
制药企业符合CSV验证需要注意什么?
在制药行业中,计算机化系统验证(CSV)是确保生产过程的合规性和数据完整性的关键要素。通过CSV验证,制药企业可以保证其计算机化系统的可靠性和合规性,从而确保产品质量和患者安全。然而,符合CSV验证并不是一…...
再谈动态SQL
专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL Mybatis配置入门 Mybatis行为配置之Ⅰ—缓存 Mybatis行为配置…...
【数据结构】树
一.二叉树的基本概念和性质: 1.二叉树的递归定义: 二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成 2.二叉树的特点: (1)每个结点最多只有两棵子树࿰…...
【Midjourney】AI绘画新手教程(一)登录和创建服务器,生成第一幅画作
一、登录Discord 1、访问Discord官网 使用柯學尚网(亲测非必须,可加快响应速度)访问Discord官方网址:https://discord.com 选择“在您的浏览器中打开Discord” 然后,注册帐号、购买套餐等,在此不做缀述。…...
对比 PyTorch 和 TensorFlow:选择适合你的深度学习框架
目录 引言 深度学习在各行业中的应用 PyTorch 和 TensorFlow 简介 PyTorch:简介与设计理念 发展历史和背景 主要特点和设计理念 TensorFlow:简介与设计理念 发展历史和背景 主要特点和设计理念 PyTorch 和 TensorFlow 的重要性 Pytorch对比Te…...
Oracle笔记-查看表已使用空间最大空间
目前以Oracle18c为例,主要是查这个表USER_SEGMENTS。 在 Oracle 18c 数据库中,USER_SEGMENTS 是一个系统表,用于存储当前用户(当前会话)拥有的所有段的信息。段是 Oracle 中分配存储空间的逻辑单位,用于存…...
大数据HCIE成神之路之特征工程——特征选择
特征选择 1.1 特征选择 - Filter方法1.1.1 实验任务1.1.1.1 实验背景1.1.1.2 实验目标1.1.1.3 实验数据解析1.1.1.4 实验思路 1.1.2 实验操作步骤 1.2 特征选择 - Wrapper方法1.2.1 实验任务1.2.1.1 实验背景1.2.1.2 实验目标1.2.1.3 实验数据解析1.2.1.4 实验思路 1.2.2 实验操…...
python 正则-常见题目
1、邮箱 print(re.findall(r[\w-][\w-]\.[\w-], weidianqq.com))2、身份证号 xxxxxx yyyy MM dd 375 0 十八位 print(re.findall(r(?:18|19|(?:[23]\d))\d{2}, 2010)) # 年print(re.findall(r(?:0[1-9])|10|11|12, 11)) # 月print(re.findall(r(?:[0-2][1-9])|10|20|30|3…...
解析:Eureka的工作原理
Eureka是Netflix开源的一个基于REST的的服务发现注册框架,它遵循了REST协议,提供了一套简单的API来完成服务的注册和发现。Eureka能够帮助分布式系统中的服务提供者自动将自身注册到注册中心,同时也能够让服务消费者从注册中心发现服务提供者…...
RecyclerView 与 ListView 区别和使用
前置知识:ListView基本用法与性能提升 RecyclerView 与 ListView 区别 RecyclerView 需要设置布局(LinearLayoutManager、GridLayoutManager、StaggeredGridLayoutManager) recyclerView?.layoutManager LinearLayoutManager(activity) …...
力扣232. 用栈实现队列
题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开…...
这个方法可以让你把图片无损放大
随着数字技术的不断发展,照片无损放大已经成为了摄影领域中的一项重要技术。照片无损放大能够让摄影师在不损失细节和画质的情况下,将照片放大到更大的尺寸,从而让观众能够更加清晰地欣赏到照片中的每一个细节。 今天推荐的这款软件主要是通…...
Springboot整合Elastic-job
一 概述 Elastic-Job 最开始只有一个 elastic-job-core 的项目,定位轻量级、无中心化,最核心的服务就是支持弹性扩容和数据分片!从 2.X 版本以后,主要分为 Elastic-Job-Lite 和 Elastic-Job-Cloud 两个子项目。esjbo官网地址 Ela…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
