redis报错Windows error 0x70的解决方法

1. 问题描述

在使用Redis的过程中,如果出现Windows error 0x70的错误,那么就会导致Redis无法正常使用。该错误通常对应于Windows下的错误代码EX_IOERR。那么,该如何解决这个问题呢?本文将详细介绍解决方法。

2. 解决方法

2.1. 重新安装Redis

最简单的方法就是重新安装Redis。有些错误可能是由Redis安装本身引起的,特别是在安装时出现了问题或者文件损坏时。 因此,重新安装Redis可能会解决Windows error 0x70错误。

为此,请首先卸载Redis。然后,在重新下载Redis之前,请确保您的计算机满足以下系统要求:

Windows Server 2012或更高版本

Visual C++ 2015 运行库

如果您的计算机满足要求,请访问Redis官网下载最新版本的Redis并重新安装它。

2.2. 更改Redis配置文件中的内存映射文件大小

如果Redis配置文件中内存映射文件的大小设置不正确,则可能会导致Windows error 0x70错误。 您可以通过以下步骤更改Redis配置文件中的内存映射文件大小。

找到Redis配置文件redis.windows.conf。默认情况下,它应该位于Redis根目录。

打开Redis配置文件。找到以下条目:

 # *** WARNING *** The TCP backlog setting of 511 cannot be enforced because /   the  

# /proc/sys/net/core/somaxconn value of 128 is too low.

#

# Please increase /proc/sys/net/core/somaxconn to improve performance

# of the system.

在上述条目之后,请添加以下内容,以将内存映射文件大小设置为128MB。

# Maximum memory map size.  

# Only effects 32bit builds on Windows.

#

# maxmemory

# Specify the max number of memory map (in bytes),

# up to 3GB ~ 4GB (on 32bit arch), but smaller

# values are recommended if the target system is

# not enough stable with big memory map.

#

# A trivial module that checks the maxmemory limit can be found at:

# https://github.com/dmajkic/redis-maxmemory-check

#

# By default Redis will not check for maxmemory limit being reached and will

# continue to accept writes and replies until it eventually crashes.

#

# Once the limit is reached Redis will close the connection with the client

# and start to reply with and "out of memory" error message.

maxmemory 134217728

重新启动Redis服务。您可以使用以下命令打开命令提示符,并使用以下命令:

redis-server --service-start

2.3. 更改Microsoft Visual C++运行时设置

在某些情况下,更改Microsoft Visual C++运行时设置可能会解决Windows error 0x70问题。 请按照以下步骤操作:

以管理员身份打开命令提示符。

在命令提示符处,输入以下内容并按Enter键 :

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v DisablePagingExecutive /t REG_DWORD /d 0x1 /f

重新启动计算机。

2.4. 使用Windows内存映射文件API

最后,如果您是一个开发人员并且具有Windows应用程序开发经验,则可以使用Windows内存映射文件API解决错误。 在这种情况下,您需要对Redis源代码进行一些修改,以使用Windows内存映射文件API。 以下是使用Windows内存映射文件API的步骤:

打开Redis源代码的文件/src/win32_mmap.c,并将以下内容插入到函数mmap_file_windows的最前面:

#include <Windows.h>

在以下代码行中:

if (offset % sysconf(_SC_PAGE_SIZE) != 0) {

在此位置添加以下内容:

 MEMORYSTATUSEX memStat;  

memStat.dwLength = sizeof(memStat);

GlobalMemoryStatusEx(&memStat);

if ( memStat.ullTotalPhys < unicode_length ) {

errno = EIO;

return MAP_FAILED;

}

保存源代码并重新编译Redis。

3. 总结

当出现Windows error 0x70错误时,您可以尝试采用以上任何一种方法进行解决。但是,我们建议您首先尝试重新安装Redis,因为这是最简单和最有效的方法。如果重新安装Redis无法解决问题,您可以尝试更改Redis配置文件中的内存映射文件大小,或者更改Microsoft Visual C++运行时设置。如果您是开发人员,并且您有Windows应用程序开发经验,您可以考虑使用Windows内存映射文件API,但这需要一些额外的工作。

数据库标签