当前位置: 首页 > 网络应用技术

redis-database其他谈话

时间:2023-03-06 15:29:03 网络应用技术

  REDIS数据库将所有数据库状态保存在Redisserver结构的数据库阵列中。DB数组中的每个项目都是RedisDB结构,每个RedisDB代表一个数据库。

  DBNUM属性的值可以由服务器配置。默认值为16,因此REDIS默认情况下具有16个数据库。

  每个Redis客户端都有其自己的相应数据库。每当客户端执行命令时,此命令都会操作相应的数据库。

  在默认情况下,REDIS使用0个数据库,用户可以使用Select命令选择。

  每个客户都保留了他们当前使用和指向生产的数据库。

  REDIS是数据库服务器的关键值。每个数据库结构(redisdb)中都有一个dict字典,可以保存数据库中的所有键值。这是关键空间:

  此密钥空间是该位置的存储密钥值。当我们执行相应的命令时,这些键值对将写入此密钥空间。

  REDISDB结构中的词典在数据库中节省了所有键的到期时间。这是到期词典:

  当Redis的钥匙过期时,何时将删除此键?

  REDIS有三个过期的密钥来删除策略:

  时机删除策略是最适合内存的。通过时间计时器,您可以在键释放空间时立即删除此密钥。但是,CPU的时间不是很友好,但是当到期键太多时,删除键将花费大量CPU时间。

  并且在创建定时任务时,您需要在Redis服务器中使用时间事件,并且当前时间事件的实现方法是无序链接的列表。寻找事件的时间是O(n)无法有效处理很多时间事件。

  惰性删除惰性删除对CPU最友好,但对记忆也不友好。当键已过期时,如果未访问此密钥,则将存储在数据库中。它将不会发布,并且大量过期键的内存是REDIS服务器内存的垃圾职业。

  与前两种删除方法相比,定时删除太明显了。定时删除是一种相对中立的方式。

  前面讨论了三个过期键的删除策略。REDIS实际使用的REDIS的惰性删除和定时删除。通过这两种策略的合作,服务器可以平衡CPU与内存空间之间的关系。

  实际上使用ExpireFneed函数实施了惰性删除策略。所有redis读取和写入命令将在执行前调用ExpireFneed函数。

  正时删除策略由ActiveExpiRecycle函数实施。当执行服务器的服务器定期操作时执行服务器函数时,将调用ActiveExpiRecycle函数。检查字典中键的一部分的到期时间并删除到期键。

  当RDB使用Save命令或BGSAVE命令创建新的RDB文件时,数据库将过滤到有效的键,并且过期的键不会存储在RDB文件中。

  当Redis服务器加载RDB文件时:

  对于AOF,如果未过期或已删除某个某个到期密钥,则该密钥不会产生任何影响,但是当删除此到期键时,此密钥将添加到Del.Command中,以指示该密钥已删除。。

  在重写AOF期间,还过滤过期的密钥。

  当服务器处于复制模式时,从服务器中删除到期密钥将由主服务器控制。

  原始:https://juejin.cn/post/710110564394526734