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