環境準備
準備好ubntu18.04虛擬機,並且安裝redis,pyton等環境。
環境準備
概念
本示例採用單例模式,創建redis連接池。這樣可以在應用程序的任何地方使用相同的連接池,節省系統開銷
程序示例
'''
使用單例模式創建redis 鏈接池
'''
from redis import ConnectionPool
import threading
import time
class redis_pool(object):
_instance_lock = threading.Lock()
pool = ConnectionPool(host='localhost', port=6379, db=0)
def __init__(self):
time.sleep(1)
@classmethod
def instance(cls, *args, **kwargs):
if not hasattr(redis_pool, "_instance"):
with redis_pool._instance_lock:
if not hasattr(redis_pool, "_instance"):
redis_pool._instance = redis_pool(*args, **kwargs)
return redis_pool._instance
if __name__ == "__main__":
def task(arg):
obj = redis_pool.instance()
print(obj)
print(obj.pool)
for i in range(10):
t = threading.Thread(target=task,args=[i,])
t.start()
time.sleep(2)
print('end')
obj = redis_pool.instance()
print(obj)
print(obj.pool)
運行結果
<__main__.redis_pool object at 0x7fdf6c0467f0>
ConnectionPool<Connection<host=localhost,port=6379,db=0>>
<__main__.redis_pool object at 0x7fdf6c0467f0>
ConnectionPool<Connection<host=localhost,port=6379,db=0>>
<__main__.redis_pool object at 0x7fdf6c0467f0>
ConnectionPool<Connection<host=localhost,port=6379,db=0>>
<__main__.redis_pool object at 0x7fdf6c0467f0>
ConnectionPool<Connection<host=localhost,port=6379,db=0>>
<__main__.redis_pool object at 0x7fdf6c0467f0>
ConnectionPool<Connection<host=localhost,port=6379,db=0>>
<__main__.redis_pool object at 0x7fdf6c0467f0>
ConnectionPool<Connection<host=localhost,port=6379,db=0>>
<__main__.redis_pool object at 0x7fdf6c0467f0>
ConnectionPool<Connection<host=localhost,port=6379,db=0>>
<__main__.redis_pool object at 0x7fdf6c0467f0>
ConnectionPool<Connection<host=localhost,port=6379,db=0>>
<__main__.redis_pool object at 0x7fdf6c0467f0>
ConnectionPool<Connection<host=localhost,port=6379,db=0>>
<__main__.redis_pool object at 0x7fdf6c0467f0>
ConnectionPool<Connection<host=localhost,port=6379,db=0>>