python - 如何使用 Python 在 Redis 缓存中设置由同一列名下的多行组成的值

标签 python caching redis google-cloud-memorystore

我正在为 Redis 服务器使用 Google Cloud 的 memorystore。我的目标是存储来自 BigQuery(类似 SQL)的查询结果,并从 Redis 检索结果以供后续使用。查询返回大约 1000 行和两列,我尝试使用 client.set 进行设置。

设置值和键后,当我尝试检索时,它只返回键的最后一个值。我猜这是因为在循环中尝试设置值时它会覆盖键的先前值。我如何克服存储同一键的多个值并检索它的问题。

我使用的代码如下:

import redis
import os
from google.cloud import bigquery

client = bigquery.Client()

redis_host = os.environ.get('REDISHOST', 'IP address')
redis_port = int(os.environ.get('REDISPORT', 6379))
r = redis.StrictRedis(host=redis_host, port=redis_port)

def hello_world():
    if (r.get('company_name')):
        print(r.get("company_name"))
    else:
        query = """SELECT coompany_name, news FROM `some-project.news` LIMIT 1000 """
        query_job = client.query(query)
        results = query_job.result()
        for row in results:
            r.set("company_name",row.company_name)
            r.set("news", row.news)
            r.expire("company_name",15)
            r.expire("news",15)
            print(row.company)
if __name__ == '__main__':
    hello_world()

请告诉我如何打印所有设置的键和值

最佳答案

我不熟悉 python 但我检查了 documentation方法名称相同。因此,您可以将以下结构应用于您的代码。

这里是 setslists 的 redis-cli 版本。

Sets

127.0.0.1:6379> sadd company_name name1 name2 name3 name4 nameN
(integer) 5
127.0.0.1:6379> sadd news news1 news2 news3 news4 newsN
(integer) 5
127.0.0.1:6379> expire company_name 600
(integer) 1
127.0.0.1:6379> expire news 600
(integer) 1
127.0.0.1:6379> ttl company_name
(integer) 588
127.0.0.1:6379> ttl news
(integer) 592
127.0.0.1:6379> smembers company_name
1) "name4"
2) "name3"
3) "name2"
4) "name1"
5) "nameN"
127.0.0.1:6379> smembers news
1) "news4"
2) "news1"
3) "news3"
4) "news2"
5) "newsN"
127.0.0.1:6379>

Lists

127.0.0.1:6379> lpush company_name name1 name2 name3 nameN
(integer) 4
127.0.0.1:6379> lrange company_name 0 -1
1) "nameN"
2) "name3"
3) "name2"
4) "name1"
127.0.0.1:6379> lpush news news1 news2 news3 newsN
(integer) 4
127.0.0.1:6379> lrange news 0 -1
1) "newsN"
2) "news3"
3) "news2"
4) "news1"
127.0.0.1:6379> expire news 15
(integer) 1
127.0.0.1:6379> expire company_name 15
(integer) 1
127.0.0.1:6379> ttl news
(integer) 6
127.0.0.1:6379> ttl company_name
(integer) 8
127.0.0.1:6379> ttl news
(integer) -2
127.0.0.1:6379> lrange news 0 -1
(empty list or set)
127.0.0.1:6379>

关于python - 如何使用 Python 在 Redis 缓存中设置由同一列名下的多行组成的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62002644/

相关文章:

amazon-web-services - 是否可以删除 AWS ElastiCache redis 集群上的所有键?

javascript - JS 对抗缓存页面

php - PHP对象缓存性能

python - 字符串格式内部的字符串格式化

python - Python 中的元类是什么?

java - 如何更改 JCS cache.ccf 文件的路径?

amazon-web-services - 用于 Redis 引擎 CPU 利用率指标的 AWS ElastiCache,如何解释?

node.js - 在特定时间向用户发送多个通知

python - 从字符串中删除所有换行符

python PIL 砍掉了我的draw.text 的顶部