在redis中存储ndarray的示例代码

 更新时间:2024年02月02日 09:09:50   作者:mr_songw  
在Redis中存储NumPy数组(ndarray)通常需要将数组转换为二进制格式,然后将其存储为字符串,这篇文章给大家介绍了在redis中存储ndarray的示例代码,感兴趣的朋友一起看看吧

如何在redis中存储ndarray

在Redis中存储NumPy数组(ndarray)通常需要将数组转换为二进制格式,然后将其存储为字符串。以下是使用Python和Redis-py库的一个简单示例:

首先,确保你已经安装了Redis-py库:

pip install redis

然后,你可以使用以下代码将NumPy数组存储到Redis中:

import redis
import numpy as np
import pickle
# 连接到本地Redis服务器,端口默认是6379
redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)
# 创建一个示例的NumPy数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 将NumPy数组转换为二进制字符串
arr_binary = pickle.dumps(arr)
# 存储二进制字符串到Redis
redis_client.set('numpy_array_key', arr_binary)
# 从Redis中检索数据并转换回NumPy数组
stored_data = redis_client.get('numpy_array_key')
if stored_data:
    retrieved_arr = pickle.loads(stored_data)
    print("Retrieved NumPy Array:")
    print(retrieved_arr)
else:
    print("Key not found in Redis.")

在这个例子中,pickle模块被用来将NumPy数组转换为二进制字符串,然后使用Redis-py库的set方法将其存储在Redis中。在检索时,使用get方法获取二进制字符串,并使用pickle.loads将其转换回NumPy数组。

补充:

如何把Numpy数组存进Redis

import (base64, struct, numpy, redis)
HOST = 'localhost'
PORT = 6379
connection_pool = redis.ConnectionPool(host=HOST, port=PORT, decode_responses=True)  # 连接池
def redis_save(key: str, numpy_ndarray: numpy.ndarray) -> None:
    """将Numpy数组存入Redis数据库。
    Parameters
    ----------
    key : str
        键字符串。
    numpy_ndarray : numpy.ndarray
        待存储数组。
    """    
    shape = numpy_ndarray.shape
    dim = len(shape)
    value = struct.pack(''.join(['>I']+['I'*dim]), *((dim,)+shape))
    value = base64.a85encode(value+numpy_ndarray.tobytes()) # 得转换成字符串,不然取出时候会报一个错
    conn = redis.Redis(connection_pool=connection_pool)
    conn.set(key, value)
    conn.close()
def redis_read(key: str, dtype) -> numpy.ndarray:
    """从Redis中读取一个Numpy数组。
    Parameters
    ----------
    key : str
        键字符串。
    dtype : Any
        指定数组元素数据类型。
    Returns
    -------
    numpy.ndarray
        从Redis键值对取出的数组。
    """
    SIZE = 4
    conn = redis.Redis(connection_pool=connection_pool)
    bytes = base64.a85decode(conn.get(key))
    conn.close()
    dim = struct.unpack('>I', bytes[:1*SIZE])[0]
    shape = struct.unpack('>%s' % ('I'*dim), bytes[1*SIZE:(dim+1)*SIZE])
    ret = numpy.frombuffer(
        bytes,
        offset=(dim+1)*SIZE,
        dtype=dtype
    ).reshape(shape)
    return ret

经检验的,存入后可以正常取出,放心食用。

到此这篇关于如何在redis中存储ndarray的文章就介绍到这了,更多相关redis存储ndarray内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • redis通过pipeline提升吞吐量的方法

    redis通过pipeline提升吞吐量的方法

    下面小编就为大家分享一篇redis通过pipeline提升吞吐量的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • Redis高阶使用消息队列分布式锁排行榜等(高阶用法)

    Redis高阶使用消息队列分布式锁排行榜等(高阶用法)

    在大多数传统的web系统中,使用Redis一般都是作为缓存使用,在大数据查询时作为缓解性能的一种解决方案,这篇文章主要介绍了Redis高阶使用消息队列分布式锁排行榜等,需要的朋友可以参考下
    2024-03-03
  • Redis线程模型的原理分析

    Redis线程模型的原理分析

    Redis是一个高性能的数据存储框架,在高并发的系统设计中,Redis也是一个比较关键的组件,是我们提升系统性能的一大利器,本文详细的介绍了Redis线程模型,感兴趣的可以了解一
    2021-11-11
  • Linux Redis 的安装步骤详解

    Linux Redis 的安装步骤详解

    这篇文章主要介绍了 Linux Redis 的安装步骤详解的相关资料,希望大家通过本文能掌握如何安装Redis,需要的朋友可以参考下
    2017-08-08
  • Redis分布式锁使用及说明

    Redis分布式锁使用及说明

    本文总结了Redis和Zookeeper在高可用性和高一致性场景下的应用,并详细介绍了Redis的分布式锁实现方式,包括使用Lua脚本和续期机制,最后,提到了RedLock算法的适用场景和缺点
    2025-01-01
  • Redis消息队列实现秒杀教程

    Redis消息队列实现秒杀教程

    这篇文章主要介绍了Redis消息队列实现秒杀教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • 通过实例解析布隆过滤器工作原理及实例

    通过实例解析布隆过滤器工作原理及实例

    这篇文章主要介绍了通过实例解析布隆过滤器工作原理及实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Redis实现查看服务状态、关闭和启动方式

    Redis实现查看服务状态、关闭和启动方式

    本文介绍了如何在Linux系统中查看、关闭和启动Redis服务,包括使用命令行工具和配置文件进行相关操作
    2025-11-11
  • Redis中的Lettuce使用详解

    Redis中的Lettuce使用详解

    Lettuce 是一个高级的、线程安全的 Redis 客户端,用于与 Redis 数据库交互,Lettuce 是一个功能强大、使用方便的 Redis 客户端,适用于各种规模的 Java 项目,下面给大家介绍Redis中的Lettuce使用详解,感兴趣的朋友一起看看吧
    2025-05-05
  • Redis中的AOF原理及分析

    Redis中的AOF原理及分析

    Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率
    2025-09-09

最新评论