本文目录导读:

的Python方案:
使用Redis批量更新
import redis
import json
class RedisCacheUpdater:
def __init__(self, host='localhost', port=6379, db=0):
self.client = redis.Redis(host=host, port=port, db=db, decode_responses=True)
def batch_update_by_keys(self, updates_dict):
"""
批量更新指定key的值
:param updates_dict: {key: new_value} 格式的字典
"""
pipeline = self.client.pipeline()
for key, value in updates_dict.items():
pipeline.set(key, json.dumps(value) if isinstance(value, (dict, list)) else value)
pipeline.execute()
print(f"成功更新 {len(updates_dict)} 个缓存项")
def batch_update_by_pattern(self, pattern, transform_func):
"""
根据模式匹配批量更新
:param pattern: key匹配模式,如 "user:*"
:param transform_func: 转换函数,接收旧值返回新值
"""
cursor = 0
updated = 0
while True:
cursor, keys = self.client.scan(cursor, match=pattern, count=100)
pipeline = self.client.pipeline()
for key in keys:
old_value = self.client.get(key)
if old_value:
try:
old_value = json.loads(old_value)
except:
pass
new_value = transform_func(key, old_value)
pipeline.set(key, json.dumps(new_value) if isinstance(new_value, (dict, list)) else new_value)
updated += 1
if pipeline:
pipeline.execute()
if cursor == 0:
break
print(f"根据模式 '{pattern}' 更新了 {updated} 个缓存项")
# 使用示例
updater = RedisCacheUpdater()
# 示例1:直接批量更新指定keys
updates = {
"user:1": {"name": "张三", "status": "active"},
"user:2": {"name": "李四", "status": "active"},
"config:app": {"version": "2.0", "maintenance": False}
}
updater.batch_update_by_keys(updates)
# 示例2:根据模式批量更新
def update_user_status(key, old_value):
if isinstance(old_value, dict):
old_value["status"] = "active"
old_value["updated_at"] = "2024-01-01"
return old_value
updater.batch_update_by_pattern("user:*", update_user_status)
使用文件缓存批量更新
import os
import json
from pathlib import Path
import shutil
class FileCacheUpdater:
def __init__(self, cache_dir):
self.cache_dir = Path(cache_dir)
self.cache_dir.mkdir(parents=True, exist_ok=True)
def batch_update_from_dict(self, updates_dict):
"""
从字典批量更新缓存文件
:param updates_dict: {cache_name: content} 格式
"""
for cache_name, content in updates_dict.items():
cache_file = self.cache_dir / f"{cache_name}.json"
with open(cache_file, 'w', encoding='utf-8') as f:
json.dump(content, f, ensure_ascii=False, indent=2)
print(f"成功更新 {len(updates_dict)} 个缓存文件")
def batch_update_by_modification(self, source_dir, pattern="*.json"):
"""
从源目录批量更新缓存
:param source_dir: 源文件目录
:param pattern: 文件匹配模式
"""
source_path = Path(source_dir)
for file_path in source_path.glob(pattern):
# 读取新的缓存内容
with open(file_path, 'r', encoding='utf-8') as f:
content = json.load(f)
# 写入缓存目录
dest_file = self.cache_dir / file_path.name
with open(dest_file, 'w', encoding='utf-8') as f:
json.dump(content, f, ensure_ascii=False, indent=2)
print(f"从 {source_dir} 更新了缓存文件")
def batch_delete(self, patterns_or_keys):
"""
批量删除缓存
:param patterns_or_keys: 文件名列表或模式
"""
for item in patterns_or_keys:
for file_path in self.cache_dir.glob(item):
file_path.unlink()
print(f"删除缓存: {file_path.name}")
# 使用示例
updater = FileCacheUpdater("./cache")
# 示例1:直接更新多个缓存
updates = {
"user_profile": {"name": "张三", "age": 30},
"app_config": {"version": "2.0", "features": ["a", "b"]},
"temp_data": [1, 2, 3, 4]
}
updater.batch_update_from_dict(updates)
# 示例2:从源目录批量更新
updater.batch_update_by_modification("./new_cache_data")
# 示例3:批量删除过期缓存
updater.batch_delete(["temp_*", "session_*"])
使用内存字典缓存批量更新
import time
import threading
from datetime import datetime
class InMemoryCacheUpdater:
def __init__(self):
self._cache = {}
self._expiry = {}
self._lock = threading.Lock()
def batch_update(self, items, ttl=None):
"""
批量更新缓存
:param items: {key: value} 格式
:param ttl: 过期时间(秒)
"""
with self._lock:
expire_time = time.time() + ttl if ttl else None
for key, value in items.items():
self._cache[key] = value
if expire_time:
self._expiry[key] = expire_time
print(f"批量更新 {len(items)} 个缓存项")
def batch_update_with_condition(self, condition_func, transform_func):
"""
根据条件批量更新
:param condition_func: 条件函数,接收(key, value)返回布尔值
:param transform_func: 转换函数,接收(key, value)返回新value
"""
with self._lock:
updated = 0
keys_to_update = []
for key, value in self._cache.items():
if condition_func(key, value):
keys_to_update.append(key)
for key in keys_to_update:
old_value = self._cache[key]
new_value = transform_func(key, old_value)
self._cache[key] = new_value
updated += 1
print(f"根据条件更新了 {updated} 个缓存项")
def batch_delete_expired(self):
"""批量删除过期缓存"""
with self._lock:
now = time.time()
expired_keys = [
key for key, expire_time in self._expiry.items()
if expire_time <= now
]
for key in expired_keys:
del self._cache[key]
del self._expiry[key]
if expired_keys:
print(f"清理了 {len(expired_keys)} 个过期缓存项")
return expired_keys
def get_all(self):
"""获取所有缓存"""
with self._lock:
return dict(self._cache)
# 使用示例
cache = InMemoryCacheUpdater()
# 示例1:批量更新
cache.batch_update({
"user:1": {"name": "张三", "role": "admin"},
"user:2": {"name": "李四", "role": "user"},
"config": {"theme": "dark", "language": "zh"}
}, ttl=3600)
# 示例2:根据条件批量更新
def is_admin(key, value):
return isinstance(value, dict) and value.get("role") == "admin"
def update_admin_role(key, value):
value["permissions"] = ["read", "write", "delete"]
return value
cache.batch_update_with_condition(is_admin, update_admin_role)
混合缓存系统批量更新
class HybridCacheUpdater:
"""支持多层级缓存批量更新"""
def __init__(self):
self.cache_layers = []
def add_cache_layer(self, cache_obj, name):
"""添加缓存层"""
self.cache_layers.append({"obj": cache_obj, "name": name})
def batch_update_all_layers(self, updates_dict):
"""
在所有缓存层批量更新
"""
for layer in self.cache_layers:
print(f"更新缓存层: {layer['name']}")
layer['obj'].batch_update(updates_dict)
def batch_update_selected_layers(self, updates_dict, layer_names):
"""
在指定缓存层批量更新
"""
for layer in self.cache_layers:
if layer['name'] in layer_names:
print(f"更新缓存层: {layer['name']}")
layer['obj'].batch_update(updates_dict)
# 使用示例
# 创建各种缓存实例
redis_cache = RedisCacheUpdater()
file_cache = FileCacheUpdater("./cache")
memory_cache = InMemoryCacheUpdater()
# 组合成混合缓存
hybrid = HybridCacheUpdater()
hybrid.add_cache_layer(redis_cache, "redis")
hybrid.add_cache_layer(file_cache, "file")
hybrid.add_cache_layer(memory_cache, "memory")
# 批量更新所有缓存层
updates = {
"common:config": {"version": "3.0", "updated": True}
}
hybrid.batch_update_all_layers(updates)
配置文件批量更新
import configparser
import yaml
class ConfigCacheUpdater:
"""批量更新配置文件缓存"""
@staticmethod
def update_ini_config(config_file, updates):
"""
更新INI配置文件
:param config_file: 配置文件路径
:param updates: {section: {option: value}} 格式
"""
config = configparser.ConfigParser()
config.read(config_file, encoding='utf-8')
for section, options in updates.items():
if not config.has_section(section):
config.add_section(section)
for option, value in options.items():
config.set(section, option, str(value))
with open(config_file, 'w', encoding='utf-8') as f:
config.write(f)
print(f"INI配置文件 {config_file} 已更新 {len(updates)} 个节")
@staticmethod
def update_yaml_config(config_file, updates):
"""
更新YAML配置文件
:param updates: 嵌套字典格式的更新内容
"""
def deep_update(original, updates):
for key, value in updates.items():
if isinstance(value, dict) and key in original:
original[key] = deep_update(original.get(key, {}), value)
else:
original[key] = value
return original
with open(config_file, 'r', encoding='utf-8') as f:
config = yaml.safe_load(f)
config = deep_update(config, updates)
with open(config_file, 'w', encoding='utf-8') as f:
yaml.dump(config, f, default_flow_style=False, allow_unicode=True)
print(f"YAML配置文件 {config_file} 已更新")
# 使用示例
updater = ConfigCacheUpdater()
# 更新INI配置
updater.update_ini_config("config.ini", {
"database": {"host": "localhost", "port": "3306"},
"cache": {"ttl": "3600", "size": "100MB"}
})
# 更新YAML配置
updater.update_yaml_config("config.yaml", {
"server": {
"host": "0.0.0.0",
"port": 8080
},
"database": {
"pool_size": 10
}
})
这些方案覆盖了常见的缓存更新场景,可以根据实际需求选择合适的方案,需要我详细解释某个方案或提供更多定制化的批量更新逻辑吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播