Redis 驱逐政策说明

Redis eviction policy clarification

我是 Redis 的新手,在网上找不到任何相关信息,所以在这里提问。
假设我有多个数据库 Redis 集群并且我正在使用 LRU/LFU 驱逐策略。

我想知道 Redis 驱逐策略是否基于 数据库?我的意思是,假设我正在尝试向 DB 0 插入一个新项目并且我 运行 内存不足,Redis 会驱逐 DB 中的项目0 并完成插入?或者它会根据逐出策略逐出任何数据库中的项目吗?

我希望驱逐将在同一个虚拟数据库中进行。
如果逐出策略跨不同的数据库,如果我达到数据库的大小限制会发生什么?它会根据逐出策略逐出 DB 中的键,还是插入会失败?
谢谢。

我做了个简单的测试看看;

127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "0"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> config get maxmemory
1) "maxmemory"
2) "0"
127.0.0.1:6379[1]> config set maxmemory 100mb
OK
127.0.0.1:6379[1]> config get maxmemory
1) "maxmemory"
2) "104857600"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "104857600"
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> config get maxmemory
1) "maxmemory"
2) "104857600"
127.0.0.1:6379[2]>

正如您将 maxmemory 设置为 database 0 时所见,其他数据库也具有相同的 maxmemory 值。它们都共享相同的资源(内存),当您在任何数据库中 运行 INFO MEMORY 时,它们将打印相同的值(没有共享它-巨大-但您可以测试)。

我认为这不是特定于数据库的,它们实际上是分开的。您不会 运行 仅在一个数据库中内存不足,而是在所有数据库中内存不足。