В настоящее время работает над требованиями, связанными с ограничением тока, существует такая политика ограничения тока, которая связана с пользователями.При сбое системы неосновному интерфейсу разрешается ограничивать ток в соответствии с процентом пользователей.Это ограничение одна и та же группа пользователей.Если к UUID добавить дату дня, этой проблемы можно избежать.
Таким образом, в этом требовании каждый запрос должен получить текущую дату, но она может быть точной до дня. Ого~, заполните следующий код
Calendar calendar = Calendar.getInstance();
String time = "" + calendar.get(Calendar.YEAR) + calendar.get(Calendar.MONTH) +calendar.get(Calendar.DAY_OF_MONTH);
Это очень просто, не так ли, но после написания его быстро развели бизнес-одноклассники. Работа календаря слишком плохая. В случае высокого QPS это испортит 999 строк интерфейса.
Бизнес с высоким QPS действительно невыносим... (потеряно)
Почему Календарь не работает, потому что экземпляр Календаря должен быть создан для каждого запроса.Этот процесс создания является относительно трудоемким (на это потребление можно не обращать внимания при низком qps), но для базовых компонентов следует рассматривать различные сценарии.
Поскольку мне нужно получить данные только за день, я придумал другое простое решение.
private static final int DAY_MILLIS = 24 * 60 * 60 * 1000;
long day = System.currentTimeMillis() / DAY_MILLIS;
Разделите текущую отметку времени (уровень миллисекунд) на количество миллисекунд в сутках, и в результате получится количество дней, прошедших с 1970 года по сегодняшний день, что полностью соответствует текущим потребностям.
Это решение как раз подходит для этой потребности.Для других более сложных потребностей я рекомендую использовать его здесь.Joda Timeкомпоненты.
Ниже приведен тест производительности для трех вышеперечисленных ситуаций с помощью библиотеки классов JMH Openjdk.Студенты, которые не связывались с JMH, могут учиться на официальном сайте.портал
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@BenchmarkMode(Mode.AverageTime)
public class Main {
static int millis = 24 * 3600 * 1000;
public static void main(String[] args) throws Exception {
Options options = new OptionsBuilder().include(Main.class.getName()).forks(1).build();
new Runner(options).run();
}
@Benchmark
@Threads(5)
public void runCalendar() {
Calendar calendar = Calendar.getInstance();
}
@Benchmark
@Threads(5)
public void runJoda() {
DateTime dateTime = new DateTime();
}
//
@Benchmark
@Threads(5)
public void runSystem() {
long result = System.currentTimeMillis() / millis;
}
}
Прежде чем использовать бенчмарк, вам необходимо ввести связанные зависимости
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>1.21</version>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>1.21</version>
<scope>provided</scope>
</dependency>
Окончательный результат выглядит следующим образом
Это просто для проверки трудоемкости создания объектов Calendar и Joda.Можно обнаружить, что производительность Joda в 10 раз выше, чем у Calendar, что нельзя игнорировать.
Больше интересных вопросов, добро пожаловать на планету знаний 460+ друзей обсуждают