Redis 基础操作

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 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
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
存储 NoSQL Redis
redis中Hash命令的基础操作
redis中Hash命令的基础操作
79 1
|
5月前
|
NoSQL Java Redis
【Redis】 Java操作Redis客户端命令——基础操作与字符串操作
【Redis】 Java操作Redis客户端命令——基础操作与字符串操作
|
6月前
|
NoSQL Java Unix
Redis基础操作 String List
Redis基础操作 String List
41 0
|
6月前
|
存储 NoSQL Redis
redis中String命令的基础操作
redis中String命令的基础操作
43 0
|
存储 NoSQL Java
Redis数据类型基础操作
Redis数据类型基础操作
107 0
|
NoSQL Redis 开发者
redis 入门-redis 基础操作| 学习笔记
快速学习 redis 入门-redis 基础操作
redis 入门-redis 基础操作| 学习笔记
|
1月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
|
1月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
74 6
|
6天前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
7天前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构