在redis中存储ndarray的示例代码

 更新时间:2024年02月02日 09:09:50   作者:mr_songw  
在Redis中存储NumPy数组(ndarray)通常需要将数组转换为二进制格式,然后将其存储为字符串,这篇文章给大家介绍了在redis中存储ndarray的示例代码,感兴趣的朋友一起看看吧
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

如何在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 Cluster Pipeline导致的死锁问题解决

    Redis Cluster Pipeline导致的死锁问题解决

    本文主要介绍了Redis Cluster Pipeline导致的死锁问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-10-10
  • 如何在SpringBoot中使用Redis实现分布式锁

    如何在SpringBoot中使用Redis实现分布式锁

    这篇文章主要介绍了如何在SpringBoot中使用Redis实现分布式锁,在实际开发中有可能会遇到多个线程同时访问同一个共享变量,那么上锁就很重要了,需要的朋友可以参考下
    2023-03-03
  • Redis实现分布式锁方法详细

    Redis实现分布式锁方法详细

    在单体应用中,如果我们对共享数据不进行加锁操作,会出现数据一致性问题,我们的解决办法通常是加锁。在分布式架构中,我们同样会遇到数据共享操作问题。本文将介绍Redis实现分布式锁的五种方式。需要的可以参考一下
    2021-12-12
  • phpredis提高消息队列的实时性方法(推荐)

    phpredis提高消息队列的实时性方法(推荐)

    下面小编就为大家带来一篇phpredis提高消息队列的实时性方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • SpringMVC集成redis配置的多种实现方法

    SpringMVC集成redis配置的多种实现方法

    这篇文章主要介绍了SpringMVC集成redis配置的多种实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 一文带你了解Redis中RDB与AOF的区别

    一文带你了解Redis中RDB与AOF的区别

    Redis 在持久化时,给我们提供了两种方式,这两种方式就是 RDB 与 AOF,那这两种方式有什么区别呢,本文就带大家详细的了解一下二者的区别,需要的朋友可以参考下
    2023-06-06
  • 浅析Redis中红锁RedLock的实现原理

    浅析Redis中红锁RedLock的实现原理

    RedLock?是一种分布式锁的实现算法,由?Redis?的作者?Salvatore?Sanfilippo(也称为?Antirez)提出,本文主要为大家详细介绍了红锁RedLock的实现原理,感兴趣的可以了解下
    2024-02-02
  • Redis三种常用的缓存读写策略步骤详解

    Redis三种常用的缓存读写策略步骤详解

    Redis有三种读写策略分别是:旁路缓存模式策略、读写穿透策略、异步缓存写入策略,接下来通过本文给大家详细介绍下Redis三种常用的缓存读写策略,感兴趣的朋友一起看看吧
    2022-05-05
  • 使用Ruby脚本部署Redis Cluster集群步骤讲解

    使用Ruby脚本部署Redis Cluster集群步骤讲解

    今天小编就为大家分享一篇关于使用Ruby脚本部署Redis Cluster集群步骤讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • redis-cli登录远程redis服务并批量导入数据

    redis-cli登录远程redis服务并批量导入数据

    本文主要介绍了redis-cli登录远程redis服务并批量导入数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-10-10

最新评论

?


http://www.vxiaotou.com