现象:重启redis时没有用root用户,结果dump.rdb文件停止更新,bgsave命令报错(error) ERR
原因:
1.dump.rdb文件所在的文件夹权限没有开通,导致dump.rdb文件停止更新,此时修改redis数据时会报错,原因是默认配置 stop-writes-on-bgsave-error yes,当bgsave出错时数据将不能修改redis,如下操作后可以更新数据: config set stop-writes-on-bgsave-error no ,dump.rdb文件恢复更新。
2.当redis的内存占用比较大时,在上述操作后dump.rdb文件仍然停止更新,并且slave服务器也不能同步,原因是操作系统的vm.overcommit_memory配置(配置说明在最后),如下操作:
echo 1 > /proc/sys/vm/overcommit_memory
后dump.rdb文件恢复更新。slave也可以同步数据了。
3.当使用root用户启动redis时没有上述问题。
overcommit_memory解释:
vm.overcommit_memory 表示内核在分配内存时候做检查的方式。这个变量可以取到0,1,2三个值。对取不同的值时的处理方式都定义在内核源码 mm/mmap.c 的 __vm_enough_memory 函数中。
取 1 的时候: 此时宏为 OVERCOMMIT_ALWAYS,函数直接 return 0,分配成功。
取 2 的时候: 此时宏为 OVERCOMMIT_NEVER,内核计算:内存总量×vm.overcommit_ratio/100+SWAP 的总量,如果申请空间超过此数值,则分配失败。vm.overcommit_ratio 的默认值为50。
取 0 的时候: 此时宏为 OVERCOMMIT_GUESS,内核计算:NR_FILE_PAGES 总量+SWAP总量+slab中可以释放的内存总量,如果申请空间超过此数值,则将此数值与空闲内存总量减掉 totalreserve_pages(?) 的总量相加。
如果申请空间依然超过此数值,则分配失败。
以上为粗略描述,在实际计算时,如果非root进程,则在计算时候会保留3%的空间,而root进程则没有该限制。详细过程可看源码。
来自:http://blog.vkap.com/?p=1606
相关推荐
redis:7.0.8 docker镜像
Redis:6.2.7版本的配置文件redis.conf
使用redis:encode/1函数以Redis数据格式编码Erlang术语: % integer redis : encode ( 1 ). % simple string redis : encode (<< " test " >>). % bulk string redis : encode ({ bulk_string , << " ...
它没有网络模块,因此您可以自由配置自己的模块,也可以使用默认模块( )例cpp_redis :: client cpp_redis::client client;client.connect();client.set( " hello " , " 42 " );client.get( " hello " , [](cpp_...
ubuntu下docker安装redis:6.2.14
Redis-sentinel是Redis的作者antirez完成的,因为Redis实例在各个大公司的应用,每个公司都需要一个Redis集群的管理工具,被迫都自己写管理工具来管理Redis集群,antirez考虑到社区的急迫需要(详情),花了几个星期写...
接下来,我们需要编译和安装 Redis: `make install` 这将将 Redis 编译并安装到系统中。 配置 Redis 安装完成后,我们需要配置 Redis,以便它能够正确地运行。我们需要修改 `redis.conf` 文件,以添加密码认证...
安装npm install --save keyv ioredis @microlink/keyv-redis用法const Keyv = require ( 'keyv' )const keyv = new Keyv ( 'redis://user:pass@localhost:6379' ) 任何有效的选项都将直接通过。 const keyv = new ...
Redis命名空间Redis的::命名空间提供了一个接口,您的命名空间的子集密钥空间(例如,具有共同的开始键),并要求宝石。 require 'redis-namespace'# => trueredis_connection = Redis . new# => #<Redis>namespaced...
redis:6.0.4镜像
独库redis dokku 的官方 redis 插件。 当前默认安装 。...redis:backup <service> <bucket> [--use-iam] # creates a backup of the redis service to an existing s3 bucket redis:backup-auth <service>
wallproxy Errno 10054 解决方法
它没有网络模块,因此您可以自由配置自己的模块,也可以使用默认模块( )例cpp_redis :: client cpp_redis::client client;client.connect();client.set( " hello " , " 42 " );client.get( " hello " , [](cpp_...
安装将此行添加到应用程序的 Gemfile 中: gem 'pooled_redis'用法使用Redis.new支持的选项将redis部分添加到您的database.yml development : redis : db : 2production : redis : url : ' redis://mymaster ' ...
Redis 是一个开源的内存数据结构存储系统,常被用作数据库、缓存和消息代理。在Windows环境下,Redis 的安装和使用与在Linux系统中有所不同。这里我们将详细讨论Windows版Redis 5.0.14的相关知识点。 1. **Redis ...
redis-7.0.15 docker离线镜像安装包
redis::server - 安装 Redis 服务器。 redis::client - 安装 Redis 客户端。 用法 如果 Redis 组件不存在,本说明书将安装它们,如果系统上安装了它们,则提取更新。 属性 case node [ "platform" ] when "debian...
Redis 6.0.8是该压缩包的主要内容,它是一个流行且高性能的开源内存数据结构存储系统,常被用作数据库、缓存和消息中间件。在Windows平台上运行Redis,为开发者提供了在Windows操作系统上利用Redis的强大功能的能力...
安装 Redis:sudo apt-get install redis-server 启动 Redis:/usr/bin/redis-server /etc/redis/redis.conf 重启 Redis:/etc/init.d/redis-server restart PHP-Redis 扩展是 PHP 的一个扩展,效率相当高,拥有...
redis 连接报错 GET_LIKE_ERROR 处理过程.rar