Spamer & Redis
Привет, Ридис, ты когда-нибудь задумывался о том, чтобы сложить кучу шуток в хеш, чтобы я мог моментально вытащить одну для розыгрыша? Нужен быстрый, надежный запас – как будто шуточный кэш. Поможешь настроить?
Конечно. Просто воспринимай шутки как пары ключ-значение в хеш-таблице.
Создай ключ, например `jokes`, и добавляй каждую шутку с идентификатором или коротким пояснением.
HSET jokes 1 "Почему курица перешла дорогу? Чтобы попасть на другую сторону."
HSET jokes 2 "Я сказал своему компьютеру, что мне нужен перерыв, а он сказал, что ему нужен кэш."
HSET jokes 3 "Почему программисты предпочитают темный режим? Потому что свет привлекает баги."
Теперь можешь выбрать случайную шутку так:
LRANDJOKE=$(HGET jokes $((RANDOM % 3 + 1)))
echo $LRANDJOKE
Или, если тебе нужен действительно случайный выбор каждый раз, можешь хранить идентификаторы в списке и использовать `LRANGE`:
LPUSH joke_ids 1 2 3
# Выбери случайный идентификатор
randid=$(LRANGE joke_ids $((RANDOM % 3)) $((RANDOM % 3)))
HGET jokes $randid
Всё, получился быстрый и надёжный запас шуток, которые можно мгновенно достать. Хочешь добавить ещё – просто продолжай добавлять в хеш и список. Веселых розыгрышей.
Круто! Шутки теперь наготове, как только нужно – сразу подкину смех. Хочешь чего-то совсем непредсказуемого – просто вытащи одну командой `HGET jokes $(HVALS jokes | shuf -n1)` и смотри, как веселье продолжается. Нужны ещё панчи или идея розыгрыша? Слушаю!
Звучит неплохо. Если понадобится ещё, просто добавь ещё пару ключ/значение и увеличь ID. А для новой идеи розыгрыша – как насчёт команды, которая будет возвращать случайную мотивирующую цитату каждый раз, когда кто-то пингует сервер? Типа бот-подбадриватель – интересно, получат они шутку или урок жизни. Или можно настроить ключ, который будет переключаться между шуткой и предупреждением, когда будет достигнут определённый порог запросов. Поддерживает хаос ненавязчиво, но эффективно. Если хочешь, могу скинуть скрипт.
Зашибись! Давай скрипт, короче. Сделаем так, чтобы на сервере каждый день были мотивирующие речи и предупреждения про приколы. Интересно будет посмотреть, как народ подпрыгнет, когда шутки выскочат!
Вот небольшой Lua-скрипт, который можно зарегистрировать в Redis и вызывать одной командой.
Он выбирает случайный элемент из хеша `jokes`, случайную цитату из хеша `quotes` и случайное предупреждение из списка `warnings`, а затем возвращает отформатированное сообщение.
Добавь скрипт, затем просто вызови его.
```bash
# Сохрани это как prank.lua
return {
"Сообщение:",
cjson.encode{
joke = KEYS[1] and redis.call('HGET', KEYS[1], redis.call('RANDOMKEY', KEYS[1])) or nil,
quote = KEYS[2] and redis.call('HGET', KEYS[2], redis.call('RANDOMKEY', KEYS[2])) or nil,
warning= KEYS[3] and redis.call('LPOP', KEYS[3]) or nil
}
}
```
Зарегистрируй скрипт:
```bash
redis-cli SCRIPT LOAD "$(cat prank.lua)"
```
Результатом будет ключ `prank`, который ты можешь вызвать:
```bash
redis-cli EVALSHA <sha> 3 jokes quotes warnings
```
Где `<sha>` – это SHA, полученный из команды LOAD.
При каждом запуске ты получишь разную комбинацию: шутку, мотивирующую цитату и предупреждение, от которого они подпрыгнут.
Если хочешь, чтобы предупреждение циклически повторялось, а не удалялось, замени `LPOP` на `LINDEX` и увеличь индекс, хранящийся в отдельном ключе.
Наслаждайся хаосом.
Понял, запускаем! Сейчас добавлю немного EVALSHA, вкину пару шуток, подбодрю и предупрежу – посмотрим, что выйдет. Готов, когда ты. Сделаем так, чтобы сервер почувствовал себя как неожиданный стендап!