Redis基础及进阶

1. redis安装

redis是内存型数据库html

  • 数据默认写入到内存,若是断电,服务器宕机,redis进程挂掉,数据会丢失
  • selenium操做浏览器时,要注意浏览器资源释放,防止内存泄漏,崩溃
  • with open() 默认close关闭文件句柄python

  • word 工具 ,没保存前,数据都放在内存里,保存后,持久化到磁盘上,永久存在mysql

  • mysql是文件型数据库,默认持久化到磁盘上nginx

  1. redis安装学习web

    1.yum安装 ,最简单,配置yum源,yum仓库才能够
    2.源码编译安装, 指定安装路径,自定制第三方扩展模块功能(nginx http  web 80,  443 https, openssl功能扩展 )
    3.rpm软件包手动安装,很垃圾,手动解决依赖关系,不适用
  2. 编译安装redis,三部曲redis

    解决编译安装所需的依赖环境
    yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
    1.下载源代码包
     wget http://download.redis.io/releases/redis-4.0.10.tar.gz
    
    2.解压缩
     tar -zxvf redis-4.0.10.tar.gz
    
    3. 
    ./configure --prefix=/opt/redis/   #释放makefile,告诉gcc编译器,redis的安装路径 
    
    若是默认没有configure脚本,出现了makefile,直接make&&make install 安装便可
    
    4.编译且安装
    make && make install
  3. 编译完成后,便可使用redis
    启动redis服务端sql

    redis-server 直接执行,便可启动服务端,可是,这样很不安全,容易被攻击数据库

  4. 指定配置文件,安全的启动redis服务端vim

    • 更改启动端口
    • 添加redis密码
    • 开启redis安全模式

    redis的默认配置文件是 redis.conf浏览器

    #过滤出配置文件的有益信息(去除空白行和注释行)
    grep -v "^#" redis.conf  |grep -v "^$"
    
    #将redis.conf文件内容输出到s21redis.conf文件中:
    grep -v "^#" redis.conf  |grep -v "^$" >s21redis.conf

    指定配置文件启动
    文件内容:

    bind 192.168.182.130    #绑定服务端地址 
    protected-mode yes    #安全模式 
    port 6800    #端口 
    requirepass  haohaio    #密码                                                                       
    daemonize yes    #后台运行 
    pidfile /var/run/redis_6379.pid    #进程id文件
    loglevel notice    #日志等级
    logfile ""
    #指定文件启动:
    redis-server s21redis.conf
    
    #其中:输入auth 输入密码 haohaio

2. 数据类型

redis是一种高级的key:value存储系统,其中value支持五种数据类型

  • 字符串(strings)
  • 散列(hashes)
  • 列表(lists)
  • 集合(sets)
  • 有序集合(sorted sets)

经常使用命令 :

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的数量
flushdb                                        清除redis全部key,慎用
flushdb                                        清除redis全部key,慎用
flushdb                                        清除redis全部key,慎用
  1. 字符串类型,经过set命令,设置字符串类型的key
    strings类型
    set    设置key
    get 获取key
    append 追加string
    mset 设置多个键值对
    mget 获取多个键值对
    del 删除key
    incr 递增+1
    decr 递减-1

  2. list类型,双向队列
    lpush 从列表左边插
    rpush 从列表右边插
    lrange 获取必定长度的元素 lrange key start stop
    ltrim 截取必定长度列表
    lpop 删除最左边一个元素
    rpop 删除最右边一个元素
    lpushx/rpushx key存在则添加值,不存在不处理

  3. set集合

    redis的集合,是一种无序的集合,集合中的元素没有前后顺序。

    集合相关的操做也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。咱们来看例子:

    sadd/srem 添加/删除 元素
    sismember 判断是否为set的一个元素
    smembers 返回集合全部的成员
    sdiff 返回一个集合和其余集合的差别
    sinter 返回几个集合的交集
    sunion 返回几个集合的并集

  4. 哈希数据结构

    hashes即哈希。哈希是从redis-2.0.0版本以后才有的数据结构。hashes存的是字符串和字符串值之间的映射,好比一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。

    hset 设置散列值
    hget 获取散列值
    hmset 设置多对散列值
    hmget 获取多对散列值
    hsetnx 若是散列已经存在,则不设置(防止覆盖key)
    hkeys 返回全部fileds
    hvals 返回全部values
    hlen 返回散列包含域(field)的数量
    hdel 删除散列指定的域(field)
    hexists 判断是否存在

3. 发布订阅

PUBLISH channel msg
将信息 message 发送到指定的频道 channel

SUBSCRIBE channel [channel ...]
订阅频道,能够同时订阅多个频道

UNSUBSCRIBE [channel ...]
取消订阅指定的频道, 若是不指定频道,则会取消订阅全部频道

PSUBSCRIBE pattern [pattern ...]
订阅一个或多个符合给定模式的频道,正则匹配

PUNSUBSCRIBE [pattern [pattern ...]]
退订指定的规则, 若是没有参数则会退订全部规则

PUBSUB subcommand [argument [argument ...]]
查看订阅与发布系统状态

4. redis持久化

------防止数据丢失,持久化到本地,以文件形式保存

持久化的方式 ,两种 aof和 rdb模式

1.rdb

  1. 触发机制,

    1.手动执行save命令
    2.或者配置触发条件  save  200   10   #在200秒中内,超过10个修改类的操做
  2. 创建redis配置文件,开启rdb功能

    配置文件 s21_rdb.conf 内容以下 ,有关rdb的配置参数是 dbfilename dbmp.rdb ,一个是 save 900 1

    daemonize yes
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379                      #定义持久化文件存储位置
    dbfilename  s21redis.rdb         #rdb持久化文件
    bind  127.0.0.1                     #redis绑定地址
    requirepass redhat                 
    save 900 1                         
    save 300 10                          
    save  60  10000                       
    
    save  20  2  #在20秒内,超过2个修改类的操做

2.aof

--------将你的修改类的操做命令,追加到日志文件中

修改aof配置文件,添加以下参数,核心功能参数是

appendonly yes
appendfsync  always    老是修改类的操做
             everysec   每秒作一次持久化
             no     依赖于系统自带的缓存大小机制

建立aof配置文件s21aof.conf ,内容以下

3.rdb模式下的redis持久化,不重启切换为 aof模式

环境准备
1.准备一个有数据的rdb模式的redis数据库
    准备rdb配置文件
        daemonize yes
        port 6379
        logfile /data/6379/redis.log
        dir /data/6379                   #定义持久化文件存储位置
        dbfilename  s21redis.rdb             #rdb持久化文件
        bind  127.0.0.1                  #redis绑定地址
        requirepass redhat                    
        save 900 1                            
        save 300 10                         
        save  60  10000                      

        save  20  2  #在20秒内,超过2个修改类的操做

    #详细看博客https://www.cnblogs.com/pyyu/p/10061526.html

2.注意想要永久切换为aof,还得修改配置文件方可

5. 主从复制

  1. redis支持多实例的功能,一台机器上,能够运行多个单个的redis数据库

    环境准备,运行3个redis数据库,达到 1主 2从的配置

    主库  6379.conf 
     port 6379
     daemonize yes
     pidfile /data/6379/redis.pid
     loglevel notice
     logfile "/data/6379/redis.log"
     dbfilename dump.rdb
     dir /data/6379
    
    从库 6380
     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 
    
    从库 6381  
     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. 开启主从复制功能

    redis-cli info #查看数据库信息
    redis-cli info replication

    在6380 和6381数据库上 ,配置主从信息,经过参数形式修改配置,临时生效,注意要写入配置文件

    redis-cli -p 6380 slaveof 127.0.0.1 6379
    redis-cli -p 6381 slaveof 127.0.0.1 6379

    此时检查6379的复制信息,以及6380 6381的复制信息

    redis-cli -p 6380 info replication 
    redis-cli -p 6381 info replication

    主从复制是 读写分离的,master可写, slave只读

  3. 模拟主从复制故障,手动切换master-slave身份

    1.杀死6379进程 ,干掉主库 
    
    2.手动切换 6381为新的主库,须要先关闭它的从库身份
    redis-cli -p 6381  slaveof no one 
    
    3.修改6380的新主库是 6381
    redis-cli -p 6380 slaveof  127.0.0.1 6381

6. redis哨兵

redis-sentinel功能

1.环境准备

三个redis数据库实例 ,配置好 1主 2从的配置

6379.conf
    port 6379
    daemonize yes
    logfile "6379.log"
    dbfilename "dump-6379.rdb"
    dir "/var/redis/data/"

6380.conf 
    port 6380
    daemonize yes
    logfile "6380.log"
    dbfilename "dump-6380.rdb"
    dir "/var/redis/data/"
    slaveof 127.0.0.1 6379

6381.conf 
    port 6381
    daemonize yes
    logfile "6381.log"
    dbfilename "dump-6381.rdb"
    dir "/var/redis/data/"
    slaveof 127.0.0.1 6379

三个redis哨兵进程,指定好,检测着谁
也是准备三个配置文件,内容以下

vim sentinel-26379.conf  
    port 26379  
    dir /var/redis/data/
    logfile "26379.log"

    // 当前Sentinel节点监控 192.168.182.130:6379 这个主节点
    // 2表明判断主节点失败至少须要2个Sentinel节点节点赞成
    // mymaster是主节点的别名
    sentinel monitor s21ms  0.0.0.0 6379 2

    //每一个Sentinel节点都要按期PING命令来判断Redis数据节点和其他Sentinel节点是否可达,若是超过20000毫秒20s且没有回复,则断定不可达
    sentinel down-after-milliseconds s21ms  20000

    //当Sentinel节点集合对主节点故障断定达成一致时,Sentinel领导者节点会作故障转移操做,选出新的主节点,原来的从节点会向新的主节点发起复制操做,限制每次向新的主节点发起复制操做的从节点个数为1
    sentinel parallel-syncs s21ms 1

    //故障转移超时时间为180000毫秒
    sentinel failover-timeout s21ms 180000


#三个哨兵的配置文件,如出一辙,仅仅是端口的区别  
#三个哨兵的配置文件,如出一辙,仅仅是端口的区别  
#三个哨兵的配置文件,如出一辙,仅仅是端口的区别  

sed "s/26379/26380/g" sentinel-26379.conf >sentinel-26380.conf
配置sentinel-26380.conf  

sed "s/26379/26381/g" sentinel-26379.conf >sentinel-26381.conf
配置sentinel-26381.conf

2.分别启动 三个redis数据库, 以及三个 哨兵进程 ,注意 ,哨兵第一次启动后,会修改配置文件,若是错了,得删除配置文件,从新写
2.分别启动 三个redis数据库, 以及三个 哨兵进程 ,注意 ,哨兵第一次启动后,会修改配置文件,若是错了,得删除配置文件,从新写
2.分别启动 三个redis数据库, 以及三个 哨兵进程 ,注意 ,哨兵第一次启动后,会修改配置文件,若是错了,得删除配置文件,从新写

配置文件在这里

sentinel-26379.conf 
port 26379  
dir /var/redis/data/
logfile "26379.log"
sentinel monitor s21ms  127.0.0.1  6379 2
sentinel down-after-milliseconds s21ms  20000
sentinel parallel-syncs s21ms 1
sentinel failover-timeout s21ms 180000
#加一个后台运行
daemonize yes 
    
    #仅仅是端口的不一样
sentinel-26380.conf


sentinel-26381.conf

#启动
 redis-sentinel sentinel-26379.conf 
 redis-sentinel sentinel-26380.conf 
 redis-sentinel sentinel-26381.conf

3.验证哨兵是否正常

redis-cli -p 26379 info sentinel

看到master0:name=s21ms,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
表示没问题

4.干掉主库 ,检查主从切换状态

kill -9 12749
 ps -ef|grep redis
 redis-cli -p 6380 info replication
 redis-cli -p 6381 info replication
 redis-cli -p 6380 info replication
 redis-cli -p 6381 info replication
相关文章
相关标签/搜索