Python 操作 redis 时,由于 redis 实例线程安全,所以我使用了两种方式:
(1).直接做全局变量,如下:
R = redis.Redis()
# 导入到多个需要使用 redis 的模块中,直接使用,如:
R.get('name')
(2).连接池,如下:
class mRedis(object):
def __init__(self, db=0):
self.db = db
self.redis_pool = redis.ConnectionPool(host=settings.redis_svr_addr,
port=settings.redis_svr_addr_port,
db=self.db,
password=settings.redis_svr_pass)
def getR(self):
return redis.Redis(connection_pool=self.redis_pool)
# 实例化直接使用
myredis = mRedis(db=0).getR()
但是在使用过程中,产生了大量 CLOSE_WAIT.,一大屏幕,如下:
tcp 1 0 127.0.0.1:62286 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:15153 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:14972 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:15134 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:15030 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:62486 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:15097 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:4912 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:14517 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:15155 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:59812 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:15031 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:15121 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:14812 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:59806 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:14813 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:14928 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:63476 127.0.0.1:6379 CLOSE_WAIT
tcp 1 0 127.0.0.1:15048 127.0.0.1:6379 CLOSE_WAIT
其中 redis.conf 设置 timeout 200
而且时常会出现 redis 连接超时的问题,导致 tornado 一直阻塞请求,看了下带宽,负载,CPU,内存都比较正常,暂时找不到原因,不知道是 redis 使用方面出了什么问题?求指点!!:-D
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.