Оригинальный автор, публичный аккаунт [программист чтение], прошу обратить внимание на паблик-аккаунт, просьба указывать источник перепечатываемой статьи.
В предыдущей статье мы кратко рассказали оRedis
Базовые знания о сценариях применения, установке, способах подключения и т. д., то в этой статье мы продолжим усердно работать и продолжимRedis
Изучите основы.
В этой статье мы поговорим оRedis
структуры данных и общие команды.
Структура данных Redis
Redis
Поддержка множества различных структур данных, в том числе 5 базовых структур данных и несколько более сложных данных, эти структуры данных могут соответствовать различным сценариям приложений.
Пять основных структур данных
-
String
: строка, которая является основой для построения других структур данных -
Hash
: список хешей -
List
: список -
Set
: набор, реализованный на основе списка хэшей -
Sort Set
: отсортированный набор
сложные структуры данных
-
Bitmaps
: Bitmap, который выполняет битовые операции на основе строк, может реализовывать компактные структуры данных. -
Hyperloglog
: Вероятностная структура данных для оценки количества элементов в наборе. -
Geo
: геопространственный запрос радиуса геопространственного индекса. -
BloomFilter
: Фильтр Блума.
Сходства между различными структурами данных
Из приведенного выше вступления мы видим, что поддерживаемые структуры данных разные, но на самом деле,Redis的
Каждая структура данных состоит изkey
иvalue
композиция, которую можно абстрагировать как:
и все структуры данных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 используются для получения времени истечения срока действия ключа.Возвращаемое значение является целым числом, а смысл делится на несколько ситуаций:
- Возвращает -2, если ключ не существует или срок его действия истек.
- Возвращает -1, если ключ существует и действует постоянно.
- Когда ключ имеет установленное время истечения срока действия, он возвращает количество оставшихся секунд (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
, соответственно, которые мы ввели ранееRedis
5 основных структур данных .
Сложные структуры данных, такие как 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
Вот и все.
Ваше внимание — самое большое поощрение на моем писательском пути!