对于实时性要求不高的业务,如操作日志,业务跟进等,可以采用先把数据存到缓存,当达到一定数量时批量插入的方案。这样减少与存储服务的交互,提高系统性能。
在实际使用过程中发现存在线程安全问题,这里采用redis列表实现该方案,规避线程安全,并且适用于分布式环境中使用。
redis列表官方只提供了单个加入单个取出的功能,所以需要自己包装下取出多个的功能,采用lrange+ltrim实现取出多个
--下面是业务实现
String redislogkey = "logqueue";
RedisHolder.getRedisClient().inQueue(redislogkey, infolog, InfoOperationLog.class); //首先加入列表
Long length = RedisHolder.getRedisClient().lenQueue(redislogkey);
if(length>20){
List<A> loglist = RedisHolder.getRedisClient().outQueue(redislogkey, 30, A.class);//判断长度 一次性取出30 防止这段时间里有插入记录
--业务代码--将数据存到响应的存储业务
}
网友评论