Redis + Tomact + Oracle 实现日志记录
业务背景:
最近接手一个电商App的项目,使用Oracle作为数据库。其日志记录是直接操作数据库的。当并发量大时候,就容易出现性能问题;数据库还存在其他电商使用的表,当日志插入导致数据库性能变差时,会影响到其他表使用,所以我就想着用现在流行的非关系型数据库Redis作为日志数据库。
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis 的优势:
1.性能极高:Redis能读的速度是110000次/s, 写的速度是81000次/s 。
2.丰富的数据类型:Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
3.原子:Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
4.丰富的特性:Redis还支持 publish/subscribe, 通知, key 过期等等特性。
但是领导要求日志要存回数据库中去,所以我增加了定时同步日志这功能。因为没有找到Oracle与Redis同步的工具,所以只能利用定时器去定时执行同步操作。貌似MySQL和Redis有同步的工具的。
设计思路:
1. Java作为编程语言(只会Java...);
2. 首先将日志信息插入到Redis数据中,按天存储,选用Hash数据类型记录日志信息,两层数据结构。
3. 使用定时器去将前一天的日志记录插入Oracle,定时器挂在Tomact下。
日志插入流程图: