redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

1 安装

1.卸载通过yum安装的redis数据库
yum remove redis -y 

2.通过源码编译安装
    1.下载redis的源代码
        wget http://download.redis.io/releases/redis-4.0.10.tar.gz
    2.解压缩源码
        tar -zxf  redis-4.0.10.tar.gz
    3.进入redis源码目录,编译安装,生成可执行命令
       redis不需要执行configure,因为他已经有了makefile
    4.通过如下2个命令,生成redis的可执行文件  
    make &&  make install
    5.此时已经可以启动redis服务端了
    
3.安全性能下的启动redis ,在redis.conf中,更改默认端口,添加密码,开启安全模式

#手动创建redis的配置文件
touch  s17redis.conf 
#s17redis.conf 内容如下
[root@master redis-4.0.10]# cat s17redis.conf 
bind 0.0.0.0
protected-mode yes
port 6888
daemonize yes
requirepass  alexdsb

4.启动redis服务端,指定配置文件
redis-server s17redis.conf 

5.测试访问redis服务端
redis-cli  -p 6888  
[root@localhost redis-4.0.10]# redis-cli -p 6888 -a 123456
进入之后,可以通过auth指令,进行redis密码验证
验证通过后,可以发送ping,得到pong代表redis正常

6.
过滤出 空白行,以及注释行意外的,有用信息
grep -v  "^#" redis.conf |  grep -v  "^$"

学习redis常用命令

set  key   value  #设置一个键值对
get   key  #获取key的值
keys *         查看所有key
type key      查看key类型
expire key seconds    过期时间
ttl key     查看key过期剩余时间        -2表示key已经不存在了
persist     取消key的过期时间   -1表示key存在,没有过期时间

exists key     判断key存在    存在返回1    否则0
del keys     删除key    可以删除多个
dbsize         计算key的数量

lpushx/rpushx                列表存在则添加值,不存在不处理  **** 
flushdb

redis的哈希结构 ,如同python字典套字典

hmset  new:2  title  "tian qi yu bao"  content "tian qi bu cuo"  redian "jiaodain fangtan "

redis持久化  rdb 模式 与aof模式

rdb 模式持久化   (可能会造成数据丢失)
第一步,准备一个redis配置文件,  rdbredis.conf  
写入如下内容

daemonize yes           #后台运行redis 
port 6379           #redis端口 
logfile /data/6379/redis.log        #redis日志文件位置
dir /data/6379/            #指定redis数据文件夹放在哪 
dbfilename  s17dump.rdb           #指定rdb的数据文件    
bind 0.0.0.0
requirepass redhat              #指定redis的密码    
save 900 1                  #代表  900秒内 有1个修改key的操作,就进行持久化       
save 300 10                     # 300秒内 有10个修改类的操作,就持久化
save 60  10000      #  60秒内 有10000个修改类的操作,就持久化

2.通过配置文件启动 redis服务端,支持rdb持久化的 服务端
#并且可以通过 save指令 手动触发持久化数据 

redis-server  rdbredis.conf

aof持久化模式

aof持久化模式 ,不需要你手动的save触发持久化

配置方式如下
1.修改redis的配置文件,如下,再次创建一个新的aof配置文件
touch  aofredis.conf 
#编辑配置文件,写入如下内容

vim  aofredis.conf 
#写入如下内容  
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
appendonly yes   开启持久化的参数,就是这个
appendfsync everysec  每秒进行一次aof持久化 

3.支持aof方式的持久化
redis-server  aofredis.conf 

4.验证 aof持久化,
写入数据后,杀死进程,
再次启动redis,检查数据

不重启的情况下,切换rdb数据到aof模式下

1 环境准备  确保是redis2.0 以上的版本
2 登录此时的rdb数据库,通过两条命令,临时修改切换到aof模式下,也是把rdb数据转化为aof的模式
127.0.0.1:6379> CONFIG set appendonly yes   #开启AOF功能
OK
127.0.0.1:6379> CONFIG SET save ""  #关闭RDB功能
OK
3 此时还是临时生效,必须修改配置文件,永久生效

[root@master redis-4.0.10]# cat rdbredis.conf
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379/
bind 0.0.0.0
appendonly yes
appendfsync everysec

redis 主从同步机制

1 环境准备3个  redis数据库实例 
redis-6379.conf 
port 6379  
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dbfilename dump.rdb
dir /data/6379

redis-6380.conf 
port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
SLAVEOF 127.0.0.1  6379
    
redis-6381.conf 
port 6381
daemonize yes
pidfile /data/6381/redis.pid
loglevel notice
logfile "/data/6381/redis.log"
dbfilename dump.rdb
dir /data/6381
SLAVEOF 127.0.0.1  6379

2.分别启动三个 数据库 

3.此时已经是一主两从的身份了 

4.可以演示在主库写入数据,从库读取数据的实验

手动切换主从同步的故障(当主库挂掉的时候,怎么办 )

1.模拟主库挂掉,kill杀死主库的进程

2.此时俩从库,群龙捂手

3.手动的切换两个从库的身份,让其中一个 为新的master

选举6381为新的master,只需要在6381下输入 slaveof on one 

然后配置6380为新的slave  ,只需要 在6380下输入 slaveof  127.0.0.1  6381  

4.此时新的一主一从 就好了
主 6381  
从6380  

5,可以测试写入数据 


-- 一条命令 --
sed  's/6379/6380/g'  redis-6379.conf  > redis-6380.conf  快速替换加创建新的