redis驱逐政策澄清

zkure5ic  于 2021-06-10  发布在  Redis
关注(0)|答案(1)|浏览(438)

我是redis的新手,在网上找不到任何信息,所以在这里询问。
假设我有多个数据库redis集群,并且使用lru/lfu逐出策略。
我想知道redis逐出策略是否基于数据库?我的意思是,假设我正在尝试向db0插入一个新项,并且内存不足,redis是否会逐出db0中的项并完成插入?或者它会根据逐出策略逐出任何数据库中的项吗?
我希望逐出将在同一个虚拟数据库中。
如果逐出策略跨不同的数据库,如果达到数据库的大小限制,会发生什么情况?它会根据逐出策略逐出数据库中的密钥,还是插入失败?
谢谢。

oyjwcjzk

oyjwcjzk1#

我做了一个简单的测试来看看它;

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 在任何数据库中,它们都会打印相同的值(没有共享它-很大-但您可以测试)。
我认为这不是特定于数据库的,它们实际上是分开的。不是只有一个数据库内存不足,而是所有数据库内存不足。

相关问题