- 论坛徽章:
- 72
|
本帖最后由 cjfeii 于 2016-04-19 09:59 编辑
redis-intro.pdf
(687.5 KB, 下载次数: 26)
简单介绍
REDIS: REmote DIctionary Server
作者:Salvatore Sanfilippo
key-value 存储系统
具有一些丰富的数据结构
还有很多功能,后面一一介绍
数据类型
REDIS_STRING : 字符串
REDIS_LIST : 列表
REDIS_SET : 集合
REDIS_ZSET : 有序集合
REDIS_HASH : 哈希表
可以用TYPE命令查看对象类型
事务介绍
一般事务都具有 ACID 属性
Redis 的事务是不完整的事务
只能保证一个事务中的命令连续执行
事务中间命令出错,并不能回滚
事务执行中服务器挂了,也不能回滚
脚本编程
从 Redis2.6 开始支持 Lua 脚本编程
可以用这种方式实现一些简单事务
类似于 RDBMS 中的存储过程
节省流量
例子:
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
发布订阅
发布订阅(pub/sub)是一种消息通信方式
和消息队列类似
发布订阅不涉及数据的存储,和 Redis 数据库其他功能完全隔离
有两个角色执行不同的动作
消息发布者(publisher)向某个频道(channal)发布消息
消息订阅者(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: 优先删除掉最近最不经常使用的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 版本正式发布
Redis-Cluster 实践
redis3.0开始支持
TODO:
... |
|