提醒 涉及資料庫這類的東西一定需要注意長短鏈結問題

2021-09-04 05:26:58 字數 2654 閱讀 5647

昨天下午有同事反映運維平台許可權加上去後,但實際沒生效,當時簡單瞧了一下資料庫生效了,但redis沒同步,許可權新增到mysql然後會同刷一次redis。沒刷成功,當時由於在忙ansible api的一些東西,沒急著弄。

class permission(dbbase):

'''許可權認證類操作'''

def __init__(self):

"""許可權認證類

:rtype: object

"""super(permission, self).__init__()

self.session_name = conf.session_name

.....

需要注意的是這裡並沒有走繼承方法,而是會每次都初始化,當時想的是要繼承兩個類,所以用實際方法寫,這個先不管。有問題後面再改。

class dbbase(object):

'''資料庫基類操作'''

def __init__(self):

self.mysql = db.mysql() # instance mysql object

self.redis = db.redis() # instance redis object

'''call mysql object methods'''

self._db_write = self.mysql.write

self._db_fetchone = self.mysql.fetchone

self._db_fetchall = self.mysql.fetchall

'''redis users session key'''

self.session_key = "----"

class redis():

def __init__(self):

parmas =

# 改一下方法, ttl一直獲取為-2

self.cursor = redis.redis(**parmas)

class redis(strictredis):

"""provides backwards compatibility with older versions of redis-py that

changed arguments to some commands to be more pythonic, sane, or by

accident.

"""

看到長連線引數socket_keepalive,看看**。

class strictredis(object):

def __init__(self, host='localhost', port=6379,

db=0, password=none, socket_timeout=none,

socket_connect_timeout=none,

socket_keepalive=none, socket_keepalive_options=none,

connection_pool=none, unix_socket_path=none,

encoding='utf-8', encoding_errors='strict',

charset=none, errors=none,

decode_responses=false, retry_on_timeout=false,

ssl=false, ssl_keyfile=none, ssl_certfile=none,

ssl_cert_reqs=none, ssl_ca_certs=none,

max_connections=none):

最終定位到此方法,預設走的是短鏈結

# tcp_keepalive

if self.socket_keepalive:

sock.setsockopt(socket.sol_socket, socket.so_keepalive, 1)

for k, v in iteritems(self.socket_keepalive_options):

sock.setsockopt(socket.sol_tcp, k, v)

有可能是長短鏈結的問題,鏈結失效後再呼叫會出問題。

**有注釋

'''redis db object'''

class redis():

def __init__(self):

# 這裡的 socket_keepalive是為長鏈結,因為後面會很多

# 子類繼承這個類,為保持連線的長久性

parmas =

# 改一下方法, ttl一直獲取為-2

self.cursor = redis.redis(**parmas)

更新**許可權操作重新初始化self.redis物件。繼續測試。

關於資料庫insert是否一定開闢空間的研究

之前就知道delete 屬於dml 而 turncate屬於ddl所以delete的時候不會清楚表空間而truncate會清除表空間。現在比較好奇的是如果我資料庫主鍵id自增我插入了3條資料id分別為1,2,3,然後把第二條刪了,再insert乙個id 2的,那麼是否會開闢新的空間。查詢表大小的語句...

bos 獲取資料庫連線 BOS生態 一定可期

隨著行業數位化的不斷深入,讓擁有沉甸甸家底的行業都意識到了未來會有更多有價值的資源儲藏在海量的資料之中,從不久前國家宣布率先開始5g大規模商用到剛剛過去的華為鴻蒙系統的發布,無不與數位化存在著很深的關係。如今移動網際網路 雲計算 大資料 物聯網等新一代資訊科技飛速在迭代,已經與經濟社會各領域緊密的融...

關係型資料庫通過破壞一定的業務邏輯來換取效能的理解

簡單的來說就是,當乙個表裡面的資料太多的時候進行crud 增刪改查 的效率都會降低,在關係型資料庫裡我們常常通過以下幾種方法來通過破壞一定的業務邏輯來換取效能 水平切分 垂直切分 讀寫分離 水平切分就是就通過切割行,將一張表分割成多張表來提公升性 解釋 1張表裡面有十萬條資料,我們通過水平切割,將其...