美文网首页
Redis知识点总结

Redis知识点总结

作者: 凤凤思密达萌萌哒 | 来源:发表于2020-05-04 11:20 被阅读0次

    一、redis介绍

    redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。官网:http://www.redis.io

    1、redis特点

    1.丰富的数据结构 ---set、zset、string、list、hash等数据结构的存储。
    2.支持持久化。

    1. 支持事务 ---事务是一个完整的动作,要么全部执行,要么全部不做。
      支持主从

    2、缓存

    1、类型:数据缓存、页面缓存
    2、形式:

    • 页面缓存经常用在内存管理系统里边
    • 数据缓存经常用在页面的具体数据里边

    3、缓存服务器的作用:加快访问速度,缓解数据库压力

    3、redis和memcache比较

    1、Redis不仅仅支持简单的k/v类型的数据,同时还提供了list、set、zset、hash等数据结构的存储。
    2、Redis支持master-slave模式应用。
    3、Redis支持数据的持久化。

    二、安装Redis

    1、安装单机版Redis
     ---创建工作目录
    [root@redis-master ~]# mkdir -p /data/application    
    ---下载Redis
    [root@redis-master ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz
    ---解压
    [root@redis-master ~]# tar xzf redis-4.0.9.tar.gz -C /data/application/ 
    [root@redis-master ~]# cd /data/application/
    [root@redis-master application]# mv redis-4.0.9/ redis 
    [root@redis-master application]# cd redis/
    ---安装编译工具
    [root@redis-master redis]# yum install -y gcc make
    [root@redis-master redis]# make
    注意:如果报错请将刚才解压的安装包删除掉,再次重新解压并进行make安装即可。
    
    ---备份
    [root@redis-master redis]# cp redis.conf redis.conf.bak
    [root@redis-master redis]# vim redis.conf 
    修改以下内容:
    bind 192.168.124.100  #只监听内网IP
    daemonize yes     #开启后台模式将on改为yes
    timeout 300      #连接超时时间
    port 6379                      #端口号
    dir /data/application/redis/data  #本地数据库存放持久化数据的目录该目录-----需要存在
    pidfile /var/run/redis_6379.pid  #定义pid文件
    logfile /var/log/redis.log  #定义log文件
    
    ---创建存放数据的目录
    [root@redis-master redis]# mkdir /data/application/redis/data
    
    ---配置redis为systemctl启动
    [root@redis-master redis]# cd /lib/systemd/system
    [root@redis-master system]# vim redis.service
    [Unit]                //基础
    Description=Redis     //描述
    After=network.target
    
    [Service]            //服务信息
    ExecStart=/data/application/redis/src/redis-server /data/application/redis/redis.conf  --daemonize no      //启动服务的命令
    ExecStop=/data/application/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown                              //停止服务的命令
    [Install]
    WantedBy=multi-user.target
    
    启动服务:
    [root@redis-master system]# systemctl daemon-reload
    [root@redis-master system]# systemctl start redis.service
    
    

    2、登录Redis

    [root@redis-master system]# cd /data/application/redis/src/
    [root@redis-master src]# ./redis-cli -h 192.168.124.100 -p 6379
    192.168.246.202:6379> ping     ---测试redis是否可以用
    PONG
    192.168.246.202:6379> set name newrain    #设置key--name,并设置值
    OK
    192.168.246.202:6379> get name    #获取到key
    "newrain"
    
    3、redis的相关工具
    ./redis-benchmark     #用于进行redis性能测试的工具
    ./redis-check-dump    #用于修复出问题的dump.rdb文件
    ./redis-cli           #redis的客户端
    ./redis-server        #redis的服务端
    ./redis-check-aof     #用于修复出问题的AOF文件
    ./redis-sentinel      #用于集群管理
    
    

    三、数据持久化

    开启持久化功能后,重启redis,数据会自动通过持久化文件恢复!

    1、redis持久化 ---两种方式RDB、AOF
    1. RDB:是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上。
      特点:周期性、不影响数据写入、高效性、完整性较差。
    2. AOF:将redis执行过的所有指令记录下来,在下次redis重新启动时,把之前写的指令从前到后再重复执行一遍,就可以实现数据恢复了。
      特点:实时性、完整性较好、体积大(记录数据的指令,删除数据的指令都被记录下来)
    2、持久化配置

    1、RDB默认开启

    [root@redis-master src]# cd ..
    [root@redis-master redis]# vim redis.conf
    #dbfilename:持久化数据存储在本地的文件
    dbfilename dump.rdb
    #dir:持久化数据存储在本地的路径
    dir /data/application/redis/data
    ##snapshot触发的时机,save <seconds> <changes>  
    ##如下为900秒后,至少有一个变更操作,才会snapshot  
    ##对于此值的设置,需要谨慎,评估系统的变更操作密集程度  
    ##可以通过“save “”来关闭snapshot功能  
    #save时间,以下分别表示更改了1个key时间隔900s进行持久化存储;更改了10个key300s进行存储;更改10000个key60s进行存储。
    save 900 1
    save 300 10
    save 60 10000
    ##当snapshot时出现错误无法继续时,是否阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常等  
    stop-writes-on-bgsave-error yes  
    ##是否启用rdb文件压缩,默认为“yes”,压缩往往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短的网络传输时间  
    rdbcompression yes 
    

    2、客户端使用命令进行持久化sava存储

    方式一:
    [root@redis-master src]# ./redis-cli -h 192.168.124.100 -p 6379 save     #前台进行存储
    OK
    方式二:
    [root@redis-master src]# ./redis-cli -h 192.168.124.100 -p 6379 bgsave  #后台进行存储
    

    注意:每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的只同步新数据。如果数据量大的话,而且写操作比较多,必然会引起大量的磁盘io操作,可能会严重影响性能。
    save方式:持久化前面的所有数据(rdb模式没开时,后续的数据不会进行备份)

    3、AOF默认关闭--开启

    [root@redis-master src]# cd ..
    [root@redis-master redis]# vim redis.conf
    修改如下:
    appendonly yes
    

    1、只有在yes下,AOF重写/文件同步等特性才会生效
    2、指定AOF文件名称appendfilename appendonly.aof
    3、指定aof操作中文件同步策略,有三个合法值:always everysec no,默认为everysec appendfsync everysec
    4、触发aof rewrite的最小文件尺寸 auto-aof-rewrite-min-size 64mb
    5、当Aof log增长超过指定比例时,重写log file, 设置为0表示不自动重写Aof 日志,重写是为了使aof体积保持最小,而确保保存最完整的数据。
    auto-aof-rewrite-percentage 100

    四、Redis主从配置

    1、主从用法
    1. redis支持主从同步,也支持一主多从以及多级结构。
    2. 主从同步时异步进行。主从同步不会影响主逻辑,也不会降低redis的处理性能。
    3. 主从结构中,从服务器为只读模式,这样避免从服务器的数据被误修改。但是从服务器可以接受CONFIG等指令,因此不应该直接暴露到不安全的网络环境中。
    2、主从同步原理

    从服务器会向主服务器发出SYNC指令,当主服务器接到此命令后,就会调用BGSAVE指令来创建一个子进程专门进行数据持久化工作。也就是将主服务器的数据写入RDB文件中,在数据持久化期间,主服务器将执行的写指令都缓存在内存中。

    BGSAVE指令执行结束,主服务器将持久化好的RDB文件发送给从服务器,从服务器接受此文件后将其存储到磁盘上,然后再将其读取到文件中。这个动作结束后,主服务器会将这段时间缓存的写指令再以redis协议的格式发送给从服务器。 image.png

    五、redis-sentinel ---哨兵模式

    1、哨兵简介

    Sentinel哨兵是用于监控Redis集群Master状态的工具。

    2、作用
    1. Master状态检测
    2. Master异常, 则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave
    3. 主从切换后, master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
    3、工作模式
    1. 每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
    2. 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线
    3. 如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态
      4.当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
    5、配种哨兵模式
    1. 每台机器上修改redis主配置文件redis.conf文件设置:bind 0.0.0.0
    2. 每台机器上修改sentinel.conf配置文件:修改如下配置
    [root@redis-master src]# cd ..
    [root@redis-master redis]# vim sentinel.conf
    sentinel monitor mymaster 10.0.0.137 6379 2      #当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。 (slave上面写的是master的ip,master写自己ip)
    sentinel down-after-milliseconds mymaster 3000   #单位毫秒
    sentinel failover-timeout mymaster 10000         #若sentinel在该配置值内未能完成failover(故障转移)操作(即故障时master/slave自动切换),则认为本次failover失败。
    protected-mode no                                #关闭加密模式--新添加到sentinel配置文件中
    
    3. 每台机器启动哨兵服务
    [root@redis-master redis]# ./src/redis-sentinel sentinel.conf &     #放后台执行
    
    

    将master的哨兵模式退出,再将redis服务stop了,在两台slave上面查看其中一台是否切换为master:(没有优先级,为随机切换)

    [root@redis-master redis]# systemctl stop redis.service
    登录slave服务器查看有没有切换
    [root@redis-slave-1 redis]# ./src/redis-cli
    127.0.0.1:6379> info replication
    
    
    6、redis有哪些好处

    1、速度快,数据存在内存,可直接查询。
    2、支持丰富数据类型,支持string、list、set、sorted set,hash
    3、支持事务,操作都是原子性(数据的更改要么全部执行要么全部不执行)
    4、丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

    7、redis安全加密

    客户端在向redis-server发送请求之前,先进行密码验证。当你的redis-server处于一个不太可信的网络环境中时,相信你会用上这个功能。由于redis性能非常高,所以每秒钟可以完成多达15万次的密码尝试,所以你最好设置一个足够复杂的密码,否则很容易被黑客破解。
    requirepass 1122334

    相关文章

      网友评论

          本文标题:Redis知识点总结

          本文链接:https://www.haomeiwen.com/subject/fvceghtx.html