redis

redis
redis理論Redis:安裝和配置redis安裝配置和使用redisRedis Cluster程序環(huán)境:命令數(shù)據(jù)類型數(shù)據(jù)類型命令redis-cli命令Server相關(guān)的命令:Redis的持久化:redis cluster暫定

理論

存儲系統(tǒng)有三類
RDMS

NOSQL

NEWSQL

NoSQL:
? ACID:
? 原子性僚稿、一致性拖陆、隔離性、持久性未巫;
? 2phase commit, 3phase comit, ...
? non SQL, Not Only SQL; Web 2.0
? www.nosql-databases.orghttps://db-engines.com/en/ranking
CAP理論:一個分布式系統(tǒng)不可能同時滿足C、A排抬、P三個特性于毙,最多可同時滿足其中兩者哥倔;對于分布式系統(tǒng)滿足分區(qū)容錯性幾乎是必須的。
Consistency小腊、Availablity谤碳、Partition tolerence
C:多個數(shù)據(jù)節(jié)點上的數(shù)據(jù)一致;A:用戶發(fā)出請求后的有限時間范圍內(nèi)返回結(jié)果溢豆;可用性P:network partition蜒简,網(wǎng)絡(luò)發(fā)生分區(qū)后,服務(wù)是否依然可用漩仙;容錯性

一般的設(shè)計只能滿足其中兩個
AP :這種情況要求弱的一致性

CP

BASE:BA搓茬,S,E队他,基于CAP演化而來
x BA:Basically Available卷仑,基本可用;S:Soft state麸折,軟狀態(tài)/柔性事務(wù)锡凝,即狀態(tài)可以在一個時間窗口內(nèi)是不同步的;E:Eventually consistency垢啼,最終一致性窜锯;

NoSQL:Not Only SQL

特性:數(shù)據(jù)量大张肾、數(shù)據(jù)變化非常快(數(shù)據(jù)增長快锚扎、流量分布變化大吞瞪、數(shù)據(jù)間耦合結(jié)構(gòu)變化快)、數(shù)據(jù)源很多驾孔;

多種數(shù)據(jù)庫
column Family:列式數(shù)據(jù)庫, hbasedocument:文檔數(shù)據(jù)庫芍秆,mongodbGraphDB:圖式數(shù)據(jù)庫,Neo4j
Multimodel Databases: 多維存儲翠勉,對象數(shù)據(jù)庫Time Series / Streaming Databases:時間序列存儲

?

?
?

Redis:
Redis:Key-value NOSQl

kv cache and store
in-memory

持久化

主從(借助于sentinel 實現(xiàn)一定意義上的HA)

Clustering(分布式)

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.
開源妖啥、內(nèi)存存儲、數(shù)據(jù)結(jié)構(gòu)存儲对碌;數(shù)據(jù)庫荆虱、緩存、消息隊列俭缓;

It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries.
數(shù)據(jù)結(jié)構(gòu):字符串克伊、列表(數(shù)組)、hashes(關(guān)聯(lián)數(shù)組)华坦、集合愿吹、有序集合、bitmaps惜姐、hyperloglogs犁跪、空間索引;

Redis has built-in replication, Lua scripting, LRU e viction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.
內(nèi)建的復(fù)制歹袁、Lua scripting坷衍、LRU、事務(wù)条舔、持久存儲枫耳、高可用(Sentinel,Redis Cluster)

REmote DIctionary Server:數(shù)據(jù)結(jié)構(gòu)服務(wù)器孟抗,k/v迁杨,數(shù)據(jù)結(jié)構(gòu);
內(nèi)存存儲:in-memroy持久化主從(sentinel)Cluster(shard)

redis-check-dump & redis-check-aof
Corrupted RDB /AOF files utilities

安裝和配置redis
安裝
進入這個網(wǎng)站:http://pkgs.org/download/redis

找尋符合的系統(tǒng)凄硼,配置yum源

yum install

配置和使用redis

所有的配置段:grep -i "^###" /etc/redis.conf
基本配置項網(wǎng)絡(luò)配置項持久化相關(guān)配置復(fù)制相關(guān)的配置安全相關(guān)配置Limit相關(guān)的配置SlowLog相關(guān)的配置INCLUDESAdvanced配置

通用配置項:
daemonize, supervised, loglevel, pidfile, logfile,

databases:設(shè)定數(shù)據(jù)庫數(shù)量铅协,默認為16個,每個數(shù)據(jù)庫的名字均為整數(shù)摊沉,從0開始編號狐史,默認操作的數(shù)據(jù)庫為0;
切換數(shù)據(jù)庫的方法:
SELECT <dbid>

網(wǎng)絡(luò)配置項:
bind IPport PORTprotected-modetcp-backlogunixsocket timeout:連接的空閑超時時長;

安全配置:
requirepass <PASSWORD> # 做認證用的rename-command <COMMAND> <NEW_CMND_NAME>
在AOF或Replication環(huán)境中骏全,不推薦使用苍柏;

Limits相關(guān)的配置:
maxclientsmaxmemory <bytes>maxmemory-policy noeviction
淘汰策略:volatile-lru(擁有過期時間的鍵,最近最少使用), allkeys-lru, volatile-random(擁有過期時間的鍵吟温,隨機), allkeys-random, volatile-ttl(按離終結(jié)時間近的進行淘汰), noeviction(不啟用淘汰機制)
maxmemory-samples 5
淘汰算法運行時的采樣樣本數(shù)序仙;

SlowLog相關(guān)的配置:
slowlog-log-slower-than 10000
單位是微秒突颊;
slowlog-max-len 128
SlowLog記錄的日志最大條目鲁豪;

ADVANCED配置:數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)域支持量
設(shè)置ziplist的鍵數(shù)量最大值律秃,每個值的最大空間爬橡;
hash-max-ziplist-entries 512 hash-max-ziplist-value 64

客戶端輸出緩沖空間的大小:
client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 <hard-limit> <soft-limit> <soft-limit seconds>
Redis Cluster
?
程序環(huán)境:
配置文件:/etc/redis.conf

主程序:/usr/bin/redis-server
6379/tcp

客戶端:/usr/bin/redis-cli

Unit File:/usr/lib/systemd/system/redis.service

數(shù)據(jù)目錄:/var/lib/redis

命令
redis-cli # 安裝完成可以直接連接
?
?

help
To get help about Redis commands type: "help @<group>" to get a list of commands in <group> "help <command>" for help on <command> "help <tab>" to get a list of possible help topics "quit" to exit

數(shù)據(jù)類型
Strings, Lists, Hashs, Sets, Sorted Sets, Bitmaps, Hyperloglogs

數(shù)據(jù)類型
使用hele @下面這些value能查看詳細信息

redis:k/v:
key:直接ASCII字符串棒动;

value:strings, lists, hashes, sets, sorted sets, bitmaps, hyperloglogs

group
group: @generic, @string, @list, @...

string
@string SET GET EXISTS INCR DECR SETNX SETEX INCRBYFLOAT MGET MSET

list
@list LPUSH RPUSH LPOP RPOP LPUSHX RPUSHX LRANGE LINDEX LSET
?

set
@set SADD SPOP SREM SRANDMEMBER SINTER SUNION SDIFF

sort_set
@sorted_set ZADD ZCARD ZCOUNT ZRANK ...
?

hash
@hash HSET HMSET HGET HMGET HKEYS HVALS HDEL HGETALL ...

pubsub
@pubsub PUBLISH SUBSCRIBE UNSUBSCRIBE PSUBSCRIBE PUNSUBSCRIBE ...

?
事務(wù):
通過MULT糙申,EXEC,WATCH等命令實現(xiàn)事務(wù)功能船惨,將一個或多個命令并歸一個操作提請服務(wù)器按順序執(zhí)行的機制
MUTI:啟動一個事務(wù)

EXEC:執(zhí)行一個事務(wù)柜裸;
一次性將事務(wù)中的所有操作執(zhí)行完成后返回給客戶端;

WATCH:樂觀鎖粱锐,EXEC命令執(zhí)行前疙挺,用于監(jiān)控指定數(shù)量鍵,如果如果監(jiān)控中的某任意鍵數(shù)據(jù)被修改怜浅,則服務(wù)器拒絕執(zhí)行事務(wù)

?

?

回顧:
分布式系統(tǒng)兩個基礎(chǔ)理論:CAP/BASE
CAP:AP铐然,CP C、A恶座、P:三者其中之二搀暑; AP:可用性、分區(qū)容錯性跨琳、弱一致性自点;BASE:BA,S脉让,E BA:基本可用桂敛、S:軟狀態(tài)、E:最終一致性侠鳄;
分布式系統(tǒng):
分布式存儲:
NoSQL:
kv埠啃、document、column families伟恶、GraphDB

分布式文件系統(tǒng):文件系統(tǒng)接口
分布式存儲:API碴开,不能掛載;

分布式運算:mapreduce, ...

?

NewSQL:
PingCAP:TiDB(MySQL protocol)...

?
redis:REmote DIctionary Server

數(shù)據(jù)結(jié)構(gòu):String, List, Set, sorted_set, Hash, pubsub ...

命令
redis-cli命令
Usage: redis-cli OPTIONS]]-h HOST-p PORT-a PASSWORD-n DBID
與Connection相關(guān)命令:
help @connection
AUTH <password> ECHO <message>PING QUITSELECT dbid
清空數(shù)據(jù)庫:
FLUSHDB:Remove all keys from the current database 清空當前數(shù)據(jù)庫; FLUSHALL:Remove all keys from all databases 清空所有數(shù)據(jù)庫潦牛;
Server相關(guān)的命令:
CLIENT GETNAME
*CLIENT KILL CLIENT KILL [ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [ADDR ip:port] [SKIPME yes/no] *CLIENT LIST CLIENT PAUSE CLIENT PAUSE timeout CLIENT REPLY CLIENT SETNAME:Set the current connection name SHUTDOWN [NOSAVE|SAVE] INFO:服務(wù)器狀態(tài)信息查看眶掌;分為多個secion; INFO [section]
配置運行時參數(shù)
CONFIG GET # 獲取設(shè)定 CONFIG RESETSTAT #重置計數(shù)器 CONFIG REWRITE #可重寫配置為文件巴碗,讓運行時配置寫入文件 CONFIG SET # 設(shè)置 參數(shù)
?

Redis的持久化:
RDB:snapshotting, 二進制格式朴爬;按事先定制的策略,周期性地將數(shù)據(jù)從內(nèi)存同步至磁盤橡淆;數(shù)據(jù)文件默認為dump.rdb召噩;客戶端顯式使用SAVE或BGSAVE命令來手動啟動快照保存機制;
SAVE:同步逸爵,即在主線程中保存快照具滴,此時會阻塞所有客戶端請求;

BGSAVE:異步师倔;

AOF:Append Only File, fsync
記錄每次寫操作至指定的文件尾部實現(xiàn)的持久化构韵;當redis重啟時,可通過重新執(zhí)行文件中的命令在內(nèi)存中重建出數(shù)據(jù)庫趋艘;

BGREWRITEAOF:AOF文件重寫疲恢;
不會讀取正在使用AOF文件,而是通過將內(nèi)存中的數(shù)據(jù)以命令的方式保存至臨時文件中瓷胧,完成之后替換原來的AOF文件显拳;

?
1.RDB相關(guān)的配置: 快照

*save <seconds> <changes>save 900 1save 300 10save 60 10000
表示:三個策略滿足其中任意一個均會觸發(fā)SNAPSHOTTING操作;900s內(nèi)至少有一個key有變化抖单,300s內(nèi)至少有10個key有變化萎攒,60s內(nèi)至少有1W個key發(fā)生變化;

stop-writes-on-bgsave-error yes
dump操作出現(xiàn)錯誤時矛绘,是否禁止新的寫入操作請求耍休;

rdbcompression yes
是否進行文件壓縮

rdbchecksum yes
對rdb文件進行校驗

dbfilename dump.rdb
指定rdb文件名

*dir /var/lib/redis:rdb
文件的存儲路徑
?

.AOF相關(guān)的配置
appendonly noappendfilename "appendonly.aof"?appendfsync ;將數(shù)據(jù)從內(nèi)核內(nèi)存寫到磁盤上面 Redis supports three different modes: no:redis不執(zhí)行主動同步操作,而是OS進行货矮; everysec:每秒一次羊精; always:每語句一次; no-appendfsync-on-rewrite no 是否在后臺執(zhí)行aof重寫期間不調(diào)用fsync囚玫,默認為no喧锦,表示調(diào)用; auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb 上述兩個條件同時滿足時抓督,方會觸發(fā)重寫AOF燃少;與上次aof文件大小相比,其增長量超過100%铃在,且大小不少于64MB;
重寫過程
redis 主進程通過fork創(chuàng)建子進程

子進程根據(jù)redis內(nèi)存中的數(shù)據(jù)創(chuàng)建數(shù)據(jù)庫重建命令順序于臨時文件中

父進程繼承Client的請求阵具,并會把這些請求中的寫操作繼續(xù)追加到原本的AOF文件碍遍,額外的,這些新的寫請求還會被放置于一個緩沖隊列中

父進程用臨時文件替換老的aof文件
?

aof-load-truncated yes
注意:持久機制本身不能取代備份阳液;應(yīng)該制訂備份策略怕敬,對redis庫定期備份;

RDB與AOF同時啟用: 不建議
(1) BGSAVE和BGREWRITEAOF不會同時進行帘皿;(2) Redis服務(wù)器啟動時用持久化的數(shù)據(jù)文件恢復(fù)數(shù)據(jù)东跪,會優(yōu)先使用AOF;

redis cluster
redis的集群技術(shù):
主/從
主:rw從:read-only
客戶端分片代理分片:
主從復(fù)制
特點:
一個Master可以有多個slave主機鹰溜,支持鏈式復(fù)制虽填;

Master以非阻塞方式同步數(shù)據(jù)至slave主機;

?
配置slave節(jié)點:
redis-cli> SLAVEOF <MASTER_IP> <MASTER_PORT>redis-cli> CONFIG SET masterauth <PASSWORD>
配置參數(shù):
slaveofmasterauth ?[replication] 段的內(nèi)容slave-serve-stale-data yesslave-read-only yes*repl-diskless-sync no no, Disk-backed, Diskless

新的從節(jié)點或某較長時間未能與主節(jié)點進行同步的從節(jié)點重新與主節(jié)點通信奉狈,需要做“full synchronization"卤唉,此時其同步方式有兩種style:
Disk-backend:主節(jié)點新創(chuàng)建快照文件于磁盤中涩惑,而后將其發(fā)送給從節(jié)點仁期;
Diskless:主節(jié)占新創(chuàng)建快照后直接通過網(wǎng)絡(luò)套接字文件發(fā)送給從節(jié)點;為了實現(xiàn)并行復(fù)制竭恬,通常需要在復(fù)制啟動前延遲一個時間段跛蛋;
repl-diskless-sync-delay 5repl-ping-slave-period 10?repl-timeout 60?repl-disable-tcp-nodelay norepl-backlog-size 1mb?slave-priority 100

復(fù)制集群中,主節(jié)點故障時痊硕,sentinel應(yīng)用場景中的主節(jié)點選舉時使用的優(yōu)先級赊级;數(shù)字越小優(yōu)先級越高,但0表示不參與選舉岔绸;

min-slaves-to-write 3:主節(jié)點僅允許其能夠通信的從節(jié)點數(shù)量大于等于此處的值時接受寫操作理逊;
min-slaves-max-lag 10:從節(jié)點延遲時長超出此處指定的時長時,主節(jié)點會拒絕寫入操作盒揉;

sentinel:不能只有一個晋被,至少三個
? 主要完成三個功能:監(jiān)控、通知刚盈、自動故障轉(zhuǎn)移
? 選舉:流言協(xié)議羡洛、投票協(xié)議
配置項:
port 26379?sentinel monitor <master-name> <ip> <redis-port> <quorum>?sentinel auth-pass <master-name> <password>

<quorum>表示sentinel集群的quorum機制,即至少有quorum個sentinel節(jié)點同時判定主節(jié)點故障時藕漱,才認為其真的故障欲侮; s_down: subjectively down o_down: objectively down
sentinel down-after-milliseconds <master-name> <milliseconds>
監(jiān)控到指定的集群的主節(jié)點異常狀態(tài)持續(xù)多久方才將標記為“故障”;
sentinel parallel-syncs <master-name> <numslaves>
指在failover過程中肋联,能夠被sentinel并行配置的從節(jié)點的數(shù)量威蕉;
sentinel failover-timeout <master-name> <milliseconds>
sentinel必須在此指定的時長內(nèi)完成故障轉(zhuǎn)移操作,否則橄仍,將視為故障轉(zhuǎn)移操作失斎驼恰;
sentinel notification-script <master-name> <script-path>
通知腳本,此腳本被自動傳遞多個參數(shù)氓奈;

暫定
發(fā)布和訂閱(publish/subscribe)
頻道:消息隊列

SUBSCRIBE:訂閱一個或多個隊列

PUBLISH:向頻道發(fā)布消息

UNSUBSCRIBE:退訂此前訂閱的頻道

PSUBSCRIBE:模式訂閱

?

? ?
redis-cli -h SENTINEL_HOST -p SENTINEL_PORT redis-cli> SENTINEL masters SENTINEL slaves <MASTER_NAME> SENTINEL failover <MASTER_NAME> SENTINEL get-master-addr-by-name <MASTER_NAME>

豌豆莢:codistwitter:twemproxy

課外實踐:codis的測試和應(yīng)用翘魄;
? ? ? ? ? ?
博客作業(yè): (1) replication, sentinel (2) rdb, aof 課外實踐: (1) codis (2) redis cluster
? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市舀奶,隨后出現(xiàn)的幾起案子暑竟,更是在濱河造成了極大的恐慌,老刑警劉巖育勺,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件但荤,死亡現(xiàn)場離奇詭異,居然都是意外死亡涧至,警方通過查閱死者的電腦和手機腹躁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來南蓬,“玉大人纺非,你說我怎么就攤上這事∽阜剑” “怎么了烧颖?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長窄陡。 經(jīng)常有香客問我炕淮,道長,這世上最難降的妖魔是什么跳夭? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任涂圆,我火速辦了婚禮,結(jié)果婚禮上币叹,老公的妹妹穿的比我還像新娘润歉。我一直安慰自己,他們只是感情好套硼,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布卡辰。 她就那樣靜靜地躺著,像睡著了一般邪意。 火紅的嫁衣襯著肌膚如雪九妈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天雾鬼,我揣著相機與錄音萌朱,去河邊找鬼。 笑死策菜,一個胖子當著我的面吹牛晶疼,可吹牛的內(nèi)容都是我干的酒贬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼翠霍,長吁一口氣:“原來是場噩夢啊……” “哼锭吨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寒匙,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤零如,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后锄弱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體考蕾,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年会宪,在試婚紗的時候發(fā)現(xiàn)自己被綠了肖卧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡掸鹅,死狀恐怖塞帐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情河劝,我是刑警寧澤壁榕,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站赎瞎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏颊咬。R本人自食惡果不足惜务甥,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喳篇。 院中可真熱鬧敞临,春花似錦、人聲如沸麸澜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炊邦。三九已至编矾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間馁害,已是汗流浹背窄俏。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留碘菜,地道東北人凹蜈。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓限寞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仰坦。 傳聞我的和親對象是個殘疾皇子履植,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容