我正尝试使用google colab的redis-om JsonModel将数据作为持久化JSON文件保存到redis云。
使用下面的脚本,我收到这个错误:
OSError Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/redis/connection.py in connect(self)
706 try:
--> 707 sock = self.retry.call_with_retry(
708 lambda: self._connect(), lambda error: self.disconnect(error)
10 frames
/usr/local/lib/python3.10/dist-packages/redis/retry.py in call_with_retry(self, do, fail)
45 try:
---> 46 return do()
47 except self._supported_errors as error:
/usr/local/lib/python3.10/dist-packages/redis/connection.py in <lambda>()
707 sock = self.retry.call_with_retry(
--> 708 lambda: self._connect(), lambda error: self.disconnect(error)
709 )
/usr/local/lib/python3.10/dist-packages/redis/connection.py in _connect(self)
1005 if err is not None:
-> 1006 raise err
1007 raise OSError("socket.getaddrinfo returned an empty list")
/usr/local/lib/python3.10/dist-packages/redis/connection.py in _connect(self)
993 # connect
--> 994 sock.connect(socket_address)
995
OSError: [Errno 99] Cannot assign requested address
During handling of the above exception, another exception occurred:
ConnectionError Traceback (most recent call last)
<ipython-input-27-4ee06a3d036c> in <cell line: 24>()
22
23 # Create an instance of the model class with some data
---> 24 person = Person(name="Alice", age=25, email="[email protected]")
25
26 # Save the instance to Redis as a JSON document
/usr/local/lib/python3.10/dist-packages/redis_om/model/model.py in __init__(self, *args, **kwargs)
1676
1677 def __init__(self, *args, **kwargs):
-> 1678 if not has_redis_json(self.db()):
1679 log.error(
1680 "Your Redis instance does not have the RedisJson module "
/usr/local/lib/python3.10/dist-packages/redis_om/checks.py in has_redis_json(conn)
15 if conn is None:
16 conn = get_redis_connection()
---> 17 command_exists = check_for_command(conn, "json.set")
18 return command_exists
19
/usr/local/lib/python3.10/dist-packages/redis_om/checks.py in check_for_command(conn, cmd)
7 @lru_cache(maxsize=None)
8 def check_for_command(conn, cmd):
----> 9 cmd_info = conn.execute_command("command", "info", cmd)
10 return None not in cmd_info
11
/usr/local/lib/python3.10/dist-packages/redis/client.py in execute_command(self, *args, **options)
1264 pool = self.connection_pool
1265 command_name = args[0]
-> 1266 conn = self.connection or pool.get_connection(command_name, **options)
1267
1268 try:
/usr/local/lib/python3.10/dist-packages/redis/connection.py in get_connection(self, command_name, *keys, **options)
1459 try:
1460 # ensure this connection is connected to Redis
-> 1461 connection.connect()
1462 # connections that the pool provides should be ready to send
1463 # a command. if not, the connection was either returned to the
/usr/local/lib/python3.10/dist-packages/redis/connection.py in connect(self)
711 raise TimeoutError("Timeout connecting to server")
712 except OSError as e:
--> 713 raise ConnectionError(self._error_message(e))
714
715 self._sock = sock
ConnectionError: Error 99 connecting to localhost:6379. Cannot assign requested address.
备注:
1.我在Redis云上提供的端口不是6379,我不明白为什么脚本试图使用localhost
1.我在redis云上的模块配置到Redis Stack
1.使用我的连接凭证,我能够读写数据到流/从流读取数据-因此凭证是正确的
1.我在Redis文档中看到可以在redis云上使用JsonModel
使用的脚本:
!pip install redis
!pip install redis-om
import redis
import redis_om
from redis_om import JsonModel, Field
server_ip = "my correct redis cloud server_ip"
port = "my correct redis cloud port"
password = "my correct redis cloud password"
# Connect to the Redis instance
client = redis.Redis(host=server_ip, port=port, password=password)
# Define a custom model class using JsonModel
class Person(JsonModel):
name: str = Field(index=True)
age: int
email: str
# Create an instance of the model class with some data
person = Person(name="Alice", age=25, email="[email protected]")
# Save the instance to Redis as a JSON document
person.save()
# Print the ID and the JSON representation of the instance
print(person.id)
print(person.to_json())
1条答案
按热度按时间yduiuuwa1#
你正在用你的服务器凭证创建一个Redis客户端
client
,但没有在Redis OM模型中使用它,所以假设Redis在localhost:6379
上,并试图到达那里。Redis OM Python允许您使用
REDIS_OM_URL
环境变量指定Redis的位置,该环境变量需要Redis URL格式(https://github.com/redis/redis-om-python/blob/main/docs/connections.md)所以你需要设置一下。示例值为:
将
<host>
、<port>
和<password>
分别替换为Redis Cloud主机、端口和密码。