Redis是一个key-value存储系统
和Memcached缓存相比,Redis支持存储的value类型更多,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)。
redis可以持久化,支持主从同步
环境
192.168.2.118 redis主
192.168.2.119 redis从
- redis部署
yum -y install gcc
wget http://download.redis.io/releases/redis-2.8.13.tar.gz
tar -zxvf redis-2.8.13.tar.gz
cd redis-2.8.13
make PREFIX=/usr/local/redis install
cp redis.conf /usr/local/redis/
设置redis的环境变量,在/etc/profile末尾添加
export PATH=/usr/local/redis/bin:$PATH
让环境变量生效
source /etc/profile
后台启动redis及停止redis服务,默认端口是6379
nohup /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf &
#/usr/local/redis/bin/redis-cli -p 6379 shutdown
查看启动情况
ps -ef | grep redis
或
netstat -tunl | grep 6379
- redis主从配置
118服和119服分别部署好redis
在119服的redis配置文件里添加
slaveof 192.168.2.118 6379
快照触发条件为(默认如下)
save 900 1
save 300 10
save 60 10000
save 900 1表示900秒内有1个key被改变,则将数据同步到数据文件rdb里
- 测试主从
启动118和119的redis服务
进入118的redis,查看并添加数据
[root@mysqlm bin]# ./redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set lee1 helloone
OK
127.0.0.1:6379> set lee2 helltwo
OK
127.0.0.1:6379>
进入119查看数据
[root@leeclient redis]# ./bin/redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> keys *
1) "lee2"
2) "lee1"
127.0.0.1:6379> get lee2
"helltwo"
127.0.0.1:6379>
也就是说redis同步成功。
当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作以确保数据的一致,另外也可以开启二级slave、三级slave。
save之间是或关系,只要满足其中一个条件就会触发快照,如果要取消快照,直接注销save行即可。配置文件里,文件默认的保存位置为当前目录下(dir ./)
也可以手动快照,进入redis后执行save
- redis持久化
持久化一般是指把内存的数据保存到磁盘上以避免因断电等原因丢失数据
半持久化是指存在内存中的数据通过异步方式定期的保存到硬盘中去(rdb)
全持久化是指存在内存中的数据只要有变化就会存储到硬盘里去(aof)
Redis可以同时开启AOF和RDB,保证数据安全且易于进行备份等操作。如果重启Redis后Redis会使用AOF文件来恢复数据,因为AOF方式的持久化可能丢失的数据更少。Rdb是默认的redis备份方式,通过快照完成,若符合在配置参数里设置的条件redis就会自动把内存中的所有数据快照并把数据存到硬盘里,通过fork函数来实现。
redis默认没有开启aof,可以通过如下参数设置开启
appendonly yes 开启aof
appendfilename appendonly.aof aof文件名
auto-aof-rewrite-percentage 100 aof文件大小超过上一次重写时aof的大小百分比则重写
auto-aof-rewrite-min-size 64mb
appendfsync always 每次执行写入都会同步,其他选项包括everysec和no
设置完成后重启redis,就可以看到reids目录下有appendonly.aof文件,redis主有写入数据,redis从的该文件就会同步数据
当从数据库由于某些意外导致崩溃或停止运行,再重启后主数据库会自动将数据同步过来,无需做其他操作,所以无需担心数据丢失。比如在119服停止redis服务,然后再118上的redis写入数据,此时再启动119的redis服务时,会自动把118上写入的数据同步过来。
当主数据库崩溃时,可以通过在从数据库中执行SLAVEOF NO ONE命令把从数据库提升成主数据库继续服务,同时当原来的主数据库启动并正常运行后在配置参数添加SLAVEOF命令将其设置成新的主数据库的从数据库,即可将数据同步回来。比如在118服停止redis服务,然后进入119的redis执行SLAVEOF NO ONE命令,在118redis的redis.conf里配置slaveof,重启118redis,此时就可以把119上的数据同步到118上。(注意,需要注释119的slaveof参数)
若redis启动不起来,可以查看nohup.out文件内容来获取相关信息(比如可能是配置文件里某些参数配置错误)