我是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
时,它们将打印相同的值(不共享-huge-,但是您可以测试)。我认为这不是特定于数据库的,它们实际上是分开的。您不仅会在一个数据库中耗尽内存,而且不会耗尽所有数据库。
关于redis - Redis驱逐政策说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62533026/