redis驱逐政策澄清

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

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

oyjwcjzk

oyjwcjzk1#

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

  1. 127.0.0.1:6379> config get maxmemory
  2. 1) "maxmemory"
  3. 2) "0"
  4. 127.0.0.1:6379> select 1
  5. OK
  6. 127.0.0.1:6379[1]> config get maxmemory
  7. 1) "maxmemory"
  8. 2) "0"
  9. 127.0.0.1:6379[1]> config set maxmemory 100mb
  10. OK
  11. 127.0.0.1:6379[1]> config get maxmemory
  12. 1) "maxmemory"
  13. 2) "104857600"
  14. 127.0.0.1:6379[1]> select 0
  15. OK
  16. 127.0.0.1:6379> config get maxmemory
  17. 1) "maxmemory"
  18. 2) "104857600"
  19. 127.0.0.1:6379> select 2
  20. OK
  21. 127.0.0.1:6379[2]> config get maxmemory
  22. 1) "maxmemory"
  23. 2) "104857600"
  24. 127.0.0.1:6379[2]>

当您将maxmemory设置为 database 0 ,其他数据库也有相同的 maxmemory 价值观。当您运行时,它们都共享相同的资源(内存) INFO MEMORY 在任何数据库中,它们都会打印相同的值(没有共享它-很大-但您可以测试)。
我认为这不是特定于数据库的,它们实际上是分开的。不是只有一个数据库内存不足,而是所有数据库内存不足。

展开查看全部

相关问题