Redis 基础操作

Redis

安装

  1. 目录规划

    [root@r_db01 ~]# tree /data
    /data
    ├── redis_cluster
    │   └── redis_6379
    └── soft
    
    [root@r_db01 ~]# tree /opt/
    /opt/
    └── redis_cluster
        └── redis_6379
            ├── conf
            ├── logs
            └── pid
    
  2. 编译安装

    • 创建所需目录

      mkdir -p /data/soft
      mkdir -p /data/redis_cluster/redis_6379
      mkdir -p /opt/redis_cluster/redis_6379/{conf,pid,logs}
    • 下载tar包

      cd /data/soft/
      wget http://download.redis.io/releases/redis-3.2.9.tar.gz
    • 解压安装

      yum install -y gcc-c++
      tar zxf redis-3.2.9.tar.gz -C /opt/redis_cluster/
      ln -s /opt/redis_cluster/redis-3.2.9/ /opt/redis_cluster/redis
      cd /opt/redis_cluster/redis
      make && make install
    • 生成配置文件

      vi /opt/redis_cluster/redis_6379/conf/redis_6379.conf
      
      ### 以守护进程模式启动
      daemonize yes
      ### 绑定的主机地址
      bind 10.35.172.71
      ### 监听端口
      port 6379
      ### pid文件和log文件的保存地址
      pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid
      logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log
      ### 设置数据库的数量,默认数据库为0
      databases 16
      ### 指定本地持久化文件的文件名,默认是dump.rdb
      dbfilename redis_6379.rdb
      ### 本地数据库的目录
      dir /data/redis_cluster/redis_6379
  3. 启动服务

    • 启动

      redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf
    • 关闭

      redis-cli -h db01 shutdown

使用

  1. 全局命令

    • 查看所以键(禁止使用)

      Keys *  
    • 查看键总数

      Dbsize 
    • 检查键是否存在(存在:1 不存在: 0)

      Exists key
    • 删除键

      Del key [key …]
    • 键过期

      Expire key seconds
      # 大于等于0的证书: 键剩余过期时间
      # -1: 键没设置过期时间
      # -2: 键不存在
    • 查看键的类型

      Type key
  2. 字符类型

    • 设置 - 获取

      SET GET

      db01:6379> set key value
      OK
      db01:6379> get key
      "value"
    • 计数器

      INCR INCRBY

      db01:6379> SET A 10
      OK
      db01:6379> GET A
      "10"
      db01:6379> INCR A
      (integer) 11
      db01:6379> GET A
      "11"
      db01:6379> INCRBY A 4
      (integer) 15
      db01:6379> get A
      "15"
    • 多值设置 - 多支获取

      MEST MGET

      db01:6379> mset key3 v3 key4 v4 key5 v5
      OK
      db01:6379> mget key3 key4 key5
      1) "v3"
      2) "v4"
      3) "v5"
    • 判断,删除

      EXISTS DEL

      db01:6379> exists key5
      (integer) 1
      db01:6379> del key5
      (integer) 1
      db01:6379> exists key5
      (integer) 0
      db01:6379> del key5
      (integer) 0
    • 查看类型

      TYPE

      db01:6379> set key5 v5
      OK
      db01:6379> type key5
      string
    • 过期(单位: 秒)

      EXPIRE

      db01:6379> expire key5 10
      (integer) 1
      db01:6379> ttl key5
      (integer) 6
    • 去除超时

      PERSIST

      db01:6379> persist key5
      (integer) 1
      db01:6379> ttl key5
      (integer) -1
  3. 列表

    LPUSH RPUSH LRANGE

    db01:6379> RPUSH LST 1 2 3 4 5
    (integer) 5
    db01:6379> get lst
    (error) WRONGTYPE Operation against a key holding the wrong kind of value
    db01:6379> lrange lst 0 -1
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"

    RPOP LPOP

    db01:6379> LPOP LST
    "1"
    db01:6379> lrange LST 0 -1
    1) "2"
    2) "3"
    3) "4"
    4) "5"
    db01:6379> RPOP LST
    "5"
    db01:6379> lrange LST 0 -1
    1) "2"
    2) "3"
    3) "4"
  4. 哈希

    HMSET HMGAT HGAT

    db01:6379> HMSET acha name acha age 20 six m
    OK
    db01:6379> HMGET acha name age six
    1) "acha"
    2) "20"
    3) "m"
    db01:6379> HGET acha age
    "20"
  5. 集合

    SADD SMEMBERS

    db01:6379> sadd set1 1 2 3
    (integer) 3
    db01:6379> smembers set1
    1) "1"
    2) "2"
    3) "3"

    SREM

    db01:6379> srem set1 2 3
    (integer) 2
    db01:6379> smembers set1
    1) "1"

    SDIFF (差集)

    db01:6379> sadd set1 1 2 3 4
    (integer) 2
    db01:6379> sadd set2 1 4 5
    (integer) 3
    db01:6379> sdiff set1 set2
    1) "2"
    2) "3"

    SINTER (交集)

    db01:6379> sinter set1 set2
    1) "1"
    2) "4"

    SUNION (并集)

    db01:6379> sunion set1 set2
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"

持久化

RDB

可以在指定的时间间隔内生成数据集的 时间点快照

优点:速度快,适合于用做备份,主从复制也是基于RDB持久化功能实现的

缺点:会有数据丢失

配置参数

vim /data/6379/redis.conf
dir /data/6379
dbfilename dump.rdb
#900秒(15分钟)内有1个更改
save 900 1      
#300秒(5分钟)内有10个更改
save 300 10 
#60秒内有10000个更改  
save 60 10000   

AOF

记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾

优点:可以最大程度保证数据不丢

缺点:日志记录量级比较大

配置参数

#日志文件名
appendfilename "appendonly.aof"
#是否打开aof日志功能
appendonly yes    
#每1个命令,都立即同步到aof
appendfsync always      
#每秒写1次
appendfsync everysec    
#写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof
appendfsync no          

Tip: RDB & AOF 可以同时开启

安全认证

redis默认开启了保护模式,只允许本地回环地址登录并访问数据库

protected-mode yes/no (保护模式,是否只允许本地访问)

bind:指定IP进行监听

[root@db01 ~]# vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf
bind 10.35.172.71  127.0.0.1

requirepass:密码

[root@db01 ~]# vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf
requirepass sa

密码验证

[root@db01 ~]# redis-cli -a sa
127.0.0.1:6379> set k1 v1
OK

or

[root@db01 ~]# redis-cli -a sa
127.0.0.1:6379> set k1 v1
OK

主从复制

一个主节点可以有多个从节点

每个从节点只能由一个主节点

配置方法:

  • 在配置文件中加入

    slaveof {masterHost} {masterPort}
  • 启动命令后加

    slaveof {masterHost} {masterPort}
  • 直接使用命令

    slaveof {masterHost} {masterPort}

查看状态信息:

Info replication

断开复制:

slaveof no one

Tip:断开主从关系,从节点升为主节点,不会清空原有数据

哨兵

Sentinel (哨兵),基于主从复制,为redis提供高可用性,故障时,可以自动切换主从

作用:

  1. 监控(Monitoring)
  2. 提醒(Notification)
  3. 自动故障迁移(Automatic failover)

部署:

  • 创建数据目录

    mkdir -p /data/redis_cluster/redis_26379
  • 创建配置目录

    mkdir -p /opt/redis_cluster/redis_26379/{conf,pid,logs}
  • 生成配置文件

    vim /opt/redis_cluster/redis_26379/conf/redis_26379.conf
    
    bind 10.35.172.71
    port 26379
    daemonize yes
    logfile /opt/redis_cluster/redis_26379/logs/redis_26379.log
    dir /data/redis_cluster/redis_26379
    sentinel monitor mymaster 10.35.172.71 6379 2
    sentinel down-after-milliseconds mymaster 3000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 18000
配置文件说明
#主节点别名 主节点ip和端口 判断主节点失败,两个sentinel节点同意
sentinel monitor mymaster 10.0.0.51 6379 2 
#选项指定 Sentinel 认为服务器已经断线所需的毫秒数。
sentinel down-after-milliseconds mymaster 30000 
#向新的主节点发起复制操作的从节点个数,1轮询发起复制
sentinel parallel-syncs mymaster 1 
#故障转移超时时间
sentinel failover-timeout mymaster 180000 

启动

redis-sentinel /opt/redis_cluster/redis_26379/conf/redis_26379.conf

登录

redis-cli -h db01 -p 26379

查询

Info Sentinel
手动切换主节点
  1. 将从节点 slavepriority 配置为0
  2. 设置主节点
  3. 将slave-priority调回原值
#查询命令
CONFIG GET slave-priority
#设置命令
CONFIG SET slave-priority 0
#主动切换
sentinel failover mymaster
上一篇:网络服务之DHCP


下一篇:用tarball实现liferay自动安装部署15-复制定制后的catalina.sh