Как установить значения в кеше Redis, состоящем из нескольких строк под одним именем столбца, используя Python - PullRequest
2 голосов
/ 25 мая 2020

Я использую хранилище памяти Google Cloud для сервера Redis. Моя цель - сохранить результаты запроса, поступающие из BigQuery (например, SQL), и получить результаты из Redis для последующего использования. Запрос возвращает около 1000 строк с двумя столбцами, которые я пытаюсь установить, используя client.set.

После того, как значения вместе с ключом установлены, когда я пытаюсь получить, он возвращает мне только последнее значение ключ. Я предполагаю, что это потому, что при попытке установить значения в al oop он перезаписывает предыдущее значение ключа. Как мне решить эту проблему сохранения нескольких значений одного и того же ключа и его извлечения.

Я использовал следующий код:

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()

Пожалуйста, дайте мне знать, как я могу распечатать все ключи и значения, которые установлены

1 Ответ

1 голос
/ 25 мая 2020

Я не знаком с python, но я проверил документацию имена методов такие же. Таким образом, вы можете применить к своему коду следующую структуру.

вот версия redis-cli для sets и lists.

Наборы

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>

Списки

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>
...