You are on page 1of 9

Ti l Duyt

Database - Tm hiu v CSDL Redis


Redis l 1 trong s cc h qun tr c s d liu pht trin mang phong cch
NoSQL. Redis l h thng lu tr key-value vi rt nhiu tnh nng v c s
dng rng ri. Redis ni bt bi vic h tr nhiu cu trc d liu c bn (hash,
list, set, sorted set, string), ng thi cho php scripting bng ngn ng lua.
Bn cnh lu tr key-value trn RAM vi hiu nng cao, redis cn h tr lu tr
d liu trn a cng (persistent redis) cho php phc hi d liu khi gp s c.
Ngoi tnh nng replicatation (sao chp gia master-client), tnh nng cluster (sao
lu master-master) cng ang c pht trin .
s dng mt cch hiu qu nhng tnh nng redis h tr cng nh vn hnh
redis vi hiu sut cao nht th vic am hiu h thng lu tr ny l iu khng th
thiu. Chnh v l do ny, mnh quyt nh tm hiu m ngun redis. Lot bi vit
v redis ny tm tt nhng iu mnh tm hiu c t vic c m ngun ca
redis.

Lch s ra i ca Redis
Trc tin, chng ta s cng nhau tm hiu v s ra i ca Redis. Cu chuyn bt
u khi tc gi ca Redis, Salvatore Sanfilippo (nickname: antirez), c gng lm
nhng cng vic gn nh l khng th vi SQL Database!
Server ca antirez nhn 1 lng ln thng tin t nhiu trang web khc nhau thng
qua JavaScript tracker, lu tr n page view cho trng trang v hin th chng theo
thi gian thc cho user, km theo l lu tr 1 lng nh lch s hin th ca
trang web. Khi s lng page view tng n hng nghn page trn 1 giy, antirez
khng th tm ra cch tip cn no thc s ti u cho vic thit k database ca
mnh. Tuy nhin, anh ta nhn ra rng, vic lu tr 1 danh sch b gii hn cc bn
ghi khng phi l vn qu kh khn. T , tng lu tr thng tin trn RAM
v qun l cc page views di dng native data vi thi gian pop v push l hng
s c ra i. Antirez bt tay vo vic xy dng prototype bng C, b sung tnh
nng lu tr thng tin trn a cng v Redis ra i.
n nay cng ng ngi s dng v pht trin Redis ang dn tr ln ln
mnh, redis.io tr thnh cng thng tin cho ngi lm vic vi Redis.

n y c th nhiu ngi s mun download v chy th xem cu lnh Redis


nh no, ging v khc g so vi bi hc v lng v MySQL. Tuy nhin bi vit
ny s khng tp trung vo vic ci t v chy cc cu lnh ca Redis, chng ta s
tp trung tm hiu cc c trng ni bt ca Redis.

Cc c im ni bt ca Redis

Redis h tr thm mi, cp nht v loi b d liu nhanh chng

o
o
o
o

Redis c nhng c im ging nh Memcached nh:


Lu tr dng key /value.
Tt c data c lu trn Memory(RAM)
Key c th ht hn(expire) hoc khng
Nhanh(Fast), nh nhng(light-weight)

o
o
o
o
o
o
o
o

Redis c thm nhiu c im, chc nng khc mang li li ch khi s dng
v trin khai
Persistence
H tr nhiu Databases
Truy vn theo Key
H tr counters d liu kiu integer
Cu trc d liu cp cao
Thao tc d liu chuyn bit
T ng phn trang danh sch
Nhn rng master-slave

Redis ly v np d liu trn Memory(RAM), nhng ti mt thi im th


d liu c th c lu tr trn disk(Data in memory, but saved on disk).

im khc bit d nhn thy ca Redis l: Key l mt string nhng value th


khng gii hn mt string m c th l List, Sets, Sorted sets, ....

Redis h tr Multiple database vi nhiu commands t ng remove


key t mt database ti database khc.

Mc nh th DB 0 s c la chn cho mi ln kt ni(connection), nhng


khi s dng lnh SELECT(SELECT command) th n c th select/create mt

database khc. Thao tc MOVE(MOVE operation) c th chuyn mt item t mt


DB ti DB khc mt cch t ng.

Redis rt nhanh trong cc thao tc ly v np d liu do redis h tr nhiu


lnh mang tnh cht chuyn bit.

Redis h tr m rng master-slave nu chng ta mun s an ton hoc m


rng, co gin trong vic lu tr data

Cc c trng c bn ca Redis
1. Data model
Khc vi RDMS nh MySQL, hay PostgreSQL, Redis khng c table (bng).
Redis lu tr data di dng key-value. Thc t th memcache cng lm vy,
nhng kiu d liu ca memcache b hn ch, khng a dng c nh Redis, do
khng h tr c nhiu thao tc t pha ngi dng. Di y l s lc v
cc kiu d liu Redis dng lu value.

STRING: C th l string, integer hoc float. Redis c th lm vic vi c


string, tng phn ca string, cng nh tng/gim gi tr ca integer, float.
LIST: Danh sch lin kt ca cc strings. Redis h tr cc thao tc push,
pop t c 2 pha ca list, trim da theo offset, c 1 hoc nhiu items ca list, tm
kim v xa gi tr.
SET: Tp hp cc string (khng c sp xp). Redis h tr cc thao tc
thm, c, xa tng phn t, kim tra s xut hin ca phn t trong tp hp.
Ngoi ra Redis cn h tr cc php ton tp hp, gm intersect/union/difference.
HASH: Lu tr hash table ca cc cp key-value, trong key c sp
xp ngu nhin, khng theo th t no c. Redis h tr cc thao tc thm, c, xa
tng phn t, cng nh c tt c gi tr.
ZSET (sorted set): L 1 danh sch, trong mi phn t l map ca 1
string (member) v 1 floating-point number (score), danh sch c sp xp theo
score ny. Redis h tr thao tc thm, c, xa tng phn t, ly ra cc phn t da
theo range ca score hoc ca string.

2. Master/Slave Replication
y khng phi l c trng qu ni bt, cc DBMS khc u c tnh nng ny,
tuy nhin chng ta nu ra y nhc nh rng, Redis khng km cnh cc
DBMS v tnh nng Replication.

3. Clustering
Nu s dng MySQL, bn phi tr ph c th s dng tnh nng ny, cn vi h
NoSQL DBMS, tnh nng ny hon ton free. Tuy nhin, Redis Cluster ang
phin bn alpha, v chng ta s cng ch i phin bn chnh thc ra i. Chng ta
s cp n tnh nng ny qua 1 bi vit khc, khi Redis Cluster c phin bn
chnh thc.

4. In-memory
Khng nh cc DBMS khc lu tr d liu trn a cng, Redis lu tr d liu
trn RAM, v ng nhin l thao tc c/ghi trn RAM. Vi ngi lm CNTT
bnh thng, ai cng hiu thao tc trn RAM nhanh hn nhiu so vi trn cng,
nhng chc chn chng ta s c cng cu hi: iu g xy ra vi data ca chng ta
khi server b tt?
R rng l ton b d liu trn RAM s b mt khi tt server, vy lm th no
Redis bo ton data v vn duy tr c u th x l d liu trn RAM. Chng ta
s cng tm hiu v c ch lu d liu trn cng ca Redis trong phn tip theo
ca bi vit.

Redis Persistence
Nh cp trn, mc d lm vic vi data dng key-value lu tr trn RAM,
Redis vn cn lu tr d liu trn cng. C 2 l do cho vic ny, 1 l m bo
ton vn d liu khi c s c xy ra (server b tt ngun) cng nh ti to li
dataset khi restart server, 2 l gi data n cc slave server, phc v cho tnh
nng replication. Redis cung cp 2 phng thc chnh cho vic sao lu d liu ra
cng, l RDB v AOF.

1. RDB (Redis DataBase file)


Cch thc lm vic
RDB thc hin to v sao lu snapshot ca DB vo cng sau mi khong thi
gian nht nh.

u im

RDB cho php ngi dng lu cc version khc nhau ca DB, rt thun tin
khi c s c xy ra.

Bng vic lu tr data vo 1 file c nh, ngi dng c th d dng chuyn


data n cc data centers, my ch khc nhau.

RDB gip ti u ha hiu nng ca Redis. Tin trnh Redis chnh s ch lm


cc cng vic trn RAM, bao gm cc thao tc c bn c yu cu t pha client
nh thm/c/xa, trong khi 1 tin trnh con s m nhim cc thao tc disk
I/O. Cch t chc ny gip ti a hiu nng ca Redis.

Khi restart server, dng RDB lm vic vi lng data ln s c tc cao


hn l dng AOF.

Nhc im

RDB khng phi l la chn tt nu bn mun gim thiu ti a nguy c


mt mt d liu. Thng thng ngi dng s set up to RDB snapshot 5 pht 1
ln (hoc nhiu hn). Do vy, trong trng hp c s c, Redis khng th hot
ng, d liu trong nhng pht cui s b mt.

RDB cn dng fork() to tin trnh con phc v cho thao tc disk I/O.
Trong trng hp d liu qu ln, qu trnh fork() c th tn thi gian v server s
khng th p ng c request t client trong vi milisecond hoc thm ch l 1
second ty thuc vo lng data v hiu nng CPU.

2. AOF (Append Only File)


Cch thc lm vic
AOF lu li tt c cc thao tc write m server nhn c, cc thao tc ny s c
chy li khi restart server hoc ti thit lp dataset ban u.

u im

S dng AOF s gip m bo dataset c bn vng hn so vi dng


RDB. Ngi dng c th config Redis ghi log theo tng cu query hoc mi
giy 1 ln.

Redis ghi log AOF theo kiu thm vo cui file sn c, do tin trnh seek
trn file c sn l khng cn thit. Ngoi ra, k c khi ch 1 na cu lnh c ghi
trong file log (c th do a b full), Redis vn c c ch qun l v sa cha li
(redis-check-aof).

Redis cung cp tin trnh chy nn, cho php ghi li file AOF khi dung
lng file qu ln. Trong khi server vn thc hin thao tc trn file c, 1 file hon
ton mi c to ra vi s lng ti thiu operation phc v cho vic to dataset
hin ti. V 1 khi file mi c ghi xong, Redis s chuyn sang thc hin thao tc
ghi log trn file mi.

Nhc im

File AOF thng ln hn file RDB vi cng 1 dataset.

AOF c th chm hn RDB ty theo cch thc thit lp khong thi gian
cho vic sao lu vo cng. Tuy nhin, nu thit lp log 1 giy 1 ln c th t
hiu nng tng ng vi RDB.

Developer ca Redis tng gp phi bug vi AOF (mc d l rt him),


l li AOF khng th ti to li chnh xc dataset khi restart Redis. Li ny cha
gp phi khi lm vic vi RDB bao gi.

Dng RDB hay AOF?


Cu hi t ra l, chng ta nn dng RDB hay AOF?
Mi phng thc u c u/nhc im ring, v c l cn nhiu thi gian lm
vic vi Redis cng nh ty theo ng dng m a ra la chn thch hp. Nhiu
ngi chn AOF bi n m bo ton vn d liu rt tt, nhng Redis developer
li khuyn co nn dng c RDB, bi n rt thun tin cho vic backup database,
tng tc cho qu trnh restart cng nh trnh c bug ca AOF.
Cng cn lu thm rng, Redis cho php khng s dng tnh nng lu tr thng
tin trong cng (khng RDB, khng AOF), ng thi cng cho php dng c 2
tnh nng ny trn cng 1 instance. Tuy nhin khi restart server, Redis s dng

AOF cho vic ti to dataset ban u, bi AOF s m bo khng b mt mt d


liu tt hn l RDB.

Kt
Bi vit trn y a ra nhng c trng c bn ca Redis, cng nh nhng vn
ngi dng cn lu tm khi s dng Redis. Trong cc bi vit tip theo, chng
ta s cng thc hnh Redis tm hiu r hn v cc function ca DBMS ny.

See more
Disqus seems to be taking longer than usual. Reload?
PreviousNextTrang ch

about | portfolio | lab | ghost | duyetdev | twitter


[c] 2014 LvDuit mi quyn c bo lu bi

Memcached th n gin nht, ch c dng key-value, tt c d liu lu


trong RAM. V lu l Memcached ch l tng cache, ko c tnh
persistent, tc l kh backup d liu, v d liu c th mt (ci ny l t
l eviction/reclaim xy ra khi full b nh, memcached dng thut ton
y cc key t dng hoc key c nht ra). Ngoi ra memcached cn c
khi nim slab, chunk, chunk grow factor, CAS v.v.
Redis th phc tp hn, c nhiu kiu d liu string, hashes, sets, sorted
sets, transaction, pub/sub v.v.v hnh nh cn cho php scripting theo

ngn ng LUA (ci ny mnh cha nghin cu). Kiu string th ging
ht memcached, tc l key-value. Cc kiu kia c c trng khc nhau.
Kiu string cho php t expire time, nu ko t th key s tn ti mi
mi. Redis ging memcached l memory-mapped, tc l tt c d liu c
y ht vo RAM (c cch y vo swap), v cho php theo mt
khong thi gian th lu mt bn dump ca tt c d liu vo 1 file.
Redis hn memcached mt im na l cho php replication. Nhng
km memcached mt im l hay b dng rt nhiu RAM. D liu file
dump tm khong 1GB, nhng map vo RAM ln tm 2GB

You might also like