26

我正在使用 Redis-server for windows ( 2.8.4 - MSOpenTech ) / windows 8 64bit。

它工作得很好,但即使在我运行之后:

在此处输入图像描述

我看到了:(这是我的问题)

在此处输入图像描述

问题 :

— 我不是刚刚告诉它擦除所有 DB 吗?那么为什么那些 2/3 的大文件仍然存在呢?我怎样才能完全删除这些文件?(无需重新生成)

注意似乎它正在删除键而没有释放占用的空间。如果是这样,我怎样才能释放这个未使用的空间?

4

4 回答 4

25

来自https://github.com/MSOpenTech/redis/issues/83 “Redis 使用 fork() UNIX 系统 API 创建数据存储的时间点快照以存储到磁盘。这会影响 Redis 上的几个功能: AOF/RDB 备份、主从同步和集群。Windows 没有可用的类似 fork 的 API,因此我们不得不通过将 Redis 堆放在可以与子共享的内存映射文件中来模拟这种行为(准分叉)进程。默认情况下,我们设置这个文件的大小等于物理内存的大小。为了控制这个文件的大小,我们添加了一个 maxheap 标志。参见 Redis.Windows.conf 文件在 msvs\setups\documentation 中(也包括在 NuGet 和 Chocolatey 发行版中)以获取有关此标志使用的详细信息。"

于 2014-05-14T19:17:21.890 回答
7

我知道这是一个旧线程,但我在文件大小方面面临同样的问题。

如果你的 C ssd 驱动器有问题(像我一样),你可以创建一个目录连接:

1) 停止 redis 服务
2) 将 C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Redis 文件夹移动到另一个驱动器/位置。
3) 在 C:\Windows\ServiceProfiles\NetworkService\AppData\Local 中打开命令提示符,然后执行:

mklink /J "C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Redis" "[newpath]"

PD: [newpath ] 必须是绝对的,例如 "D:\directory junctions\Redis"

4) 启动 redis 服务。现在文件在另一个驱动器中。

如果对此命令有疑问,请查看http://ss64.com/nt/mklink.html 。

于 2015-10-14T15:56:55.713 回答
2

我在我的开发机器上遇到了同样的问题。通过停止 redis 服务解决了这个问题,我使用 WinDirStat(这是我最初用来检测问题的方法)永久删除 appdata/local/redis 中的这些文件。

然后我开始备份redis,一切正常。

在执行相同的过程之前,其他人可能希望确保不需要此数据。就我而言,这并不重要,因为这是我的开发工作站。

于 2015-11-11T01:06:07.147 回答
1

当您刷新数据库时,您只会从内存中刷新密钥。我不确定为什么你有不同名称的文件,这可能是 Redis 的 Windows 端口管理文件的方式的产物,但是当你删除密钥时,Redis 本身不会删除文件。您将需要在 Redis 之外管理过时的文件。

于 2014-05-14T18:52:24.747 回答