python 的 redis 库,连接池怎么用

2025-04-16 03:27:47
推荐回答(2个)
回答1:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import redis

host = r'localhost'
port = 6379
POOL = redis.ConnectionPool(host=host, port=port, db=0)
my_server = redis.Redis(connection_pool=POOL)


def read_in_data(file_name):
    data = []
    with open(file_name, 'r') as f:
        for line in f:
            line = line.strip()
            data.append(line.split(','))
    return data


def write_data_to_redis(data):
    my_server.set('counter', 0)
    for items in data:
        my_server.incr('counter')
        for item in items:
            my_server.rpush(items[0], item)


def get_data_from_redis():
    keys = my_server.keys()
    for key in keys:
        data_type = my_server.type(key)
        if data_type == 'list':
            val = my_server.lrange(key, 0, -1)
        elif data_type == 'string':
            val = my_server.get(key)
        print "%s:%s" % (key, val)


if __name__ == '__main__':
    fileName = r'/Users/qinchuanqing/Code/workspace/IMP/installation/storage/NeSchedule.txt'
    data = read_in_data(fileName)
    write_data_to_redis(data)
    print 'all data items number is %s' % my_server.get('counter')
    print my_server.keys()
    print get_data_from_redis()

回答2:

Redis 的连接池是多线程安全的、多进程安全的、自动重连的。

你扔 flask.g 之类的全局的地方当然也行,反正 Redis 总是会使用连接池(不指定它每次就用一个新的)。显式指定连接池的话差异不大,反正你总是要手动在某个全局的地方存一样东西(连接池对象或者 Redis 对象)。