码迷,mamicode.com
首页 > 其他好文 > 详细

Redis基础及进阶

时间:2019-10-23 11:19:46      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:先后   address   规则   require   incr   复制   数据类型   tps   add   

1. redis安装

redis是内存型数据库

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

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

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

  1. redis安装学习

    1.yum安装 ,最简单,配置yum源,yum仓库才可以
    2.源码编译安装, 指定安装路径,自定制第三方扩展模块功能(nginx http  web 80,  443 https, openssl功能扩展 )
    3.rpm软件包手动安装,很垃圾,手动解决依赖关系,不适用
  2. 编译安装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服务端

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

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

    • 更改启动端口
    • 添加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

Redis基础及进阶

标签:先后   address   规则   require   incr   复制   数据类型   tps   add   

原文地址:https://www.cnblogs.com/can-xue/p/11724914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!