70
Redis資料型別與場景的連結 Jamis Liao

twMVC#26 | Redis資料型別與場景的連結

  • Upload
    twmvc

  • View
    123

  • Download
    1

Embed Size (px)

Citation preview

Page 1: twMVC#26 | Redis資料型別與場景的連結

Redis資料型別與場景的連結

Jamis Liao

Page 2: twMVC#26 | Redis資料型別與場景的連結

http://mvc.tw

About Me

2

Tag• ASP.Net MVC• C#• DevOps• 軟體開發流程• 系統架構• Cloud Architecture

• Jamis• 微軟最有價值專家

• 天橋下的說書人

Blog

Page 3: twMVC#26 | Redis資料型別與場景的連結

Redis是甚麼(可以吃嗎……老梗)

3

Remote Dictionary Server In-memory data structure store Platform Windows Mac Linux

Page 4: twMVC#26 | Redis資料型別與場景的連結

4

Page 5: twMVC#26 | Redis資料型別與場景的連結

Redis到底有多快

5

Page 6: twMVC#26 | Redis資料型別與場景的連結

太快了………拿個Mac Air 11給它就好

6

以Pipelining執行,一次送16條命令

Page 7: twMVC#26 | Redis資料型別與場景的連結

這樣還不夠………

7

給你滿滿的Redis大平台Cluster

Page 8: twMVC#26 | Redis資料型別與場景的連結

Cluster

8

Data sharding 16384 slot

Redis Cluster master-slave model

Page 9: twMVC#26 | Redis資料型別與場景的連結

9

Redis Cluster

A (0~5500)

B (5501~11000) C (11001~16384)

Page 10: twMVC#26 | Redis資料型別與場景的連結

10

Redis Cluster

A (0~5500)

B (5501~11000) C (11001~16384)

Page 11: twMVC#26 | Redis資料型別與場景的連結

11

Redis Cluster Master-Slave

(0~5500)

(5501~11000) (11001~16384)

A A’

B B’ C C’

Page 12: twMVC#26 | Redis資料型別與場景的連結

Master-Slave

12

一個Master允許多個Slave

Non-blocking

透過專門的Slave來做持久化

Page 13: twMVC#26 | Redis資料型別與場景的連結

持久化

13

RDB指定的时間間隔對資料進行快照存儲 save 900 1 save 300 10 save 60 10000

AOF紀錄每次對Redis Server寫入的操作

Page 14: twMVC#26 | Redis資料型別與場景的連結

Redis HA策略

14

Master-Slave

Sentinel port sentinel monitor sentinel auth-pass sentinel down-after-milliseconds sentinel failover-timeout

Page 15: twMVC#26 | Redis資料型別與場景的連結

有誰可以用呢?

15

ActionScript

Bash

C

C#

C++

Clojure

Common Lisp

Crystal

D

Dart

Elixir

emacs lisp

Erlang

Fancy

Gawk

GNU Prolog

Go

Haskell

Haxe

Lo

Java

Javascript

Julia

Lua

Matlab

Nim

Node.js

Objectlive-C

Ocaml

Pascal

Perl

PHP

Pure Data

Python

R

Racket

Rebol

Ruby

Rust

Scala

Scheme

Smalltalk

Swift

Tcl

VB

VCL

Page 16: twMVC#26 | Redis資料型別與場景的連結

C#可以用的套件

16

StackExchange.RedisV.S

ServiceStack.Redis

Page 17: twMVC#26 | Redis資料型別與場景的連結

為什麼選擇 StackExchange.Redis

17

免錢V.S

要錢

Page 18: twMVC#26 | Redis資料型別與場景的連結

18

Redis Setting Demo

Page 19: twMVC#26 | Redis資料型別與場景的連結

開始來說正事了…………Redis Data Type

19

Strings Redis最基本的型別,也是最基本

的使用方式

最常見的兩種使用方式 直接存字串 物件序列成化成字串存到Redis

Page 20: twMVC#26 | Redis資料型別與場景的連結

命令集

20

https://redis.io/commands#string

http://www.redis.cn/commands.html#string

Page 21: twMVC#26 | Redis資料型別與場景的連結

21

Strings Demo

Page 22: twMVC#26 | Redis資料型別與場景的連結

第一個場景

22

這是一個敗家的moment…https://goo.gl/UlmG7C

Page 23: twMVC#26 | Redis資料型別與場景的連結

尋找敗家目標時最容易看到的………分頁

23

Page 24: twMVC#26 | Redis資料型別與場景的連結

通常為了效能,我們會這樣做

24

將每一頁的資料放到Cache

Page 25: twMVC#26 | Redis資料型別與場景的連結

如果分頁顯示的數量可改變

25

Page 26: twMVC#26 | Redis資料型別與場景的連結

把不同數量的顯示資料通通存起來

26

http://bbs.roheya.com/read.php?tid-6908.html

Page 27: twMVC#26 | Redis資料型別與場景的連結

但是…………………………………這樣好嗎?

27

https://goo.gl/yt7iS3

Page 28: twMVC#26 | Redis資料型別與場景的連結

試試看Redis Lists

28

Lists是由字串組成的一個集合

從頭尾取出一個元素

從集合中取出任一範圍的元素集合

https://goo.gl/W9dOBz

根據新增或插入的順序將集合中的元素排序

Page 29: twMVC#26 | Redis資料型別與場景的連結

命令集

29

https://redis.io/commands#list

http://www.redis.cn/commands.html#generic

Page 30: twMVC#26 | Redis資料型別與場景的連結

30

Lists Demo

Page 31: twMVC#26 | Redis資料型別與場景的連結

第二個場景

31

現在很常見的文章+Tag

Page 32: twMVC#26 | Redis資料型別與場景的連結

使用Tag的場景

32

Page 33: twMVC#26 | Redis資料型別與場景的連結

使用Tag搜尋

33

Page 34: twMVC#26 | Redis資料型別與場景的連結

那一次搜尋兩個Tag………

34

嗯………..沒有這個功能

Page 35: twMVC#26 | Redis資料型別與場景的連結

其實另一個服務Pocket也沒有

35

Page 36: twMVC#26 | Redis資料型別與場景的連結

Redis Sets該上場了

36

Sets是由字串元素組成的一個集合

https://goo.gl/1ucVpJ

Page 37: twMVC#26 | Redis資料型別與場景的連結

如何一次搜尋兩個Tag…………

37

儲存的元素為無序並且唯一

提供了交集與差集的功能

https://goo.gl/Eb62gf

Page 38: twMVC#26 | Redis資料型別與場景的連結

Sets的另一個場景

38

樂觀鎖定…..這是什麼鬼

Page 39: twMVC#26 | Redis資料型別與場景的連結

樂觀鎖定……………做啥用

39

http://sponsor.accupass.com/fb/_rush-ticket

Page 40: twMVC#26 | Redis資料型別與場景的連結

除了應付網站流量

40

還要擔心不可以超賣

Page 41: twMVC#26 | Redis資料型別與場景的連結

不超賣最簡單的方式……先準備好用發的

41

https://goo.gl/iTT9u0

Page 42: twMVC#26 | Redis資料型別與場景的連結

但是……………事情真的有那麼簡單嗎?

42

如果Select到同一張票的資料怎麼辦?

Page 43: twMVC#26 | Redis資料型別與場景的連結

SQL Server的樂觀鎖定

43

SQL Server 樂觀鎖定的作法 利用Timestamp (RowVersion)

https://goo.gl/5oLXle

Page 44: twMVC#26 | Redis資料型別與場景的連結

Redis Sets的樂觀鎖定()

44

Redis Sets 樂觀鎖定的作法 拿走就沒了 需搭配Redis Transaction

Page 45: twMVC#26 | Redis資料型別與場景的連結

命令集

45

https://redis.io/commands#set

http://www.redis.cn/commands.html#set

Page 46: twMVC#26 | Redis資料型別與場景的連結

46

Sets Demo

Page 47: twMVC#26 | Redis資料型別與場景的連結

第四個場景

47

熱門排行榜(文章)

Page 48: twMVC#26 | Redis資料型別與場景的連結

那些年曾經有過的……點部落熱門文章

48

Page 49: twMVC#26 | Redis資料型別與場景的連結

曾經牛逼過的……博客園閱讀排行榜

49

Page 50: twMVC#26 | Redis資料型別與場景的連結

現在滿紅的Segmentfault

50

Page 51: twMVC#26 | Redis資料型別與場景的連結

好用的Sorted Sets輕鬆完成

51

Sorted Sets是由字串元素組成的一個集合,而每個元素都會關連到一個浮动数值

https://goo.gl/QGTiWD

Page 52: twMVC#26 | Redis資料型別與場景的連結

命令集

52

https://redis.io/commands#sorted_set

http://www.redis.cn/commands.html#sorted_set

Page 53: twMVC#26 | Redis資料型別與場景的連結

53

Sorted Sets Demo

Page 54: twMVC#26 | Redis資料型別與場景的連結

第五個場景

54

這個場景有點不好說

Page 55: twMVC#26 | Redis資料型別與場景的連結

來做一個提供天氣資訊的服務

55

資訊可能會包含• 溫度• 最高溫度• 最低溫度• 降雨機率• 風力• 風向

Page 56: twMVC#26 | Redis資料型別與場景的連結

一般來說會把天氣資訊放到快取

56

天氣資訊進去快取的步驟通常是這樣

1. 把物件序列化成字串

2. 把字串存進快取

3. 從快取把字串讀出來

4. 把字串反序列化成字串

Page 57: twMVC#26 | Redis資料型別與場景的連結

在一次提供所有資訊的服務是很正常

57

但是…………………如果是下面這些服務

1. 取得最高 / 最低溫度

2. 取得降雨機率

3. 取得風力 / 風向

Page 58: twMVC#26 | Redis資料型別與場景的連結

複習一下快取的步驟

58

把物件序列化成字串

把字串存進快取

從快取把字串讀出來

把字串反序列化成字串

Page 59: twMVC#26 | Redis資料型別與場景的連結

好像有哪裡怪怪的………………

59

我只需要部份資訊阿

Page 60: twMVC#26 | Redis資料型別與場景的連結

來看看Hashes

60

Hash是由field和關聯的value组成的map

https://goo.gl/rgRHtp

Page 61: twMVC#26 | Redis資料型別與場景的連結

命令集

61

https://redis.io/commands#hash

http://www.redis.cn/commands.html#hash

Page 62: twMVC#26 | Redis資料型別與場景的連結

還有兩種沒提到的資料型別……今天不會講

62

HyperLogLogs

Bitmaps

Page 63: twMVC#26 | Redis資料型別與場景的連結

還有一件要特別提的事

63

Pipelining

這是一個將Client命令打包一次送到Redis Server的概念

Transactions

這是一個將命令打包,做一次執行的概念

Page 64: twMVC#26 | Redis資料型別與場景的連結

Transactions的五個指令

64

MULTI

EXEC

DISCARD

WATCH

UNWATCH

Page 65: twMVC#26 | Redis資料型別與場景的連結

http://mvc.tw

Blog 是記錄知識的最佳平台

65

Page 66: twMVC#26 | Redis資料型別與場景的連結

http://mvc.tw

感謝 Jetbrains 贊助贈品

66

https://www.jetbrains.com/resharper/

Page 67: twMVC#26 | Redis資料型別與場景的連結

http://mvc.tw

感謝 OzCode 贊助贈品

67

http://www.oz-code.com/

Page 68: twMVC#26 | Redis資料型別與場景的連結

http://mvc.tw

業界師資、實戰教學

68

http://skilltree.my

Page 69: twMVC#26 | Redis資料型別與場景的連結

http://mvc.tw

業界師資、實戰教學

69

https://mvc.tw

Page 70: twMVC#26 | Redis資料型別與場景的連結

謝謝各位

• 本投影片所包含的商標與文字皆屬原著作者所有。• 本投影片使用的圖片皆從網路搜尋。• 本著作係採用姓名標示-非商業性-相同方式分享 3.0 台灣授權。閱讀本授權條款,請到

http://creativecommons.org/licenses/by-nc-sa/3.0/tw/,或寫信至Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.

h t t p s : / / m v c . t w