Python 非序列化数据的共享内存缓存

Python 非序列化数据的共享内存缓存,python,django,caching,redis,memcached,Python,Django,Caching,Redis,Memcached,我有一个(Django)web应用程序,它需要构建大型(numpy)数组,比如说每个向量1MB。它可以在几个进程上工作(由Apache/mod_wsgi产生) 目前,我使用的是内存缓存中的,最简单的版本是全局变量。从缓存中检索数据是即时的,这是我所需要的。但是,每个进程都需要在自己的内存中复制缓存,这取决于哪个进程加载了数据,哪个进程没有(我希望在启动时一次性加载) 我尝试Memcached和Redis在进程之间共享缓存。两者都需要先序列化数据:仅限字符串和整数。现在,当我想要读取向量时,反序列

我有一个(Django)web应用程序,它需要构建大型(numpy)数组,比如说每个向量1MB。它可以在几个进程上工作(由Apache/mod_wsgi产生)

目前,我使用的是内存缓存中的,最简单的版本是全局变量。从缓存中检索数据是即时的,这是我所需要的。但是,每个进程都需要在自己的内存中复制缓存,这取决于哪个进程加载了数据,哪个进程没有(我希望在启动时一次性加载)

我尝试MemcachedRedis在进程之间共享缓存。两者都需要先序列化数据:仅限字符串和整数。现在,当我想要读取向量时,反序列化需要大约10秒,对于用户在单击按钮后等待的时间有点长

难道没有任何解决方案可以同时在RAM中存储一些任意数据而不序列化为字符串,并在不同进程之间共享吗?(我对重启后的持久性不感兴趣)。

Redis支持很多,包括原始字节

字符串是最基本的Redis值类型Redis字符串是 二进制安全,这意味着Redis字符串可以包含任何类型的 数据,例如JPEG图像或序列化的Ruby对象

Redis被证明是快速的,所以也许你的重点应该放在快速反序列化的高效序列化格式上,例如

Redis支持许多数据类型,包括原始字节

字符串是最基本的Redis值类型Redis字符串是 二进制安全,这意味着Redis字符串可以包含任何类型的 数据,例如JPEG图像或序列化的Ruby对象

Redis被证明是快速的,所以也许你的重点应该放在快速反序列化的高效序列化格式上,例如


请记住,您可以使用Redis SETRANGE命令修改具有字符串值的任意字节范围,并使用GETRANGE获取这些子字符串。与Python字符串(2.x)和ByteArray(3.x)一样,它们是二进制安全的。因此,正如@simpsojo在这里所说的,您可以将这些命令与各种批量序列化/反序列化选项一起使用。从概念上讲,这类似于将存储在某个键上的值视为一种mmap()区域(一个大的共享字节数组)。不过,Redis负责协调(无锁定问题)。如果您同意,您介意接受答案吗?ThanksKeep记住,您可以使用Redis SETRANGE命令修改具有字符串值的任意字节范围,并使用GETRANGE获取这些子字符串。与Python字符串(2.x)和ByteArray(3.x)一样,它们是二进制安全的。因此,正如@simpsojo在这里所说的,您可以将这些命令与各种批量序列化/反序列化选项一起使用。从概念上讲,这类似于将存储在某个键上的值视为一种mmap()区域(一个大的共享字节数组)。不过,Redis负责协调(无锁定问题)。如果您同意,您介意接受答案吗?谢谢