redis()是一个用C语言编写的数据库,高性能非关联键值配对数据库。与传统数据库不同,REDIS的数据在内存中,因此读写速度非常快,并且在该数据库中非常快,并且在该数据库中广泛使用。cache Direction.redis可以将数据写入磁盘,确保数据不会丢失,并且REDIS的操作是原子。
基本数据类型:
1.字符串:最常用的数据类型。字符串类型的值可以是字符串,一个数字或二进制,但最大值不能超过512MB。
2.哈希:哈希是一个钥匙值对。
3.集合:集合无序和沉重的集合提供了交叉和收集等方法,这对于实现诸如共同朋友和注意之类的功能特别方便。
4.列表:有序和重复的集合,底层取决于两个路链接列表。
5.排序集(zset):订单set.A内部维护参数以实现。适用于列表和排名的新闻队列和权重。
特殊数据类型:
1.位图:拾取,可以被视为一个单元作为单元数组,并且数组中的每个单元只能保存0或1,并且数组的设置称为偏移量。位图的长度无关紧要与集合中的元素数量相关,但与底座的上限有关。
2. Hyperloglog.Hyperloglog是用于进行基本统计数据的算法。优点是,当输入元素的数量或音量非常大时,计算基础所需的空间始终是固定的,并且使用量很小。典型的使用场景是统计独立的访问者。
3.地理空间:它主要用于存储地理位置信息,并运行存储的信息。适用的场景,例如定位和附近的人。
交易的原则是将交易中的多个命令发送到Redis,然后让Redis依次执行这些命令。
交易的生命周期:
交易范围内的一个命令不会影响其他命令的执行,也不能保证原子质:
观看命令
该命令可以监视一个或多个键。一旦修改了一个键,将不会执行后来的事务(类似于乐观的锁)。执行命令后,将自动取消监视。
例如上面的代码:
使用可以取消对命令的监视,所有监视锁将被取消。
具体是将内存数据写入磁盘中,以防止服务衬里并导致内存数据丢失。
REDIS支持两种方式的持久性,一种是方式,一种是方式。前者将根据指定规则定期将数据存储在硬盘上,而后者记录了执行每个执行后命令。通常与两者结合。
这是redis的默认持久性方案。当RDB持续使用时,内存中的数据写入磁盘中并在指定的目录中生成文件。REDISRESTART SARTART SARTART PRODART文件以还原数据。
它是触发RDB持久性的主流。执行过程如下:
当REDIS启动时,读取RDB快照文件以将数据从硬盘加载到内存中。通过RDB方法的持久性,一旦REDIS异常退出,它将丢失最后一次持久性后更改的数据。
触发RDB持久性:
优势:
缺点:
AOF(仅附加文件)持久性:每次在独立日志中记录命令,当REDIS重新启动以实现恢复数据的目的时,AOF文件中的命令将被重新执行。AOF的主要作用是求解数据持久性的真实时间。AOF是Redis的主流方法。
默认情况下,REDIS不会打开AOF方法。可以通过参数启用它:。在长时间打开AOF方法后,每次执行写作命令,REDIS都会将命令写入缓冲区区域。根据相应的策略,AOF缓冲液将同步与硬盘同步。
默认情况下,系统将每30秒执行每30秒执行同步操作。为了防止缓冲区丢失,您可以在编写AOF文件后积极要求系统将缓冲区数据同步到硬盘。通过参数同步。
接下来,查看AOF持续执行过程:
优势:
缺点:
REDIS的复制功能支持多个数据库之间的数据同步。主数据库可以执行读取和写作操作。当主数据库的数据更改时,数据将自动同步到数据库。从数据库中,它通常仅读取,并且它将接收由主数据库同步的数据。一个主数据库可以具有多个数据库,并且只能从数据库中拥有一个主数据库。
大师和奴隶副本的原则?
耶和华的主和声音无法转移,无法实现高可用性。哨兵模式解决了这些问题。
当客户端连接到Redis时,首先连接到哨兵。哨兵将告诉客户端的主要节点REDIS的地址,然后客户端连接redis并执行后续操作。当主节点向下时,哨兵监视了主节点,并重新选举了从节点到一个节点的某个性能,从成为一个新的主节点,然后通过发布订阅模式来通知其他平板,让他们切换主机。
工作准则
前哨模式解决了无法转移主和即时复制的问题,无法达到高可用性的高可用性,但是仍然存在主节点的写作能力和能力的问题。集群模式实现了分布式存储Redis。每个节点存储不同的内容,以解决主节点的写作能力和容量的问题。
REDIS群集群集节点的最小配置为6个节点以上的6个节点(3个主节点3)。主节点提供读写操作。从节点作为备用节点,它不提供请求。它仅用作故障传输。
REDIS群集使用虚拟插槽分区。所有键根据哈希功能映射到0至16,383个整数插槽。每个节点负责维护由凹槽和凹槽映射的键值数据的一部分。
哈希插槽如何映射到redis实例?
优势:
缺点:
1.被动删除(惯性)。访问密钥时,如果键到期,将删除键。
2.主动删除(常规)。调整清洁键,每个清洁都会依次穿越所有DB,并从DB中取20个键。如果到期,它将被删除。如果有5个密钥到期,请继续清理此DB,否则下一个DB将开始清理。
3.当内存不够时清理。REDIS具有最大的内存限制。可以通过MaxMemory参数设置最大内存。当使用的内存超过最大内存集时,必须执行内存释放。当内存释放时,将根据配置的消除策略清洁内存。
当Redis的内存超过最大允许内存时,REDIS将触发内存策略并删除一些未使用的数据,以确保REDIS服务器正常运行。
REDISV4.0之前提供了六种消除数据策略:
REDISV4.0之后,添加了以下两个:
可以通过配置文件修改内存策略。相应的配置项是默认配置为。
1.在更新数据库之前删除缓存
执行更新操作时,请先删除缓存,然后更新数据库。当后续请求再次读取时,将从数据库中更新并将新数据更新为缓存。
现有问题:删除缓存数据后,在更新数据库之前,如果在此期间有新的阅读请求,您将从数据库中读取旧数据到CACHE.OLD数据。
2.首先更新数据库,然后删除缓存
执行更新操作时,首先更新MySQL,在成功删除缓存后,然后在阅读请求时将新数据写回缓存。
现有问题:更新MySQL并在此期间删除缓存,请求读取的旧数据是缓存,但是当数据库更新时,它将恢复并相对较小。
3.异步更新缓存
操作完成后,数据库更新操作不会直接操作缓存。取而代之的是,将操作命令打包到消息队列中,然后Redis将单独使用数据。消息队列可以确保数据操作顺序的一致性,并确保缓存系统的数据正常。
缓冲渗透,缓存雪崩,缓存故障[详细说明] REDIS CACHE BREAK,PROSSINGRATION,AVALANCHE概念和解决方案
缓存渗透是指查询不存在的数据。因为当缓存未击中时,缓存是被动编写的。如果未从数据库找到数据,则不会将其写入缓存。查询并丢失缓存的含义。当流量很大时,DB可能会挂起。
Bloom过滤器的原理:添加元素时,将元素通过K单个散点函数映射到k点中的k点,并将其放置在1.下,将k点映射为1.通过扩展功能映射元素。如果这些要点有0,则必须不存在检查元素并直接返回;如果是1,则可能存在查询元素,并且可以进行。检查redis和数据库。
缓冲区雪崩是指我们设置缓存时使用相同的到期时间的使用,从而在某个时刻同时导致某个时间。该请求已转发给DB,DB的瞬时压力被悬挂在上面。
解决方案:根据原始故障时间添加随机值,以使到期时间更加分散。
缓存分解:当大量请求同时查询密钥时,此时将发生密钥,这将导致大量请求属于数据库。CACHE分解是查询缓存的键,缓存渗透是不存在的关键。
解决方案:添加一个分布式锁,第一个请求可以获取锁,在设置数据后锁定数据的线程以及其他线程获得锁定故障并等待50msavoid,大量请求掉入了该数据数据库。
REDIS客户端执行一个分为4个进程的命令:发送命令,命令排队,命令执行和返回结果。使用批处理请求,批处理返回结果,执行速度比一一执行更快。
汇编命令的数量不应太多。否则,数据量太大,增加客户端的等待时间也可能导致网络阻塞,并且可以将大量命令分为多个小命令。
本地批处理命令(MSET和MGET)的比较:
REDIS通过LUA脚本创建一个原子命令:当运行LUA脚本命令时,将不会执行其他脚本或redis命令来实现合并命令的原子操作。
有两种方法可以在Redis中执行LUA脚本:和。该命令使用构建的lua解释器来重视Lua脚本。
LUA脚本功能
1. LUA脚本由Redis中的原子执行,并且在执行过程中不会插入其他命令。
2. LUA脚本可以一次包装多个命令,以有效地减少网络开销。
应用程序方案
示例:限制接口访问的频率。
REDIS中接口访问数量的键值对是接口名称和访问时间的数量。每个访问接口的时间,将执行以下操作:
PS:该界面的实现方法相对简单,并且有很多问题。通常,它不会使用。界面限制更多的是令牌枪管算法和泄漏枪管算法。