redis实战读后感(四)-数据安全与性能保障

1快照持久化(损失一部分数据)

可以创建快照来获取存储在内存里面的数据在某个时间点的副本。

BGSAVE:额外的子进程完成写入

SAVE:期间不在响应任何其他命令

save 60 10000:周期自动保存快照BGSAVE

SHUTDOWN or TERM信号:save后关闭

'''conn:redis连接, path:日志路径, callback:行处理回调函数 '''
def process_logs(conn, path,  callback):
	current_file, offset = conn.mget(
		'progress:file', 'progress::posipion')
	pipe = conn.pipeline()
	
	def update_progress():
		pipe.mset({
		'progress:file' : fname,
		'progress:position' : offset
		})
		pipe.execute()
		
	for fname in sorted(os.listdir(path)):
		if fname < current_file:
			continue
		inp = open(os.path.join(path, fname), 'rb')
		#继续处理上次读的日志,后面有新的日志可以从断点处重新读取
		if fname == current_file:
			#偏移到指定行号
			inp.seek(int(offset, 10))
		else:
			offset = 0
		current_file = None
		#枚举文件返回行号和行数据
		for lno, line in enumerate(inp):
			#处理每一行的日志,恢复到数据库
			callback(pipe, line)
			offset += int(offset) + len(line)
			if not(lno+1) % 1000:
				#每当处理一个1000行保存进度
				update_progress()
		#每当处理一个文件保存下进度
		update_progress()
		inp.close()

AOF持久化:

会将被执行的写命令写到文件末尾,以此来记录数据发生的变化。

为了兼顾数据安全和写入性能,用户可以考虑使用appendfsync everysec选项,让Redis以每秒一次的频率对AOF文件进行同步

复制:

配置slaveof host port再启动就从主服务器上复制,通过slaveof no one终止复制


从服务器进行同步时,会清空自己的所有数据。

错误:Redis不支持主主复制。

事务:

如上架商品和购买商品



在用户使用watch命令对键进行监控之后,指导用户执行exec之前的这段时间内,如果监控的对象进行了替换更新删除等操作,那么执行exec的时候,会返回watcherror错误。




使用pipeline减少通信往返的时间损耗

redis-benchmark -c 1 -q#测试服务器上性能特征


猜你喜欢

转载自blog.csdn.net/sf131097/article/details/79589355