10 Ways to Scale with Redis IMCSUMMIT - NOVEMBER 2019 | DAVE NIELSEN - - PowerPoint PPT Presentation

10 ways to scale with redis
SMART_READER_LITE
LIVE PREVIEW

10 Ways to Scale with Redis IMCSUMMIT - NOVEMBER 2019 | DAVE NIELSEN - - PowerPoint PPT Presentation

10 Ways to Scale with Redis IMCSUMMIT - NOVEMBER 2019 | DAVE NIELSEN In-memory Multi-model Database 2 Optionally Persistent 3 Cluster Throughput (@ 1 msec Latency) 50,420,000 41,190,000 ops/sec 30,200,000 21,120,000 11,380,000 5,020,000


slide-1
SLIDE 1

10 Ways to Scale with Redis

IMCSUMMIT - NOVEMBER 2019 | DAVE NIELSEN

slide-2
SLIDE 2

In-memory Multi-model Database

2

slide-3
SLIDE 3

Optionally Persistent

3

slide-4
SLIDE 4

4

50,420,000 41,190,000 30,200,000 21,120,000 11,380,000 5,020,000 3 6 12 18 24 26

  • ps/sec

# of nodes Cluster Throughput (@ 1 msec Latency)

slide-5
SLIDE 5

5

Developers + Redis

slide-6
SLIDE 6

Redis Top Differentiators

Simplicity Extensibility Performance

NoSQL Benchmark

1

Redis Data Structures

2 3

Redis Modules 6

Lists Hashes Bitmaps Strings Bit field Streams Hyperloglog Sorted Sets Sets Geospatial Indexes

slide-7
SLIDE 7

Performance: The Most Powerful Database

Highest Throughput at Lowest Latency in High Volume of Writes Scenario Least Servers Needed to Deliver 1 Million Writes/Sec

Benchmarks performed by Avalon Consulting Group Benchmarks published in the Google blog

7

1

Servers used to achieve 1M writes/sec 10k 20k 30k 40k 100 200 300 400 500 Couchbase Cassandra Datastax Redise

394.42 381.31 372.31 71.22 Application requests/sec Latency in Milliseconds

Applicaon Latency (msec)

Couchbase Cassandra Redise $14,832 $371,040 $2,226,216 25X 150X

ANNUAL COST COST COMPARED TO REDIS

e

350 300 250 200 150 100 50

slide-8
SLIDE 8

“REDIS IS FULL OF DATA STRUCTURES!”

2 Simplicity: Data Structures - Redis’ Building Blocks

slide-9
SLIDE 9

Simplicity: Redis Data Structures – ’Lego’ Building Blocks

Lists [ A → B → C → D → E ] Hashes { A: “foo”, B: “bar”, C: “baz” } Bitmaps 0011010101100111001010 Strings "I'm a Plain Text String!” Bit field {23334}{112345569}{766538}

Key

9

2

”Retrieve the e-mail address of the user with the highest bid in an auction that started on July 24th at 11:00pm PST”

ZREVRANGE 07242015_2300 0 0

=

Streams

à{id1=time1.seq1(A:“xyz”, B:“cdf”), d2=time2.seq2(D:“abc”, )}à

Hyperloglog 00110101 11001110 Sorted Sets { A: 0.1, B: 0.3, C: 100 } Sets { A , B , C , D , E } Geospatial Indexes { A: (51.5, 0.12), B: (32.1, 34.7) }

slide-10
SLIDE 10
  • Add-ons that use a Redis API to seamlessly support additional

use cases and data structures.

  • Enjoy Redis’ simplicity, super high performance, infinite

scalability and high availability.

Extensibility: Modules Extend Redis Infinitely

  • Any C/C++/Go program can become a Module and run on Redis.
  • Leverage existing data structures or introduce new ones.
  • Can be used by anyone; Redis Enterprise Modules are tested and certified by Redis

Labs.

  • Turn Redis into a Mu

Multi-Mo Model database

10

3

slide-11
SLIDE 11
  • Re

RediSearch

  • Re

RedisTimerseries

  • Re

ReJSON

  • Re

Rebloom

  • Re

RedisGraph

  • Neural-Redis
  • Redis-Cell
  • Redis-Tdigest
  • Redis-ML

Extensibility: Modules Extend Redis Infinitely

11

3

  • Redis-Rating
  • Redis-Cuckoofilter
  • Cthulhu
  • Redis Snowflake
  • redis-roaring
  • Session Gate
  • ReDe
  • TopK
  • countminsketch
slide-12
SLIDE 12

Deep Dive

slide-13
SLIDE 13

Real Time Analytics User Session Store Real Time Data Ingest High Speed Transactions Job & Queue Management Time Series Data Complex Statistical Analysis Notifications Distributed Lock Caching Geospatial Data Streaming Data Machine Learning

13

Very Large Data Sets Search

slide-14
SLIDE 14

Manage Session Stores w/ Redis Hash

slide-15
SLIDE 15
  • An chunk of data that is connected to one “user” of a service

– ”user” can be a simple visitor – or proper user with an account

  • Often persisted between client and server by a token in a cookie*

– Cookie is given by server, stored by browser – Client sends that cookie back to the server on subsequent requests – Server associates that token with data

  • Often the most frequently used data by that user

– Data that is specific to the user – Data that is required for rendering or common use

  • Often ephemeral and duplicated

A user session store is…

slide-16
SLIDE 16

Session Storage Uses Cases

Traditional

  • Username
  • Preferences
  • Name
  • “Stateful” data

Intelligent

  • Traditional +
  • Notifications
  • Past behavior

– content surfacing – analytical information – personalization

slide-17
SLIDE 17

In a simple world

Internet Server Database

slide-18
SLIDE 18

Good problems

Internet Server Database Traffic Grows… Struggles

slide-19
SLIDE 19

Good solution

Internet Server Database performance restored Session storage

  • n the server
slide-20
SLIDE 20

More good problems

Internet Server Database Session storage

  • n the server

Struggling

slide-21
SLIDE 21

Problematic Solutions

Internet Server Database Session storage

  • n the server

Load balanced Session storage

  • n the server
slide-22
SLIDE 22

Multiple Servers + On-server Sessions?

Server Database Robin Server #1 – Hello Robin!

slide-23
SLIDE 23

Multiple Servers + On-server Sessions?

Server Database Robin Server #3 – Hello ????

slide-24
SLIDE 24

Better solution

Internet Server Database Load balanced Redis Session Storage

slide-25
SLIDE 25

User Session Store

  • Th

The Prob

  • blem
  • Maintain session state across

multiple servers

  • Multiple session variables
  • High speed/low latency required

Why Redis Rocks

  • Hashes are perfect for this!
  • HSET lets you save session

variables as key/value pairs

  • HGET to retrieve values
  • HINCRBY to increment any

field within the hash structure

slide-26
SLIDE 26

Redis Hashes Example - https://redis.io/commands#hash

userid 8754 name dave ip 10:20:104:31 hits 1 lastpage home hash key: usersession:1

HMSET usersession:1 userid 8754 name dave ip 10:20:104:31 hits 1 HMGET usersession:1 userid name ip hits HINCRBY usersession:1 hits 1 HSET usersession:1 lastpage “home” HGET usersession:1 lastpage HDEL usersession:1 lastpage

Hashes store a mapping of keys to values – like a dictionary or associative array – but faster

EXPIRE usersession:1 10 DEL usersession:1

  • r
slide-27
SLIDE 27

Managing Queues w/ Redis Lists

slide-28
SLIDE 28

Managing Queues of Work

  • Th

The Prob

  • blem
  • Tasks need to be worked on asynch

to reduce block/wait times

  • Lots of items to be worked on
  • Assign items to worker process and

remove from queue at the same time

  • Similar to buffering high speed data-

ingestion

Why Redis Rocks

  • Lists are perfect for this!
  • LPUSH, RPUSH add values at

beginning or end of queue

  • RPOPLPUSH – pops an item

from one queue and pushes it to another queue

slide-29
SLIDE 29

Redis Lists Example - https://redis.io/commands#list

LPUSH queue1 orange LPUSH queue1 green LPUSH queue1 blue RPUSH queue1 red

LPUSH adds values to head of list RPUSH adds value to tail of list

blue green orange

.. ..

red

slide-30
SLIDE 30

Redis Lists Example - https://redis.io/commands#list

blue green orange

.. ..

RPOPLPUSH queue1 queue2

red

LPUSH queue1 orange LPUSH queue1 green LPUSH queue1 blue RPUSH queue1 red

RPOPLPUSH pops a value from one list and pushes it to another list

LLEN queue1 LINDEX queue1 0 LRANGE queue1 0 2

slide-31
SLIDE 31

Managing Tags w/ Redis Sets

slide-32
SLIDE 32

Managing Tags Example

  • Th

The Prob

  • blem
  • Loads of tags
  • Find items with particular tags
  • High speed/low latency required

Also used for:

  • Recommending Similar Purchases
  • Recommending Similar Posts

Why Redis Rocks

  • Sets are unique collections of strings
  • SADD to add tags to each article
  • SISMEMBER to check if an article has

a given tag

  • SMEMBERS to get all the tags for an

article

  • SINTER to find which articles are

tagged with tag1, tag2 and tag77

slide-33
SLIDE 33

Redis Sets Example – https://redis.io/commands#set

tag1 tag22 tag24 tag28

SADD article:1 tag:1 tag:22 tag:24 tag:28 SADD tag:1 article:1 SADD tag:1 article:3 SADD tag:2 article:22 SADD tag:2 article:14 SADD tag:2 article:3 SISMEMBER article:1 tag:1 SMEMBERS article:1

article 1 article 1 article 3 …. tag 1 article 3 article 14 article 22 .. tag 2

SINTER tag:1 tag:2

slide-34
SLIDE 34

Managing Leaderboards w/ Redis Sorted Sets

slide-35
SLIDE 35

Leaderboard with Sorted Sets Example

  • Th

The Prob

  • blem
  • MANY users playing a game or

collecting points

  • Display real-time leaderboard.
  • Who is your nearest competition
  • Disk-based DB is too slow

Why Redis Rocks

  • Sorted Sets are perfect!
  • Automatically keeps list of

users sorted by score

  • ZADD to add/update
  • ZRANGE, ZREVRANGE to get

user

  • ZRANK will get any users

rank instantaneously

slide-36
SLIDE 36

Redis Sorted Sets - https://redis.io/commands#sorted_set

ZADD game:1 10000 id:1 ZADD game:1 21000 id:2 ZADD game:1 34000 id:3 ZADD game:1 35000 id:4 ZADD game:1 44000 id:3

  • r

ZINCRBY game:1 10000 id:3

34000 id:3 35000 id:4 21000 id:2 10000 id:1

ZREVRANGE game:1 0 0 ZREVRANGE game:1 0 1 WITHSCORES

44000 id:3 + 10000 id:3

slide-37
SLIDE 37

Searching within a Geospatial Index

slide-38
SLIDE 38

Search within a Geographic Area Example

  • Th

The Prob

  • blem
  • MANY moving items within a

geographical area

  • Display real-time locations.
  • What is the nearest item NOW
  • SQL Queries are too slow

Why Redis Rocks

  • GEOADD to add an item
  • Redis Geo uses Sorted Sets

so related Z-commands such as ZRANGE & ZREM are useful too

  • GEODIST to find distance

between to points

  • GEORADIUS to find all points

within an area

slide-39
SLIDE 39

Redis Geospatial Index - https://redis.io/commands#geo

GEOADD locations 37.25 13.916667 “Campobello di Licata” GEOADD locations 41.9 12.5 Rome GEOADD locations -122.375 37.618889 SFO GEOADD locations -122.3931400 37.7681300 Redisconf ZRANGE locations 0 -1

Rome 41.9, 12.5 Campobello di Licata 37.25, 13.916667 SFO

  • 122.375 37.618889

RedisConf

  • 122.3931400 37.7681300

GEODIST locations ”Campobello di Licata” Redisconf mi GEOPOS locations Redisconf SFO GEOHASH locations Redisconf ZSCORE locations Redisconf GEORADIUS locations -122.41942 37.77493 15 mi GEORADIUSBYMEMBER locations Redisconf 15 mi WITHDIST ASC ZREM locations SFO

slide-40
SLIDE 40

Fire and Forget with Pub/Sub

slide-41
SLIDE 41

Fire and Forget with Pub/Sub

  • Th

The Prob

  • blem
  • Communicate with clients in real-

time Why Redis Rocks

  • PUBLISH
  • SUBSCRIBE
slide-42
SLIDE 42

Pub/Sub Demo: https://redis.io/commands#pubsub

$ redis-server $ keys * $ flushall

  • 1. PUBLISH channel1 "hi 1"
  • 4. PUBLISH channel1 "hello 2"
  • 6. PUBLISH channel1 "hellooo 3"
  • 9. PUBLISH channel1 "hello world 4"
  • 3. SUBSCRIBE channel1
  • 2. SUBSCRIBE channel1
  • 5. CONTROL-C
  • 7. redis-cli
  • 8. SUBSCRIBE channel1

Wi Will receive: 4.

  • 4. hello
  • 2

9.

  • 9. hello
  • wor
  • rld 4

4 Will receive:

  • 4. hello 2
  • 6. hellooo 3
  • 9. hello world 4

Server Setup Publisher - Steps Subscriber 1 - Steps Subscriber 2 - Steps

slide-43
SLIDE 43

Reliable messaging with Redis Streams

slide-44
SLIDE 44

Reliable messaging with Redis Streams

  • Th

The Prob

  • blem
  • Communicate with clients in real-

time without missing data Why Redis Rocks

  • XADD
  • XREAD
slide-45
SLIDE 45

Redis Streams Demo - https://redis.io/commands#stream

redis-server keys * flushall

  • 1. XADD mystream1 * greeting "hello 1"
  • 5. XADD mystream1 * greeting "hello 2"
  • 8. XADD mystream1 * greeting ”hello 3"
  • 3. XREAD COUNT 10 STREAMS mystream1 0
  • 7. XREAD COUNT 10 STREAMS mystream1 0
  • 10. XREAD COUNT 10 STREAMS mystream1 0
  • 2. XREAD COUNT 10 STREAMS mystream1 0
  • 4. CONTROL-C
  • 6. redis-cli
  • 9. XREAD COUNT 10 STREAMS mystream1 0

Wi Will receive: 1.

  • 1. hello
  • 1

5.

  • 5. hello
  • 2

8.

  • 8. hello
  • 3

Will receive:

  • 1. hello 1
  • 5. hello 2
  • 8. hello 3

Server Setup Producer - Steps Consumer 1 - Steps Consumer 2 - Steps

slide-46
SLIDE 46

More examples

slide-47
SLIDE 47

47

Redis Data Structures

1. Strings - Cache SQL queries, pages, fast data 2. Bitmaps - Store 1s/0s (Online/Offline) like Pinterest 3. Bit Fields - Store arrays of complex numbers 4. Hashes - Store record-like info (user sessions, favorites, etc.) 5. Lists - Store ordered data (for ingesting data) 6. Sets - Store unique/unordered data (tags, unique IPs, etc.) 7. Sorted Sets - Store real-time sorted data like a MMPORG Leaderboard 8. Geospacial Indexes - Store real-time location (Uber, Lyft, etc.) 9. Hyperloglog - Store probabilistic data (Google Search count) 10. Streams - Store and share event data (similar to Kafka)

Lists Hashes Bitmaps Strings Bit fields Streams Hyperloglog Sorted Sets Sets Geospatial Indexes

slide-48
SLIDE 48

In-memory, Keys & Data Structures

slide-49
SLIDE 49

Redis Keys – Ground Rules

  • It’s all about the keys
  • No Querying
  • No Indexes
  • No Schemas
  • Keys must be unique (like primary keys in an SQL database)
slide-50
SLIDE 50

Thank you!

dave@redislabs.com

50