Основы Redis, которыми должна овладеть внутренняя разработка

Redis

Оригинальный автор, публичный аккаунт [программист чтение], прошу обратить внимание на паблик-аккаунт, просьба указывать источник перепечатываемой статьи.

В предыдущей статье мы кратко рассказали оRedisБазовые знания о сценариях применения, установке, способах подключения и т. д., то в этой статье мы продолжим усердно работать и продолжимRedisИзучите основы.

В этой статье мы поговорим оRedisструктуры данных и общие команды.

Структура данных Redis

RedisПоддержка множества различных структур данных, в том числе 5 базовых структур данных и несколько более сложных данных, эти структуры данных могут соответствовать различным сценариям приложений.

Пять основных структур данных

  1. String: строка, которая является основой для построения других структур данных

  2. Hash: список хешей

  3. List: список

  4. Set: набор, реализованный на основе списка хэшей

  5. Sort Set: отсортированный набор

сложные структуры данных

  1. Bitmaps: Bitmap, который выполняет битовые операции на основе строк, может реализовывать компактные структуры данных.

  2. Hyperloglog: Вероятностная структура данных для оценки количества элементов в наборе.

  3. Geo: геопространственный запрос радиуса геопространственного индекса.

  4. BloomFilter: Фильтр Блума.

Сходства между различными структурами данных

Из приведенного выше вступления мы видим, что поддерживаемые структуры данных разные, но на самом деле,Redis的Каждая структура данных состоит изkeyиvalueкомпозиция, которую можно абстрагировать как:

Состав структуры данных Redis

и все структуры данныхkeyЗначением является любая допустимая строка, разница между различными структурами данных заключается в том, чтоvalueСохраненное значение варьируется.

Например, простейшая структура данных String, ее значение равно String, поэтому String можно выразить как:

И структура данных Hash, ее значение представляет собой список хэшей, поэтому Hash можно выразить как:

Здесь String и Hash перечислены для объяснения, и мы поговорим о внутренней структуре и подробной работе с другими структурами данных в следующих статьях.

Общие команды для Redis

RedisОфициальный сайт будетRedisКоманды разделены на 15 тематических групп в соответствии с их функциями, из которых:KyesКоманды темы являются общими для всех структур данных, поэтому их необходимо хорошо изучить, прежде чем изучать другие команды структур данных.

keys

keysЦель команды состоит в том, чтобы перечислитьRedisвсеkey, временная сложность этой командыO(N),Nвместе сRedisсерединаkeyувеличивается по мере того, как количествоRedisЕсть большое количество ключей,keysКоманда выполняется долго, и из-заRedisЭто один поток. Если команда выполняется слишком долго, на все последующие запросы не будет ответа, поэтому не используйте ее на рабочем сервере.keysЗаказ.

# key命令,时间复杂度为O(n)
keys pattern #pattern可为一个包含匹配模式的字符串,可以包含*,+,?,[a-z]等模式。

Пример

> mset hello_test1 one hello_test2 two helloa a hellob b
> keys hello*
1) "hello_test1"
2) "hello_test2"
3) "helloa"
4) "hellob"
> keys heelo?
1) "helloa"
2) "hellob"
> keys hello[a-z]
1) "helloa"
2) "hellob"

exists

existsКоманда используется для определения существования одного или нескольких ключей, а также для определения существования нескольких ключей.keyчас,keyразделены пробелами,existsВозвращаемое значение представляет собой целое число, указывающее, сколько в настоящее время оцениваетсяkeyЭто существует.

# exists命令,时间复杂度O(1)
exists key [key ...]

Пример

> set test1 t1
> exists test1 test2 
(integer) 1 #只有一个key存在
> exists test3 test3
(integer) 0 #key都不存在

del

delкоманда для удаления одного или несколькихkey, несколькоkeyВозвращаемое значение, разделенное пробелами, представляет собой целое число, указывающее, сколько существующих было успешно удалено.key, поэтому, если удален только один ключ, по возвращаемому значению можно судить об успешности его выполнения, а если удалить несколько ключей, можно получить только количество успешных удалений.

# del命令,时间复杂度O(n)
del key [key ...]

Пример

> set test t
> del test
(integer) 1
> mset test1 2 test2 1
> del test1 test2 test3
(integer) 2 # 返回2,表示成功删除两个
#再次删除,返回0,因为删除成功个数为0
> del test1 test2 test3
(integer) 0

expire,pexpire

expire задает количество секунд, по истечении которого истечет срок действия ключа, а pexpire задает количество миллисекунд, после которого истечет срок действия ключа.Возвращает 1 в случае успеха и 0 в случае неудачи.

# expire命令,时间复杂度为O(1)
expire key seconds

# pexpire命令,时间复杂度为O(1)
pexpire key milliseconds

Пример

> mset test test_value test1 test1_value
> expire test 10 #设置10秒后过期
(integer) 1
> pexpire test1_value 10000 #设置10000毫秒(10s)后过期
(integer) 1
> expire ttt 100
(integer) 0 # 不存在的key,设置失败,返回0 

ttl,pttl

Команды ttl и pttl используются для получения времени истечения срока действия ключа.Возвращаемое значение является целым числом, а смысл делится на несколько ситуаций:

  1. Возвращает -2, если ключ не существует или срок его действия истек.
  2. Возвращает -1, если ключ существует и действует постоянно.
  3. Когда ключ имеет установленное время истечения срока действия, он возвращает количество оставшихся секунд (pttl — это количество миллисекунд).
# ttl命令,时间复杂度O(1)
ttl key

# pttl命令,时间复杂度O(1)
pttl key

Пример (демонстрация ttl, похожая на pttl)

> set test test
> expire test 100
> ttl test
(integer) 98#返回剩下的秒数
> set test1 #永久有效
> ttl test1
(integer) -1
> ttl test2
(integer) -2#不存在或过期
#100秒后
> ttl test # test已过期
(integer) -2

expireat,pexpireat

Установите срок действия ключа в определенную отметку времени. Отметка времени параметра expreat выражается в секундах, а pexpireat выражается в миллисекундах. Подобно функциям expire и pexpire, он возвращает 1 в случае успеха и 0 в случае неудачи.

#expireat命令,时间复杂度为O(1)
expireat key timestamp

#pexpireat命令,时间复杂度为O(1)
pexpireat key milliseconds-timestamp

Пример

> set test test
> expireat test 1560873600 # 2019-06-19 00:00:00
(integer) 1
> set test1 test1
> pexpireat test1 156087360000 # 2019-06-19 00:00:00的毫秒表示
(integer) 1

persist

Удалите время истечения срока действия ключа и установите для ключа постоянную действительность.Если срок действия ключа установлен, используйте команду persist, чтобы удалить его и вернуть 1. Если ключ не существует или действует постоянно, возвращается 0.

# persist命令,时间复杂度O(1)
persist key

Пример

> set test test
> ttl test
(integer) -1 # 表示永久有效
> persist test
(integer) 0 # 对永久有效或不存在的key使用persist命令,返回
> expire test 10
(integer) 1
> persist test
(integer) 1

type

Определите, к какому типу структуры данных относится ключ, и возвращаемое значениеstring,list,set,hash,zset, соответственно, которые мы ввели ранееRedis5 основных структур данных .

Сложные структуры данных, такие как geo, hyperloglog и растровые изображения, реализованы в этих пяти базовых структурах данных.Например, geo имеет тип zset, а hyperloglog и растровые изображения являются строками.

# type命令,时间复杂度O(1)
type key

Пример

> set test test
> type test
string
> hset htest test test
> type htest
hash

резюме

Представленный вышеRedisНаиболее часто используемые общие команды в .RedisВот и все.


Ваше внимание — самое большое поощрение на моем писательском пути!