redis - Redis驱逐政策说明

标签 redis spring-data-redis redis-cluster

我是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/

相关文章:

concurrency - 多个并发程序在同一哈希键上执行读取/删除的 Redis 行为

java - Redis是否只允许字符串表示而不允许数值

java - 使用 spring-data-redis 将 500k 条记录插入到 redis 中

redis - 在 Kubernetes 中公开 Redis 集群中的每个 pod

python-3.x - Redis Cluster 是否支持使用 Python API 的连接池?

rust - 在 Rust 中处理泛型和非泛型类型的枚举返回

java - Spring Data Redis 支持 Externalizable 吗?

spring - 使用 Jedis 时如何检测 watch/exec 失败?

node.js - 使用 Node.js 的 AWS ElastiCach (Redis) 上出现“"Couldn' t 获取插槽分配”错误

heroku - socket.io-redis 和 heroku 中超出了最大调用堆栈大小