概述

特点

  • 高速读写
  • 基于内存
  • 持久化

    • 虽然
  • 过期删除

    • 设定过期时间,过期后自动删除
  • 分布式,主从集群

功能和场景概要

  • 缓存
  • 消息

    • 发布和订阅
  • 计数
  • 队列
  • 地理空间信息处理

    • 存储
    • 搜索
  • 分布式锁

数据类型

  • String
  • HashMap
  • List
  • Set
  • ZSet: 有序集合

过期时间

不要集中过期时间,避免集中过期,导致集中删除影响 Redis 性能

类型

  • 共用功能

    • DEL

      • 删除键
  • 概念

    • key

      • 在根路径下的名称
    • Hash :: Hash Map

      key

      dict 的 名称

      field

      字段名称

      value
      字段的值
1
2
hset mymap name "Lucy"
hset mymap score 80
  • 这里 mymap 是 key
  • name 和 score 是 field
  • "Lucy" 和 80 是 value

string

  • 功能

    set

    创建字符串

    • 使用 set 存储的结果都会转成 字符串 即使是 数字等
    get
    获取整个字符串
    getRange

    获取子串 substring

    • 使用
    GetSet
    返回旧值,设置新值
    MGet
    一次获取多个 Key 对应的值
    SetEx
    设置创建,同时指定过期时间 set exist timeout
    SetNX
    set not exist
    SetRange
    设置子串
    StrLen
    长度
    MSet
    Append
    添加到字符串尾部

二进制操纵

  • 原理

    • 把整个字符串当成一个二进制数,修改给定位 bit
    • 从做到右计数,eg: 01110111: 0 -> 0, 1-> 1, 2->1, …
  • setbit :: 设置给定位

    1
    
      setbit Key Offset Value
    • offset 就是从左到右计算的位
  • getbit :: 获取给定位 bit 的值

对于数值

Incr
数值加 1
IncrBy
加上给定值
IncrByFloat
加 float 数值
Decr
DecrBy
  • 注意:没有 DecrByFloat

hash

  • 功能

    HSET, hset
    创建 HashMap
    HSetNx
    hset when not exist, 字段不存在时设定
    ?

    HGet

    • 获取给定 field 的值

      1
      
        hget yourHash field
    HDel
    删除 field
    ?

    HExists

    • 判断给定 dict 中 是否存在 field
    HLen
    field 数量
    HKeys
    所有字段 field
    HVals
    所有值
    HGetAll
    获取所有 field - value 对
    HScan
    迭代 field - value 对, 在给定 db 中(区别于 HGetAll)

List

  • 功能

    LPush
    创建
    LRange
    获取
    BLPop
    block left pop, 获取第一个元素 并删除
    BRPop
    block right pop
    BRPopLPush
    block right pop and left push to another list
    LIndex
    list index, 通过 index 获取元素
    LInsert
    插入,通过 after|before , pivot 决定插入位置
    LLen
    LPop
    移出第一个元素(left)
    LPush
    左侧插入
    LPushX
    push when list exist
    LRem
    移除几个给定元素
    LSet
    通过 index 设置元素
    RTrim
    修剪,只剩下 start ~ stop
    RPop
    RPopPush
    RPush
    RPushX

Set

  • 功能

    sadd
    创建
    SMembers
    获取
    SScan
    SDiff
    返回差集
    SDiffStore
    返回差集,并存储到新的 Set
    SInter
    intersection 返回交集
    SInserStore
    SUnion
    返回并集
    SUnionStore
    SIsMember
    包含给定元素判断
    SMembers
    所有元素
    SMove
    在 Set 间移动元素
    SPop
    随机删除
    SRem
    删除给定元素
    SRandMemember
    随机获取给定数量元素

zset(sorted set 有序集合)

  • 功能

    • zadd

      • 创建
    • zRangeByScore

消息中间件

订阅 subscribe 和

  1. 通过 channel 和 订阅机制
  2. 一个 channel,可以被多个 client 订阅

    • 多个订阅同时收到相同内容
    • channel 不需要手动创建,订阅时 channel 自动创建
  3. 缺点:

    • 不支持消息的堆积及回溯
    • 不能持久化
    • 不可回溯历史消息

Stream

  1. 链表存储
  2. 可以持久化
  3. 可以回溯任意位置
  4. ID

    • 消息的 id
    • 每个消息都有自己的 ID
    • 保持递增,可以系统生成,可以自己设置
    • 用途:

      • 删除消息
      • 访问消息
  5. 消费:

    • 消费组 Consumer Group
    • 消费组包括多个消费者 Consumer
    • 操作:

      • 消费组创建: XGROUP CREATE [stream_name] [consumer_group_name] [消费方向 0-0 或 $]

        • 0-0 表示从头开始消费
        • $ 表示从尾部开始消费(即已有消息不处理)
      • 消费者创建和消费: XREADGROUP GROUP [group_name] [consumer_name] []
  6. 游标 last_delivered_id

    • 和消费组关联
    • 消费组中的任意一个消费者访问了信息,都会导致 last_delivered_id 改变

数据库

Redis 的数据是 0,1,2,3 数字计数的 参考: