当前位置: 首页 > article >正文

Redis面试常见问题

Redis中的Lua脚本到底能不能保证原子性?

Redis中Lua脚本的执行,可以保证并发编程中不可再拆分的这个原子性,但是没有保证数据库ACID中要么都执行要么都回滚的这个原子性。Lua脚本执行过程中命令产生错误,是不会回滚的,后续命令不会执行。

在数据库中的原子性,确实是一个不可拆分的工作单元,要么都执行,要么都不执行。因为事务可以Commit、也可以Rollback。

在并发编程中,我们把一个或者多个操作在 CPU 执行的过程中不被中断的特性称为原子性。

redis为什么快?

  1. 操作基于内存

  2. IO多路复用

  3. 单线程操作:省去多线程时CPU上下文会切换的时间

    Redis 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块该使用多线程,仍会使用了多个线程。

  4. 数据结构。

redis为什么设计16384槽

Normal heartbeat packets carry the full configuration of a node, that can be replaced in an idempotent way with the old in order to update an old config. This means they contain the slots configuration for a node, in raw form, that uses 2k of space with16k slots, but would use a prohibitive 8k of space using 65k slots.At the same time it is unlikely that Redis Cluster would scale to more than 1000 mater nodes because of other design tradeoffs.

So 16k was in the right range to ensure enough slots per master with a max of 1000 maters, but a small enough number to propagate the slot configuration as a raw bitmap easily. Note that in small clusters the bitmap would be hard to compress because when N is small the bitmap would have slots/N bits set that is a large percentage of bits set.
  1. 如果槽位为65536,发送心跳信息的消息头达8k(65536÷8÷1024=8kb),发送的心跳包过于庞大。所以槽位(16394÷8÷1024=2kb)比较合适。
  2. redis的集群主节点数量基本不可能超过1000个。
  3. 槽位越小,节点少的情况下,压缩率高

热key问题

概念:在Redis中,热key问题指的是某个key被频繁访问,导致该key所在的数据结构增长过大,进而导致Redis性能下降甚至宕机。

对于热key的处理,主要在于事前预测和事中解决。

在事中解决方面,主要可以考虑,热点key拆分、多级缓存、热key备份、限流等方案来解决。

LRU、LFU

LRU指的是最近最少使用(Least Recently Used),是一种缓存淘汰策略。在实现缓存时,为了让缓存的命中率更高,我们需要选择合适的缓存淘汰策略。LRU的具体做法是将最近最少使用的缓存块置换出去,即将最久未被访问的缓存块淘汰掉。

LFU是Least Frequently Used的缩写,意为最不经常使用。LFU算法是一种用于缓存管理的算法,它根据数据项在最近一段时间内被访问的频率来确定哪些数据应该从缓存中删除以腾出空间。当缓存达到容量限制时,LFU算法会优先删除被访问次数最少的数据项。与其他缓存替换算法相比,LFU算法可以更加高效地利用缓存空间。

Redis怎么保证数据不丢失

  1. 持久化:redis支持AOF和RDB、混合的持久化方式,可以保证数据不丢失。
  2. 集群:有主从模式,哨兵模式和cluster集群模式集群来保证应用的可靠性,保证数据不丢失。

http://www.kler.cn/a/154443.html

相关文章:

  • 基础IO2
  • HMI FUXA测试
  • 单元测试、集成测试、系统测试、验收测试、压力测试、性能测试、安全性测试、兼容性测试、回归测试(超详细的分类介绍及教学)
  • 大学语文教材电子版(第十一版)教学用书PDF及课件
  • JavaSE常用API-日期(计算两个日期时间差-高考倒计时)
  • 我的第一个PyQt5程序
  • Python基础学习快速入门
  • ESP32-Web-Server 实战编程-通过网页控制设备多个 GPIO
  • SpringBoot拦截器、过滤器、自定义注解、监听器、全局异常-使用详解
  • Vue3中定义变量是选择ref还是reactive?
  • 使用KubeSphere练习故障注入
  • SELinux refpolicy详解(4)
  • Layer Normalization是什么
  • Oauth2.0 学习
  • 180天Java从小白到就业-Day03-03Java位运算符、赋值运算符、数据交换的三种方式
  • P1 什么是链表 C语言简单易懂
  • Sql Server数据库跨机器完整恢复(源文件恢复)
  • QPrinter 是 Qt 框架中的一个类,用于与打印机进行交互,并提供打印功能
  • Linux 进程(三)
  • 每日一练:冒泡排序
  • 7、Jenkins+Nexus3+Docker+K8s实现CICD
  • 最小生成树算法
  • C++的一些基础
  • 光伏测算工具能测量哪些数据?
  • 自己开发组件更新到npm网站上 通过npm install 安装 保姆级别教程
  • Swin Transformer实战图像分类(Windows下,无需用到Conda,亲测有效)