Назовите 16 распространенных сценариев использования Redis за один раз

Java Redis задняя часть

1. Кэш

Тип строки

Например: кеш горячих данных (таких как отчеты, крушение знаменитостей), кеш объектов, полный кеш страниц, который может улучшить доступ к данным горячих данных.

2. Обмен данными и их распространение

Строковый тип, поскольку Redis — это распределенная независимая служба, которую можно использовать для нескольких приложений.

Например: Распределенный сеанс

<dependency> 
 <groupId>org.springframework.session</groupId> 
 <artifactId>spring-session-data-redis</artifactId> 
</dependency>

3. Распределенная блокировка

Метод setnx строкового типа, только если он не существует, он может быть успешно добавлен и возвращает true

public static boolean getLock(String key) {
    Long flag = jedis.setnx(key, "1");
    if (flag == 1) {
        jedis.expire(key, 10);
    }
    return flag == 1;
}

public static void releaseLock(String key) {
    jedis.del(key);
}

4. Глобальный идентификатор

тип int, incrby, использование атомарности

incrby userid 1000

В сценарии подбиблиотеки и подтаблицы берите по одному разделу за раз

5. Счетчик

тип int, метод incr

Например: количество прочитанных статей, количество лайков на Weibo, допустить определенную задержку, сначала записать в Redis, а потом регулярно синхронизировать с базой данных

6. Ограничение тока

тип int, метод incr

С IP-адресом посетителя и другой информацией в качестве ключа счетчик доступа увеличивается на один раз и возвращает false, если количество посещений превышает количество раз.

7. Битовая статистика

Битовый счетчик строкового типа (введение в структуру данных растрового изображения в версии 1.6.6)

Символы хранятся в 8-битном двоичном формате.

set k1 a
setbit k1 6 1
setbit k1 7 0
get k1 
/* 6 7 代表的a的二进制位的修改
a 对应的ASCII码是97,转换为二进制数据是01100001
b 对应的ASCII码是98,转换为二进制数据是01100010

因为bit非常节省空间(1 MB=8388608 bit),可以用来做大数据量的统计。
*/

Например: онлайн-статистика пользователей, сохраненная статистика пользователей.

setbit onlineusers 01 
setbit onlineusers 11 
setbit onlineusers 20

Поддерживает побитовое И, побитовое ИЛИ и т. д.

BITOPANDdestkeykey[key...] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。       
BITOPORdestkeykey[key...] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey 。 
BITOPXORdestkeykey[key...] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey 。 
BITOPNOTdestkeykey ,对给定 key 求逻辑非,并将结果保存到 destkey 。

Подсчитайте пользователей, которые были онлайн в течение 7 дней

BITOP "AND" "7_days_both_online_users" "day_1_online_users" "day_2_online_users" ...  "day_7_online_users"

8. Корзина

Строка или хеш. Все хэши, которые может сделать String, могут сделать

  • ключ: идентификатор пользователя; поле: идентификатор товара; значение: количество товара.
  • +1: намек. -1: hdекр. Удалить: хдел. Выделить все: hgetall. Количество предметов: хлен.

9. Хронология сообщений пользователей

список, двусвязный список, может использоваться непосредственно в качестве временной шкалы. Вставка заказана

10, очередь сообщений

В списке предусмотрены две блокирующие операции всплывающих окон: blpop/brpop, которые могут устанавливать тайм-аут.

  • blpop: blpop key1 timeout удаляет и получает первый элемент списка, если в списке нет элементов, он блокирует список до тех пор, пока не истечет время ожидания или не будет найден элемент, который можно извлечь.
  • brpop: brpop key1 timeout удаляет и получает последний элемент списка, если в списке нет элементов, он блокирует список, пока не истечет время ожидания или не найдет элемент, который можно извлечь.

вышеуказанная операция. По сути, это блокирующая очередь java. Чем больше вещей вы узнаете. Чем ниже стоимость обучения

  • Очередь: первый в первом дивизионе: rpush blpop, левая голова и правый хвост, прямо в очередь, слева вне очереди
  • Стек: FIFO: rpush brpop

11. Удачный розыгрыш

Поставляется со случайным значением

spop myset

12. Лайкните, войдите, зарегистрируйтесь

Если вышеуказанный идентификатор Weibo — t1001, а идентификатор пользователя — u3001

Используйте like:t1001, чтобы поддерживать все лайки Weibo t1001.

  • Понравилось это Weibo: sadd лайк: t1001 u3001
  • В отличие от: srem как: t1001 u3001
  • Нравится или нет: sismember нравится: t1001 u3001
  • Всем пользователям, которым нравится: smembers нравится:t1001
  • Количество лайков: шрам лайк: t1001

Это намного проще, чем база данных.

13. Этикетка продукта

img

Старое правило: используйте tags:i5001 для сохранения всех тегов товара.

  • sadd теги: i5001 Картинка четкая и нежная
  • грустные теги: i5001 чистый цветной дисплей
  • теги: i5001 процесс экстремальный

14. Товарный скрининг

// 获取差集
sdiff set1 set2
// 获取交集(intersection )
sinter set1 set2
// 获取并集
sunion set1 set2

Что, если: iPhone 11 появится на рынке

sadd brand:apple iPhone11

sadd brand:ios iPhone11

sad screensize:6.0-6.24 iPhone11

sad screentype:lcd iPhone 11

Выбранные продукты, Apple, ios и экран между 6,0-6,24, материал экрана - ЖК-экран.

sinter brand:apple brand:ios screensize:6.0-6.24 screentype:lcd

15. Модель внимания и рекомендаций пользователей

следите за поклонниками

Следуйте друг за другом:

  • sadd 1:follow 2
  • sadd 2:fans 1
  • sadd 1:fans 2
  • sadd 2:follow 1

Люди, за которыми я следую, также следуют за ним (на перекрестке):

  • sinter 1:follow 2:fans

Люди, которых вы, возможно, знаете:

  • Люди, которых может знать пользователь 1 (разница): sdiff 2:follow 1:follow
  • Люди, пользователь 2 может знать: sdiff 1:follow 2:follow

16. Таблица лидеров

Добавьте 1 к количеству просмотров новостей с идентификатором 6001:

zincrby hotNews:20190926 1 n6001

Получите сегодня 15 самых популярных:

zrevrange hotNews:20190926 0 15 withscores

Redis работает хорошо, прибавка к зарплате незаменима