···11import fs from 'fs';
2233import { codePointToEmoji, emojiToCodePoint, lowercaseObject } from './helpers.js';
44-import logger from './logger.js';
54import { Emoji, EmojiVariationSequence } from './types.js';
6576// Load and parse normalization data
+3-17
packages/backend/src/lib/emojiStats.ts
···9292 await redis.incr(POSTS_WITHOUT_EMOJIS);
9393 totalPostsWithoutEmojis.inc();
9494 } else {
9595- // Start of Selection
9696- const transaction = redis.multi();
9797- transaction.incr('postsWithEmojis');
9898-9999- for (const emoji of normalizedEmojis) {
100100- transaction.zIncrBy('emojiStats', 1, emoji);
101101- transaction.incr('processedEmojis');
102102- }
103103-104104- for (const emoji of normalizedEmojis) {
105105- for (const lang of langs) {
106106- transaction.zIncrBy(lang, 1, emoji);
107107- transaction.zIncrBy('languageStats', 1, lang);
108108- }
109109- }
110110-111111- await transaction.exec();
9595+ await redis.evalSha(SCRIPT_SHA, {
9696+ arguments: [JSON.stringify(normalizedEmojis), JSON.stringify(Array.from(langs))],
9797+ });
1129811399 incrementTotalEmojis(normalizedEmojis.length);
114100 totalPostsWithEmojis.inc();
+2-2
packages/backend/src/lib/lua/incrementEmojis.lua
···1010end
11111212-- Increment per-language emoji counts and global language stats
1313-for _, lang in ipairs(langs) do
1414- for _, emoji in ipairs(emojis) do
1313+for _, emoji in ipairs(emojis) do
1414+ for _, lang in ipairs(langs) do
1515 redis.call('ZINCRBY', lang, 1, emoji) -- langKey being pt, ja, unknown, etc.
1616 redis.call('ZINCRBY', 'languageStats', 1, lang) -- languageStats is the counter for per-language emoji count
1717 end