今天需要优化单本书的阅读动态,逻辑就是:当用户在新增动态,修改动态的状态,删除动态时都要通过触发器将缓存清除,程序里先从Redis里取数据,如果不存在,则从数据库里查询数据并缓存到Redis。
// 触发器设置:
kid_book_comment_after_insert
IF new.status=0 THEN
SET v_ret = redis_command_v2('DEL', CONCAT('PCWeb:UserReadingBookRecord:',new.book_id));
END IF;
kid_book_comment_after_update
IF new.status<>old.status THEN
SET v_ret = redis_command_v2('DEL', CONCAT('PCWeb:UserReadingBookRecord:',new.book_id));
END IF;
kid_book_comment_after_delete
IF old.status=0 THEN
SET v_ret = redis_command_v2('DEL', CONCAT('PCWeb:UserReadingBookRecord:',old.book_id));
END IF;
// Java程序修改:
public List<UserReadingRecord> getUserReadingBookRecord(int bookId) {
return JsonUtil.fromJsonAsList(RedisUtil.getValue(redisService.getRedis(), String.format("PCWeb:UserReadingBookRecord:%d", bookId), () -> JsonUtil.toJson(dealChildInfoAndTime(websiteMapper.getUserReadingBookRecord(bookId)))),UserReadingRecord.class);
}