redis 服务器 v2.8.4 在 Ubuntu 14.04 VPS 上运行,具有 8 GB RAM 和 16 GB 交换空间(在 SSD 上)。但是htop显示redis单独占用22.4 G内存!
redis-server最终因为内存不足而崩溃。Mem并且Swp两者都命中 100% 然后redis-server与其他服务一起被杀死。
来自dmesg:
[165578.047682] Out of memory: Kill process 10155 (redis-server) score 834 or sacrifice child
[165578.047896] Killed process 10155 (redis-server) total-vm:31038376kB, anon-rss:5636092kB, file-rss:0kB
Run Code Online (Sandbox Code Playgroud)
redis-server从 OOM 崩溃或service redis-server force-reload导致内存使用量下降到 <100MB 的情况下重新启动。
问题:为什么会redis-server占用越来越多的内存直到崩溃?我们怎样才能防止这种情况发生?
设置是不是真的maxmemory不行,因为一旦redis达到maxmemory限制,它就会开始删除数据?

重启 redis-server 后 …
我想在redis中创建这种类型的结构:(它基本上是json数据)
{
"id": "0001",
"name":"widget ABC",
"model": "model123",
"service":"standard",
"admin_password": 82616416,
"r1":
{
"extid":"50000",
"password":"test123",
},
"r2":
{
"ext":"30000",
"password":"test123",
},
}
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试过的:
我试图创建一个没有“子”哈希的哈希,只是为了确保我掌握了基本知识。所以这是我从 redis-cli 开始的:
HMSET widget:1 id 0001 name 'widget ABC' model 'model123' service standard admin_password 82616416
HMSET widget:2 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234
Run Code Online (Sandbox Code Playgroud)
这似乎有效。我可以看到我在小部件集合中有 2 条小部件数据“记录”。
但是我尝试使用 r1 数据创建记录失败。
这是我尝试过的:
HMSET widget:3 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234 r1{extid 50000}
Run Code Online (Sandbox Code Playgroud)
这将创建一个散列值“50000}”的散列键“r1{extid”
任何建议,将不胜感激。我认为我的问题是我的行话。我只是不太了解 redis 语法,无法知道在我的谷歌搜索中使用哪些词。
也许我只需要像这样“展平”数据:
HMSET …Run Code Online (Sandbox Code Playgroud) 我尝试连接 redis 6.0+,这是我现在配置的 Python celery redis 代理 url:
broker_url = redis://:default:123456@cruise-redis-headless.reddwarf-cache.svc.cluster.local:6379/5
celery_result_backend = redis://:default:123456@cruise-redis-headless.reddwarf-cache.svc.cluster.local:6379/5
Run Code Online (Sandbox Code Playgroud)
但是当我使用以下命令启动芹菜时:
root@pydolphin-service-6fc4b98f54-msfql:~/pydolphin# celery -A dolphin.tasks.tasks worker --loglevel=INFO -n worker2 -Q non_editor_pick_and_diff_pull --concurrency 2
/usr/local/lib/python3.9/site-packages/celery/platforms.py:834: SecurityWarning: You're running the worker with superuser privileges: this is
absolutely not recommended!
Please specify a different user using the --uid option.
User information: uid=0 euid=0 gid=0 egid=0
warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(
-------------- celery@worker2 v5.1.2 (sun-harmonics)
--- ***** -----
-- ******* ---- Linux-3.10.0-1160.31.1.el7.x86_64-x86_64-with-glibc2.28 2021-08-08 20:45:35
- *** --- * ---
- ** ---------- [config]
- …Run Code Online (Sandbox Code Playgroud) 想象一下在 Redis 数据库中有一堆散列,每个散列代表一个用户对象。例如,您将如何让用户获得最低注册日期?位置ts_registered最低的用户。我在 redis.io的命令页面上搜索了一些,但似乎没有在那里找到它的命令。
我对Redis没有太多经验,我基本上只是在检查它是如何工作的。
我有一个 3 节点 Redis 复制和一个 3 节点 Sentinel。我想移除一个奴隶。
我尝试停止从站并slaveof 10.128.130.139 6379从配置中删除。但是在我启动之后它又变成了奴隶。并slaveof再次回到配置中。
阅读SLAVEOF 后,我尝试调用SLAVEOF NO ONE. 但1分钟后它又变成了奴隶。
我猜 Sentinel 将它重新配置为 slave。在 Sentinel 存在的情况下,如何删除一个奴隶?
redis ×6
nosql ×2
condition ×1
hashing ×1
memory ×1
performance ×1
replication ×1
select ×1
ubuntu ×1