热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Redis面试相关题目

1、redis支持哪些数据类型呢?redis支持string、list、hash、set、zset(有序)2、什么是redis持久化&

1、redis支持哪些数据类型呢?

redis支持string、list、hash、set、zset(有序)


2、什么是redis持久化?持久化有哪几种方式?优缺点是哪些?

持久化:定时将redis内存中数据,储存到磁盘中,从而做热备。

方式:rdb、aof。
rdb:利用fork进程,便利整个hashTable,利用 cope and wirte,将这个db dump保存下来。
aof:将redis写操作指令,写到一个类似日志的文件中。

优缺点:rdb方式持久化数据秘籍,容易备份,容易容灾恢复,但是备份力度大,crash的时候回丢失save几分钟之前的数据。aof持久化力度小,crash丢失数据少,但是这种持久化比rdb占用更大的空间。


3、redis有哪些架构模式,都有什么特点?

架构模式:单机模式、主从复制模式、哨兵模式、集群模式(proxy)、集群直连模式

单机模式:搭建简单;但是容量有限、处理能力有限、不可高可用
主从复制模式:master/slave角色,数据一致,降低slave读压力;但是不能降低master的写压力,不可高可用
哨兵模式:高可用、监控各个节点、故障自动转移;但是主从切换花时间丢数据,没有降低master写压力
集群模式(proxy):支持多种hsah算法(MD5,CRC16,CRD32等等)、支持失败节点自动删除、后端数据分片对用户透明,业务处理只需按单个redis处理;但是增加新的proxy需要维护高可用、不支持故障自动转移
集群直连模式:无中心化、高可用、支持故障自动转移、数据按solt模式分布、可拓展性强;但是数据异步复制,存在数据不一致、数据隔离性差


4、使用过redis分布锁吗?它是怎么实现的?

说到分布锁首先要注意这几个点:
互斥性。在任意时刻,只有一个客户端能持有锁。
不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。
具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。
解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。

一般使用redis的SETNX做分布式锁,使用资源id作为key,value中存放requestId和和失效时间。为什么值中要放requestId和失效时间呢。因为我们加的锁要保证同一个请求加的锁,同一一个请求可以解锁。

大致流程是:一个请求对某个资源加了锁,只能这个资源获得这个锁,独占这个资源,并使用该资源;其他请求都不能获取到这个分布式锁的钥匙。获得分布式锁钥匙的请求,处理完资源后需要释放锁。


5、使用过Redis做异步队列么,你是怎么用的?有什么缺点?

1、使用list结构作为消息队列,rpush生产消息,lpop消费消息(或者blpop brpop)。当lpop没有数据的时候,需要适当的处理程序中取lpop操作,例如适当sleep。
2、使用redis的发布/订阅模式,可以实现1:N的消息消费。
缺点:在消费者下线的时候,队列消息会丢失
百度了下这个更加全:http://www.bubuko.com/infodetail-3531961.html


6、什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?

缓存穿透: 一般的缓存系统都是通过key、value去查询缓存,如果不存在对应的value时候,就去数据库中查询。一些恶意的请求会故意大量去查询不存在的key,从而对后端造成极大的压力。这个就是缓存穿透。
缓存穿透的避免:
1、对查询结果为空的数据也进行缓存,并设置很短的失效时间;或者再insert数据后 清除缓存。
2、对不存在key进行过滤,比如将所用存在的key放在bigmap中,查询时通过bigmap过滤。布隆过滤
缓存雪崩: 在一段时间内,发生大量的缓存穿透,所有查询都落在数据库上,而造成缓存雪崩。
如何避免:
1、在缓存失效后,通过锁或者队列控制读数据库写缓存,比如某个key只允许一个线程对读数据库写缓存,其他请求等待。
2、使用双缓存,A1缓存为原始缓存,A2为永久缓存,并且A1缓存设置短失效时间,A1失效后可以范文A2
3、针对不同的key设置不同的失效时间,使缓存失效尽量均匀些。


推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 如何搭建服务器环境php(2023年最新解答)
    导读:本篇文章编程笔记来给大家介绍有关如何搭建服务器环境php的相关内容,希望对大家有所帮助,一起来看看吧。本文目录一览:1、怎么搭建p ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
author-avatar
记者刘方斌_304
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有