Redis

作者: blank_white | 来源:发表于2020-07-19 20:57 被阅读0次

    Redis 端口 : 6379

    客户端登录

    redis-cli

    基础命令

    • Redis 默认 16 个库 0-15
      切换库 :select 0

    • 删除本库:flushdb

      删除所有库:flushall

    • 库记录数:dbsize

    • 显示所有记录:keys *

      显示 k开头两个字母的 : keys k?

    • 设置键值对: set k1 v1

      获取键对应值:get k1

    五大数据类型

    Redis 的数据都是 k v 形式 ,k 有点类似编程里 变量名的感觉, 而 v 可以是各种数据类型

    • String (二进制安全的String)
    • Set
    • ZSet(有序集 )
    • HashMap
    • List

    String

    • 显示所有记录:

      keys *

    • 判断是否存在j键 :

      exists k1

      1 表示有

      0 表示没有

    • 移动到其他库:

      move k1 2 ( 2 为数据库 编号)

    • 查看还有多长时间过期:

      ttl k1

      -1 表示永不过期

      -2 表示已过期

    • 设置过期时间,单位 秒:

    expire k1 7

    • 删除记录:

      del k1

    • 查看 key 类型 :

      type k1

    • 字符串追加

      append k1 12345

      ( k1 原来是 1 ,执行完成后变为 112345)

    • 字符串长度

      strlen k1

      (012345的长度为 6)

    • 数字增加 1

      incr k1

    • 数字减少 1

      decr k1

    • 数字增加

      incrby k1 3

    • 数字减少

      decrby k1 3

    • 获取字符下标范围取字符串

      getrange k1 0 3

      (取 k1 对应字符串的 前 4 个字符 如 k1 为1123456 , 取得 1123 )

    • 在指定范围设值

      setrange k1 0 xxx

      (如 k1 1123456 变为 xxx3456 )

    • 设置值的同时设置过期时间 单位 秒

      setex k1 10 v1

      (设置 k1 为 v1 ,存活 10s )

    • 如果不存在才设置值

      setnx k1 v11

      生效返回 1 ,未生效返回 0

    • 同时设置多个 kv

      mset k1 v1 k2 v2 k3 v3

    • 同时获取多个

      mget k1 k2 k3

    • 同时设置多个 kv (不存在时才设置,有任何一个 k 设置失败,所有的 k 都不会设置)

      msetnx k1 v1 k2 v2

    List

    • 从左侧添加

      lpush list01 1 2 3 4 5

      (依次从左添加 ,结果是 5 4 3 2 1)

    • 从右侧添加

      rpush list02 1 2 3 4 5

      (依次从右添加 ,结果是 1 2 3 4 5 )

    • 按范围显示 list

      lrange list02 0 -1

      (1 2 3 4 5 ,负数表示倒数 ,-1 即倒数第 1)

    • 从左侧取出(取到并移除)一个

      lpop list01

    • 从右侧取出一个

      rpop list01

    • 按下标取元素

      lindex list01 1

      (取下标为 1,即 第 2 个元素)

    • 获得 list 长度

      llen list01

    • 删 n 个 value

      lrem 2 3

      删除 2 个 value 为 3 的

    • 截取 key 指定范围并赋值给 key

      ltrim list01 3 5

      (截取 list01 下标 3 到 5 的元素 ,并赋给 list01)

    • 取出并放入

      rpoplpush list01 list02

      ( 从 list01 右侧取出,放入 list02 左侧 )

    • 设置 下标 为 n 的元素 值

      lset list01 1 x

      (把下标 为1 的元素设置为 x)

    • 在元素前插入

      linsert list01 before x java

      (在元素 x 前面插入 java )

    • 在元素后插入

      linsert list01 after x oracle

      ( 在元素 x 后面插入 oracle )

    Set

    • 向 set 中添加

      sadd set01 1 1 2 2 3 3

    • 查询 set 中全部元素

      smembers set01

    • 查询元素是否存在

      sismember set01 1

      (存在返回 1 ,不存在返回 0)

    • 获取 set 元素数量

      scard set01

    • 删除 set 中的元素

      srem set01 3

    • 随机获得 n 个元素

      srandmember set01 3

      (从 set01 中随机出 3 个元素)

    • 随机出栈(取得并移除) 1个元素

      spop set01

    • 把一个 set 中的 元素,移动到 另一个 set

      smove set01 set02 5

      (把 set01 里面的 5 ,移动到 set02)

    • 差集

      sdiff set01 set02

      (返回 在 set01 里 且 不在 set02 里面的元素)

    • 交集

      sinter set01 set02

    • 并集

      sunion set01 set02

    Hash

    相当于 k v 的 v 是 键值对

    • 设置键值对

      hset user id 11

      ( 相当 Map user ; user.put( id ,11 ) 的意思 )

    • 获得值

      hget user id

    • 设置多组键值对

      hmset customer id 11 name zs age18

    • 获取对组键的值

      hmget customer id name

    • 获取全部键值对

      hgetall customer

    • 删除

      hdel customer name

    • 返回j键值对数量

      hlen customer

    • 是否存在

      hexists customer name

    • 返回所有键

      hkeys customer

    • 返回所有值

      hvals customer

    • 增加值

      hincrby customer age 2

      (对 customer 的 age 增加 2)

    • 增加值(浮点型版本)

      hincrbyfloat customer score 1.5

    • 如果不存在才设置键值对

      hsetnx customer age 16

    ZSet

    相当于

    • 添加

      zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5 100 v6

    • 查询

      zrange zset01 0 -1

      结果为 : v1 v2 v3 v4 v5

    • 带分数查询

      zrange zset01 0 -1 withscores

      结果为 v1 60 v2 70 v3 80 v4 90 v5 100 v6 100 ( 分数和结果是一体的 ,只是这么显示而已)

    • 返回分数在范围内的

      zrangebyscore zset01 60 90

      返回分数 60-90 的包括 60 和 90

      v1 v2 v3 v4

    • 同上 但不包括 90

      zrangebyscore zset01 60 (90

    • 同上 但不包括 60 90

      zrangebyscore zset01 (60 (90

    • 将结果截取

      zrangebyscore 60 90 limit 1 2

      从结果中下标为 1 即第 2 个,截取两个返回

    • 移除

      zrem zset01 v5

    • 统计个数

      zcard zset01

    • 统计 分数范围内的数量

      zcount zset01 60 80

    • 返回 排名

      zrank zset01 v4

      返回 v4 的排名,按照分数从小到大,分数相同时按照 v 的从小到大顺序排

    • 返回逆序排名的下标

      zrevrank zset01 v4

    • 逆序显示范围内的元素

      zrevrange zset 0 -1

    • 逆序按分数范围显示元素

      zrevrangebyscore zset01 90 60

    配置文件

    • 获取配置文件 某一项的值

      config get requirepass

    • 改密码

      config set requirepass "123456"

    • 用密码认证

      auth 123456

      (redis-cli 登录后 做操作会提示没有权限,在 Redis 客户端内 输入此命令进行认证)

    • 获取 redis 在那个目录下启动的

      config get dir

    持久化

    rdb :

    每隔一段时间,把所有数据存到文件中,此时会把内存中的数据,整个复制一份到内存中,这时对内存的消耗很大

    备份策略:

    配置文件里

    save 900 1
    save 300 10
    save 60 10000
    

    表示没 900 秒内,有 1 次改动,则备份

    • 运行时主动备份

      客户端内命令: save

      注意 flushall 清空操作,也会导致立即备份,但是这样做毫无意义

    • 如何恢复

      直接把 dump.rdb 文件放在启动目录下

    aof

    aop 是把对 redis 的操作记录下来,以此来达成备份

    默认备份文件名:appendonly.aof

    配置文件中

    • 备份文件超过多大时候开始对操作记录进行整合,重写备份文件

      auto-aof-rewrite-min-size 64mb

      实际生产环境中,保守估计 数据要 3G 起步

    • 修复受损的 aof 文件

      redis-check-aof --fix appendonly.aof

    rdb 和 aof 优先级

    如果 dump.rdb 和 appendonly.aof 同时存在,则使用 aof 文件

    事务

    • 开启事务:

      multi

    • 执行:

      exec

      • 如果事务中出现编译时异常,命令不合规范,则整个事务失败
      • 如果事务中出现运行时异常,如对字符型数据 xx 做自增,则只有此命令失败,事务中的其他命令正常执行
    • 放弃事务

      discard

    • 监视

      wath k1

      (监视一个或多个 key ,在事务执行前,如果监视的 key 被改动,则整个事务执行失败)

    watch k1 k2
    multi 
    set k1 v11
    set k2 v22
    exec 
    
    如果 在 watch 后 exec 前,其他客户端执行 set k1 v1xx,则 整个事务执行失败
    

    消息

    • 订阅频道

      subscribe c1 c2 c3

      可以使用通配符

      subsribe c*

    • 发送消息

      publish c2 hello-redis

    主从复制

    默认配置下

    从机连接主机:从机 会完全复制主机的数据,包括连接主机命令执行前,主机拥有的数据

    从机不能写

    主机挂了:从机仍作为从机正常使用

    主机回来:从机会自动续接上

    从机挂了,再回来:需要重新输入命令连接主机,可以写进配置文件在启动时直接连接主机

    • 显示信息

      info replication

    • 配置跟从主机

      slaveof 127.0.0.1 6379

      (会完全复制主机的数据,包括命令执行前,主机拥有的数据)

    薪火相传

    • 主机的从机,可以作为其他从机的主机,但是只起一个传递的效果,

    反客为主

    • 停止与其他数据库的同步,自己成为主机

      slaveof no one

    哨兵模式

    主机死了之后,自动分配一个从机作为新的主机

    主机重启启动后,会作为从机连接新的主机

    sentinel.conf

    sentinel monitor 被监控数据库的名字 被监控的数据库ip 被监控的数据库端口号 重新分配主机时需要获得的投票数

    sentinel monitor host6379 127.0.0.1 6379 1
    
    • 启动一个哨兵进程

      redis-sentinel sentinel.conf

    相关文章

      网友评论

          本文标题:Redis

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