===> Redis内存数据库简介:
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
===> Redis 的特点:
->基于内存
-> 持久化: RDB、AOF
-> 消息机制:支持String,只支持Topic的消息(广播)
-> 丰富的数据类型
-> 支持简单的事务
-> 支持主从复制
-> HA(哨兵): 对版本有要求,需要 2.4 版本以上
===> Redis的安装和配置: 需要gcc的编译器
-> Redis 单机部署:
1
2
3
|
tar
-
zxvf redis
-
3.0
.
5.tar
.gz
make
make PREFIX
=
/
app
/
redis install
|
-> Redis的相关命令
redis-benchmark 提供的一个压力测试工具,模拟:10万操作
redis-check-aof 检查AOF日志文件
redis-check-dump 检查RDB快照文件
redis-cli 命令行
redis-sentinel 哨兵(Redis的HA) -----> 配置文件:sentinel.conf 2.4版本以上
redis-server 服务器
-> 配置文件
--- redis.conf
daemonize yes 改成yes 后,启动后会在后台运行
port 6379
-> 服务启动命令:redis-server conf/redis.conf
-> 客户端连接命令: redis-cli -p 6379 | redis-cli -h 192.168.10.210 -p 6379
===> Redis 集群的安装和配置:(星型架构,线型架构)
-> 此处只讲解星型架构(此架构结构为单台服务器上使用不同端口启动三个服务组成集群,多台服务器同理)
--- 主:6379端口 (关闭 RDB 和 AOF)
--- 从:6380, 6381端口 (开启 RDB 和 AOF)
-> 配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
redis6379.conf
daemonize yes
#save 900 1
#save 300 10
#save 60 10000
pidfile
/
app
/
redis
/
pids
/
redis_6379.pid
logfile
"/app/redis/logs/redis_6379/redis.log"
dbfilename dump.rdb
dir
"/data/redis_data/redis_6379"
appendonly no
appendfilename
"appendonly6379.aof"
redis6380.conf
port
6380
slaveof
192.168
.
157.11
6380
pidfile
/
app
/
redis
/
pids
/
redis_6380.pid
logfile
"/app/redis/logs/redis_6380/redis.log"
dbfilename dump.rdb
dir
"/data/redis_data/redis_6380"
appendonly yes
appendfilename
"appendonly6380.aof"
redis6381.conf
port
6381
slaveof
192.168
.
157.11
6379
pidfile
/
app
/
redis
/
pids
/
redis_6381.pid
logfile
"/app/redis/logs/redis_6381/redis.log"
dbfilename dump.rdb
dir
"/data/redis_data/redis_6381"
appendonly yes
appendfilename
"appendonly6381.aof"
|
(*)注意:默认:从节点只读
1
2
3
|
(error) READONLY You can't write against a read only slave.
修改参数:
slave
-
read
-
only yes
|
-> Redis的HA:哨兵机制(要在解压的安装包中copy sentinel.conf 文件到 /conf 目录下)
1
2
3
4
5
6
7
8
9
10
|
sentinel monitor mymaster
192.168
.
10.210
6379
1
# IP 端口 哨兵个数
sentinel auth
-
pass
<master
-
name> <password>
# 配置连接主节点的密码
sentinel down
-
after
-
milliseconds mymaster
30000
# 表示 30 秒内如果没有收到主节点的心跳,哨兵就认为主节点down
sentinel parallel
-
syncs mymaster
1
# 选举出新的主节点后,可以同时连接其他从节点的个数
sentinel failover
-
timeout mymaster
180000
# 失败切换时,允许的最大时间
|
---哨兵启动命令:redis-sentinel sentinel.conf
-> Redis的分片:
---Twemproxy 是一种代理分片机制, 由 Twitter 开源
Twemproxy 作为代理,可接受来自多个程序 的访问,按照路由规则,转发给后台的各个 Redis 服务器, 再原路返回
--- 安装Twemproxy
1
2
3
4
|
git clone https:
/
/
github.com
/
twitter
/
twemproxy.git
cd twemproxy
/
CFLAGS
=
"-ggdb3 -O0"
autoreconf
-
fvi && .
/
configure
-
-
prefix
=
/
app
/
proxy
-
-
enable
-
debug
=
log && make && make install
|
--- 配置文件:nutcracker.yml (需要在解压的安装包/conf 目录下copy 到安装目录的 conf 目录下)
1
2
3
4
5
6
7
8
9
10
11
|
alpha:
listen:
127.0
.
0.1
:
22121
hash
: fnvla_64
distribution: ketama
auto_eject_hosts: true
redis: true
server_retry_timeout:
2000
server_failure_limit:
1
servers:
-
192.168
.
10.210
:
6380
-
192.168
.
10.210
:
6381
|
--- 检查配置文件是否正确: ./nutcracker -t conf/nutcracker.yml
--- 启动代理服务器: ./nutcracker -d -c conf/nutcracker.yml
--- 此时连接Redis 需要使用 Twemproxy 配置的端口连接: redis-cli -p 22121
===> Redis的操作:基于key-value形式
->
---
===> Redis的事务: 不是真正的事务
-> Redis的事务的本质:将一组操作放入队列中,批量执行
-> 对比Oracle和Redis的事务
-> Redis 的事务实例:(银行转账)
1
2
3
4
5
6
|
set
tom
1000
set
mike
1000
multi
decrby tom
100
incrby mike
100
exec
|
===> Redis的锁机制
-> 核心:当事务提交的时候,如果监控的值,发生变化,则提交失败
命令:watch
-> Redis 的锁实例:(买票)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
set
ticket
1
set
tom
1000
用户一:tom
multi
decr ticket
decrby tom
100
exec
-
-
-
-
-
-
-
> 提交的时候,慢了一点
1
) (integer)
-
1
=
=
=
=
> 票数不可能是
-
1
2
) (integer)
900
用户二:在tom提交前,已经把票买走了
decr ticket
|
===> Redis的消息机制
-> Redis 消息系统类型
--- 同步消息系统:需要对方的回答
--- 异步消息系统:不需要等待对方回答
-> Redis 消息类型
--- Queue: 队列(点对对)
--- Topic: 主题 (广播)
(*)Redis和Kafka:只支持Topic
(*) JMS: Java Message Service ----> 都支持:Queue和Topic
推荐:Weblogic
-> Redis 消息相关命令
publish: 发布消息 指定频道
subscribe:订阅消息 指定频道
psubscribe:订阅消息 使用通配符指定频道
===> Redis的持久化: RDB、AOF
-> 持久化作用:进行恢复
-> RDB:快照的方式。每隔一段时间,把内存中的数据写到rdb文件中
--- 优点:恢复的速度快
--- 缺点:如果在两次RDB之间发生了掉电,数据肯定丢失
--- 参数:
规则:从下往上
save 900 1 在15分钟内,如果有1个key的value发生了变化,就产生RDB文件
save 300 10 在5分钟内,如果有10个key的value发生了变化,就产生RDB文件
save 60 10000 在60秒内,如果有1w个key的value发生了变化,就产生RDB文件
stop-writes-on-bgsave-error yes 如果在写RDB文件的时候产生了错误,停止新的数据写入
rdbcompression yes 是否压缩(优点:节约了空间 缺点:恢复的效率低),可以设置为:no
rdbchecksum yes 校验和来检查RDB文件是否是好的
dbfilename dump.rdb 如果在集群下,一台主机上运行多个Redis的实例,建议区别rdb文件
dir ./ 保存的目录
-> AOF:append only file(记录日志)
--- 优点:数据安全性高
--- 缺点:恢复速度慢,需要重做日志,达到恢复的目的
--- 默认禁用
--- 参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
appendonly no
=
=
=
> yes
#开启AOF
appendfilename
"appendonly.aof"
# 如果在集群下,一台主机上运行多个Redis的实例,建议区别aof文件
# 什么时候记录日志???
# appendfsync always # 每个操作都记录日志。最安全,性能最差
appendfsync everysec
# 默认:每秒
# appendfsync no # 由操作系统决定
no
-
appendfsync
-
on
-
rewrite no
# 重写发生的时候,是否写入aof的新日志
# 什么时候执行AOF重写?
auto
-
aof
-
rewrite
-
percentage
100
auto
-
aof
-
rewrite
-
min
-
size
64mb
# 什么是AOF的重写:rewrite
set
i
0
incr i
incr i
=
=
=
=
=
=
> 问题: AOF文件太大了
100
次
*
*
*
*
incr i
最终:i
=
100
# 演示:AOF的重写
模拟:
10
万个操作
bin
/
redis
-
benchmark
-
n
100000
|
===> Redis 问题链接:(找了几个比较经典的问题处理链接,留作收藏,以后备用)
-> http://blog.sina.com.cn/s/blog_a1e9c7910102vmx5.html
-> http://blog.csdn.net/a491857321/article/details/52006376
本文转自 tianshuai369 51CTO博客,原文链接:http://blog.51cto.com/songqinglong/2066611