From 2106c5c2873264d9e5eb740e056a60e8764546ca Mon Sep 17 00:00:00 2001 From: zzh Date: Thu, 14 May 2026 11:39:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0redis=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E5=92=8C=E6=9C=AC=E5=9C=B0=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- redis-sync.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ server/data.db | Bin 12537856 -> 12599296 bytes 2 files changed, 44 insertions(+) create mode 100644 redis-sync.py diff --git a/redis-sync.py b/redis-sync.py new file mode 100644 index 0000000..30e327d --- /dev/null +++ b/redis-sync.py @@ -0,0 +1,44 @@ +import redis + +# 本地 Redis +src = redis.Redis(host='localhost', port=6379, password='Zzh08165511', db=0, decode_responses=False) + +# 远程 Redis +dst = redis.Redis(host='175.24.177.96', port=6379, password='Zzh08165511', db=0, decode_responses=False) + +src_count = src.dbsize() +dst_count = dst.dbsize() +print(f"本地: {src_count} keys") +print(f"远程: {dst_count} keys") +print(f"需同步: {src_count - dst_count} keys") +print("") + +# 获取所有本地 key +keys = src.keys() +total = len(keys) +synced = 0 +updated = 0 + +for key in keys: + try: + data = src.dump(key) + if data: + ttl = src.ttl(key) + if ttl < 0: + ttl = 0 + # 检查远程是否已有此 key + exists = dst.exists(key) + dst.restore(key, ttl * 1000, data, replace=True) + if exists: + updated += 1 + else: + synced += 1 + if (synced + updated) % 100 == 0: + print(f"进度: {synced + updated}/{total}") + except Exception as e: + print(f"同步失败 {key}: {e}") + +print(f"\n同步完成!") +print(f"新增: {synced} keys") +print(f"更新: {updated} keys") +print(f"远程现有: {dst.dbsize()} keys") diff --git a/server/data.db b/server/data.db index f63767c5a327645895adfab2b440165725c7c76d..64ea6377090e98561020b70990adcc79d36939e5 100644 GIT binary patch delta 4906 zcmb`KeNYo;9>Qp zd@{Sw^ZZ_(eSXjH`8~}SpJX*Rx0t&YyQ@-humzfGqdYZlfSRv+ldLSv@w0sgJu z+rG0svOTmth%Nupaln>seOzKNZocfeerdvVa*_KsLw$xxfnYz$`Eu zNV5504tNI41@pjsumIRW0ayqYfyLliummgx%K!nEgXh5WU&2AjZ-!7HE=yb3mhEx-k~f^Fa@U^{pX z>;P3@C#VKBU>A5D)Pmi>4eG#8!5d%?coX~#{2crO{1W^Mc)(kL0`AYB3UqD?&<)Oj_kjpL0B6C6;2by~dt{5w?jo$l`-bdsb4~W? zOqV&sct7Lu?BQ9tdEZ!Fx&GWj>sL~sju>P2d!n_L*uy;~^NoFFUpkDjhXc_Lqj+R6 zx-sUw7`$%xw%%7k4wIM5GpTSl%`)@hrW(OX>G1N(Osmq8Q z+f-t)@7Q7L*e_7^KBj@?D9+1xLg8T0$1=Q!XS@N<%lcSKU<2G!x~>1*T0^5?vb6v~8}dt#wtq zJ?`y0UAx_tJ9o)5D?V-_<;6bHl(g91a7YOFXI$(Vx~>06UF;=t=*%#j5cdbk7qit~ zWvSJ-|7EEoDNC*U;QH0Q5O0r;esOlPH=44#EIzpZDKRnDJ(MCf6%ffT!`7n(UJ zl6)LH-=E^+)1zg>RJh22tP3Eg7D`T<4F$sjLu=Fc|3*|>L9xYNQDN$QJt?9Dp5j83 zS4tTnH4Et5tdCM-M-CnR5GgwlVmL^yjR;LaB@YnQHEyE1uBuAey2=W!$M=pOyW}7e zyBzP=;%y_^guU2ydjouvvfq+5jNiB&Z}0#6oew8&^^FbO{kFMf;$GLptzkUGW0xjA zYsJI3z3;+g+v)ME9hyqY9|&`Tc%g|bSm_P(Ji~bt>eZMi++6*pZX1g?c=B0sFHJ6r z@Qe=*(MT@5pa?0Gi68rPqNRK6{b6_$AM71#k2y#0oKyO8u9;6#;nBWM ziXLfhAH4%@>Lznai8WKo>f*&9xq#A-pBU_ocb zNPBQJe&>{=oeDKN<%Mftcqip!A?Q5FcpE7}ys@8L`j!@pg^EG#-HD`3BV#(f(&GDk zx*(+lf$}y=_LVfLNWQkarh4q+9oU^b+d6uCDBdnk^jr~l9VX|AM=5fSxGzN77R{Ul z#TMkz6*KqCb1ya+ObevL@fnlYKM>t2{;5Cu=iaWep{}SgKW1!>e!on9T#OPn*L>2D z_jTThTxZTu&db@KXXjfQ%}>lHC2`&y@mE;v&QeoL4$INZA(lSmVYveV*2{!EG-5#A z7;0l)W@1xpuioO?Lrfb_)KqInswz{&hC*RRR#(ifwb)BwE-PU!qO->Zrdi9F*%}u} zZ%gss!v%_4R<5zwH|#LA)M#_lj%}0-9_gHp1ZdT$zE4+9^l4nld0co1Lk^o3MU)eRvPHwhc6qxvqL{ygI}NA)AqIEwB_xkhq_y~<^9L>KcZ}YD>yzo06~htv_>uR9K7{nbMUvLy);+6XdY!3# zXVM|2WN za(xt$h0+yAUY?;@!Q*57tdO?w8NJst-hBmCPkiLEra2)+Q%xaad$rrO%~h*q!!?O| zc;eP&sUH6Lld&_`-_RrvQoLMNrxjhNr020yUGa|2$==q9tCtmdOrnlnA+ zsV&y;j+Z+u_R><*yK|F5KoyxL@UOHBuMU@M7v;vn(&CXI>98ca`6L?A3kjg#HYTBG(2RSknd@;Rgk`5;Lb8oJ_y6sSWUDr`>k#0?iGFWYJst=m0N$M)3y|2ts8!%OOc*49drBl0T b*^TvL3q{VA>y7143&mWeXt>-J%~$y^JPca} delta 959 zcmZwF$5Rsl7{=kc7vOg({Fu;fum>?k)W~3n<7Fdx1 z8#=q)U`KcKKu=_%7qXCz-spoI^hH1P#{lGFAO>MDhF~a$ArB4=#|Su)4;KpH#z+*R z2*ntM(HMiV7>DtgfQcxOvN-z#|)IhgPAD9EO;>+b1)b4FdyYufQ6{QA}mHF zmY@ntu?)+x0xPi!tFZ=au@3980UNOio3RC3u?^d?13R$`yWztg?8QFp#{nEfH4fo0 zj^HSc;W%n=0<}<3hm)wsDV)X`_;D5ioWprsz(ribWdsqz6`+`vuT!fo8q zld@(FIx_^f(cB@Gn?orc$tboPf7@b$+g4-!VfkW>MXE*rb4&4*c0-}+s`ng3b@yDVX?&2OA5k?d4;{hI`8ISN7 oPw*5Gw4fDHwBZ?^;{{&g6<*^Fbi73j@9-WU@KKLNKb3|50jpTJoB#j-