面经-redis

news/2024/6/18 21:32:02 标签: redis, 数据库, 缓存

在这里插入图片描述

什么是Redis

  • Redis(Remote Dictionary Server)
  • 键只能为字符串,值:字符串、列表、集合、散列表、有序集合。
  • Redis 用来做分布式锁。支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。

Redis为什么这么快

  • 完全基于内存,
  • 数据结构简单
  • 采用单线程

Redis有哪些数据类型

String,List,Set,Zset,Hash
在这里插入图片描述

Redis的应用场景

计数器

可以对 String 进行自增自减运算,从而实现计数器功能
可用于分布式锁限流

缓存

将热点数据放到内存中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率。

会话缓存

可以使用 Redis 来统一存储多台应用服务器的会话信息。当应用服务器不再存储用户的会话信息,也就不再具有状态,一个用户可以请求任意一个应用服务
器,从而更容易实现高可用性以及可伸缩性。

数据类型

string——适合最简单的k-v存储,类似于memcached的存储结构,短信验证码,配置信息等,就用这种类型来存储。
hash——一般key为ID或者唯一标示,value对应的就是详情了。如商品详情,个人信息详情,新闻详情等。
list——因为list是有序的,比较适合存储一些有序且数据相对固定的数据。如省市区表、字典表等。因为list是有序的,适合根据写入的时间来排序,如:最新
的***,消息队列等。
set——可以简单的理解为ID-List的模式,如微博中一个人有哪些好友,set最牛的地方在于,可以对两个set提供交集、并集、差集操作。例如:查找两个人
共同的好友等。
Sorted Set——是set的增强版本,增加了一个score参数,自动会根据score的值进行排序。比较适合类似于top 10等不根据插入的时间来排序的数据。

什么是Redis持久化?

持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

Redis 的持久化机制是什么?各自的优缺点?

RDB(默认) 和 AOF 机制

RDB

RDB:

  • 是Redis DataBase缩写快照,是Redis默认的持久化方式
  • 按照一定的时间将内存的数据以快照的形式保
    存到硬盘中,对应产生的数据文件为dump.rdb。
  • 通过配置文件中的save参数来定义快照的周期。

优点:

1、只有一个文件 dump.rdb,方便持久化。
2、容灾性好,一个文件可以保存到安全的磁盘。
3、性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是IO 最大化。使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了redis 的高性能
4.相对于数据集大时,比 AOF 的启动效率更高。

AOF:持久化

  • Append Only File持久化
  • 每次写命令记录到日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。
  • 当两种方式同时开启时,优先选择AOF恢复。

优点:

  • 数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次 命令操作就记录到 aof 文件中一次

缺点:

  • AOF 文件比 RDB 文件大,且恢复速度慢。

如何选择合适的持久化方式

  • 要数据安全性 选 AOF
  • 其他情况选RDB,RDB方便备份,恢复也快

Redis的过期键的删除策略

  • 定时过期:每个设置过期时间的key都需要创建一个定时器到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资
    去处理过期的数据,
  • 惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。节省CPU资源对内存不友好。占用大量内存。
  • 定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。

(expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key某个键的指针value是该键的过期时间。键空间是指该Redis集群中保存的所有键。)
Redis中同时使用了惰性过期和定期过期两种过期策略。

key的过期时间和永久有效分别怎么设置?

EXPIRE和PERSIST命令。

Redis的内存淘汰策略有哪些

缓存的内存不足时,怎么处理需要新写入且需要申请额外空间的数据。
全局的键空间选择性移除

  • noeviction:新写入操作会报错。
  • allkeys-lru:移除最近最少使用的key。(这个是最常用的)
  • allkeys-random:当随机移除某个key。

设置过期时间的键空间选择性移除

  • volatile-lru:在设置了过期时间的键中,移除最近最少使用的key。
  • volatile-random:在设置了过期时间的键中,随机移除某个key。
  • volatile-ttl:在设置了过期时间的键中,有更早过期时间的key优先移除。

Redis事务的概念

redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。

  • 一次执行完
  • 按照顺序执行
  • 其他命令插不进来

http://www.niftyadmin.cn/n/5331896.html

相关文章

Unreal Engine(UE5)中构建离线地图服务

1. 首先需要用到3个软件,Unreal Engine,gis office 和 bigemap离线服务器 Unreal Engine下载地址:点击前往下载页面 Gis office下载地址:点击前往下载页面 Bigemap离线服务器 下载地址: 点击前往下载页面 Unreal Engine用于数字孪生项目开发&#x…

el-dialog嵌套使用,只显示遮罩层的问题

直接上解决方法 <!-- 错误写法 --><el-dialog><el-dialog></el-dialog></el-dialog><!-- 正确写法 --><el-dialog></el-dialog><el-dialog></el-dialog>我是不建议嵌套使用的&#xff0c;平级也能调用&#xff0c…

TypeError the JSON object must be str, bytes or bytearray, not ‘list‘

在使用python的jason库时&#xff0c;偶然碰到以下问题 TypeError: the JSON object must be str, bytes or bytearray, not ‘list’ 通过如下代码可复现问题 >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> import json >>> ra json.loads(a) Trac…

ArcGIS Pro 如何新建布局

你是否已经习惯了在ArcGIS中数据视图和布局视图之间来回切换&#xff0c;到了ArcGIS Pro中却找不到二者之间切换的按钮&#xff0c;即使新建布局后却发现地图怎么却是一片空白。 这一切的一切都是因为ArcGIS Pro的功能框架完全不同&#xff0c;这里为大家介绍一下在ArcGIS Pro…

取消lodash.throttle中的默认执行完最后一次函数

我的场景: 我有一个列表,我考虑用户连续点击删除的情况&#xff0c;如果用户连续点击&#xff0c;可能会导致数据库中的数据被删除了&#xff0c;但是我还需要刷新数据列表才能反应到页面上&#xff0c;可是这时候用户又点击了同一条数据的删除按钮多次&#xff0c;导致发起了…

开发安全之:Cookie Security: Cookie not Sent Over SSL

Overview 程序创建了 Cookie&#xff0c;但未将 <code>Secure</code> 标记设置为 <code>true</code>。 Details 现今的 Web 浏览器支持每个 cookie 的 Secure 标记。如果设置了该标记&#xff0c;那么浏览器只会通过 HTTPS 发送 cookie。通过未加密…

ABAP IDOC 2 XML

有个需求&#xff0c;外围系统希望我们给到一个IDOC 记录的样例&#xff0c;但是我们we02中并无法看到 就找了一个demo去直接展示IDOC内容 *&---------------------------------------------------------------------* *& Report Z_IDOC_TO_XML *&------------…

HBase学习七:Compaction

1、简介 Compaction是从一个Region的一个Store中选择部分HFile文件进行合并。 合并原理是,先从这些待合并的数据文件中依次读出KeyValue,再由小到大排序后写入一个新的文件。之后,这个新生成的文件就会取代之前已合并的所有文件对外提供服务。 HBase根据合并规模将Compac…