Заметки об исследовании Redis

Redis

Введение

  • Redis полностью открыт и бесплатен, соответствует протоколу BSD и представляет собой высокопроизводительную базу данных «ключ-значение».

  • Redis поддерживает сохраняемость данных, которая может хранить данные в памяти на диске и может быть загружена снова для использования при перезапуске.

  • Redis поддерживает резервное копирование данных, то есть резервное копирование данных в режиме master-slave.

    Программное обеспечение для управления клиентскими компьютерами Redis Desktop Manager https://redisdesktop.com/


Преимущество

  • Чрезвычайно высокая производительность: Redis может читать 110 000 раз/с и записывать 81 000 раз/с.
  • Богатые типы данных: Redis поддерживает операции с типами данных Strings, Lists, Hashes, Sets и Ordered Sets для двоичных случаев.
  • Атомарность: все операции Redis являются атомарными, и Redis также поддерживает атомарное выполнение нескольких операций после их объединения.
  • Богатые функции: поддержка публикации/подписки, уведомления, истечение срока действия ключа и другие функции.

структура данных

  • Строка - Строка

Строковый тип является двоично-безопасным. Означает, что строка redis может содержать любые данные. Например, изображения в формате jpg или сериализованные объекты.

Строковый тип является самым основным типом данных Redis, и ключ может хранить до 512 МБ.

set key value [EX seconds] [PX milliseconds] [NX|XX]
get key
    
例:
127.0.0.1:6379> set string 'hello'
OK
127.0.0.1:6379> get string 
"hello"
  • Хэш - Хэш

Хэш Redis — это набор пар ключ-значение.

Хэш Redis — это таблица сопоставления поля и значения строкового типа, а хэш особенно подходит для хранения объектов.

Каждый хэш может хранить 232 - 1 пары ключ-значение (более 4 миллиардов).

hset key field value    
hget key field
hgetall key

hmset key field value [field value ...]
hmget key field [field ...]

例:
127.0.0.1:6379> hset hash name 'redis'
(integer) 1   -- 返回添加hash的键值对数
127.0.0.1:6379> hget hash key2
"value3"
127.0.0.1:6379> hgetall hash
1) "key2"
2) "value3"
3) "name"
4) "redis"
127.0.0.1:6379> hmset hash age 24 gender male
OK
127.0.0.1:6379> hmget hash key2 name
1) "value3"
2) "redis"

Список Список

Списки Redis — это простые списки строк, отсортированные по порядку вставки. Вы можете добавить элемент в начало (слева) или хвост (справа) списка.

Списки могут хранить до 2^32 - 1 элементов (4294967295, более 4 миллиардов на список).

lpush key value [value ...]
rpush key value [value ...]
lrange key start stop

例:
127.0.0.1:6379> lpush userlist user1
(integer) 1
127.0.0.1:6379> rpush userlist user2 user3
(integer) 3  -- 返回 list的大小
127.0.0.1:6379> lrange userlist 0 -1
1) "user1"
2) "user2"
3) "user3"    

Коллекция -- Набор

Redis Set — это неупорядоченная коллекция строкового типа.

Набор реализуется хэш-таблицей, поэтому сложность добавления, удаления и поиска составляет O(1).

В соответствии с уникальностью элементов в коллекции второй вставленный элемент будет проигнорирован.

Максимальное количество элементов в коллекции 2^32 -1 (4294967295, каждая коллекция может хранить более 4 миллиардов элементов)

sadd key member [member ...]
smembers key

例:
127.0.0.1:6379> sadd set card1
(integer) 1
127.0.0.1:6379> sadd set card1
(integer) 0
127.0.0.1:6379> smembers set
1) "item2"
2) "item3"
3) "card1"

отсортированное множество Zset

Redis zset, как и набор, также представляет собой набор элементов строкового типа и не допускает дублирования элементов.

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

Члены zset уникальны, но счет может повторяться.

zadd key [NX|XX] [CH] [INCR] score member [score member ...]
zrange key start stop [WITHSCORES]
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

例:
127.0.0.1:6379> zadd xiaoming 97 math
(integer) 1
127.0.0.1:6379> zadd xiaoming 98 chinese
(integer) 1
127.0.0.1:6379> zrange xiaoming  0 10 withscores
1) "math"
2) "97"
3) "chinese"
4) "98"
127.0.0.1:6379> zrangebyscore xiaoming 98 100
1) "chinese"