- 論壇徽章:
- 72
|
本帖最后由 cjfeii 于 2016-04-19 09:59 編輯
redis-intro.pdf
(687.5 KB, 下載次數(shù): 27)
2016-04-19 09:58 上傳
點(diǎn)擊文件名下載附件
簡單介紹
REDIS: REmote DIctionary Server
作者:Salvatore Sanfilippo
key-value 存儲系統(tǒng)
具有一些豐富的數(shù)據(jù)結(jié)構(gòu)
還有很多功能,后面一一介紹
數(shù)據(jù)類型
REDIS_STRING : 字符串
REDIS_LIST : 列表
REDIS_SET : 集合
REDIS_ZSET : 有序集合
REDIS_HASH : 哈希表
可以用TYPE命令查看對象類型
事務(wù)介紹
一般事務(wù)都具有 ACID 屬性
Redis 的事務(wù)是不完整的事務(wù)
只能保證一個事務(wù)中的命令連續(xù)執(zhí)行
事務(wù)中間命令出錯,并不能回滾
事務(wù)執(zhí)行中服務(wù)器掛了,也不能回滾
腳本編程
從 Redis2.6 開始支持 Lua 腳本編程
可以用這種方式實(shí)現(xiàn)一些簡單事務(wù)
類似于 RDBMS 中的存儲過程
節(jié)省流量
例子:
EVAL "local a = redis.call('GET', 'bob:account'); local b = redis.call('GET', 'smith:account'); if not a or not b then return 1 end; a = a - 20; b = b + 20; if not redis.call('MSET', 'bob:account', a, 'smith:account', b) then return 2 end; return 0;" 0
發(fā)布訂閱
發(fā)布訂閱(pub/sub)是一種消息通信方式
和消息隊列類似
發(fā)布訂閱不涉及數(shù)據(jù)的存儲,和 Redis 數(shù)據(jù)庫其他功能完全隔離
有兩個角色執(zhí)行不同的動作
消息發(fā)布者(publisher)向某個頻道(channal)發(fā)布消息
消息訂閱者(subscriber)訂閱某個頻道的消息
持久存儲
Snapshotting (default) -- dump.rdb
AOF -- appendonly.aof
主從復(fù)制
Redis 主從支持多種模式:M-S,S-M-S,M-S-S
使得讀寫分離成為可能
主從之間異步復(fù)制
有這樣一種模式,為提升寫性能,Master 不做持久化,Slave 做持久化
DBA CMD
INFO
DBSIZE
KEYS
CONFIG SET / CONFIG GET
FLUSHDB / FLUSHALL
MONITOR / SLOWLOG GET / SLOWLOG SET
TIME / PING
CLIENT LIST / CLIENT KILL
SAVE / BGSAVE / BGREWRITESAVE / LASTSAVE
SHUTDOWN
Redis 協(xié)議
實(shí)現(xiàn)簡單
解析快速
可讀性好
set mykey myvalue
*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n
Redis 虛擬內(nèi)存
突破內(nèi)存的限制
把不經(jīng)常使用的數(shù)據(jù) swap 到磁盤上,騰出內(nèi)存保持其他數(shù)據(jù)
LRU-Cache
Redis 做 Cache 不需要持久化
置換方法:
noeviction: 不進(jìn)行置換,表示即使內(nèi)存達(dá)到上限也不進(jìn)行置換,所有能引起內(nèi)存增加的命令都會返回error
allkeys-lru: 優(yōu)先刪除掉最近最不經(jīng)常使用的key,用以保存新數(shù)據(jù)
volatile-lru: 只從設(shè)置失效(expire set)的key中選擇最近最不經(jīng)常使用的key進(jìn)行刪除,用以保存新數(shù)據(jù)
allkeys-random: 隨機(jī)從all-keys中選擇一些key進(jìn)行刪除,用以保存新數(shù)據(jù)
volatile-random: 只從設(shè)置失效(expire set)的key中,選擇一些key進(jìn)行刪除,用以保存新數(shù)據(jù)
volatile-ttl: 只從設(shè)置失效(expire set)的key中,選出存活時間(TTL)最短的key進(jìn)行刪除,用以保存新數(shù)據(jù)
Redis-Sentinel
Redis 高可用方案
適用于1主多從的情況,Master 掛掉,Sentinel 負(fù)責(zé)從多個 Slave 中選出一個作為 Master,并將其他的 Slave 連上新的 Master
使用 Raft 選舉算法:raft.github.io/
Redis-Geo
Redis 地理模塊
據(jù)說會在 Redis3.2 版本正式發(fā)布
Redis-Cluster 實(shí)踐
redis3.0開始支持
TODO:
... |
|