导航
导航
文章目录
  1. 简介
    1. 全局命令
    2. 数据结构和内部编码
    3. 单线程架构
  2. 五种基本数据结构
    1. String 字符串
      1. 常用命令
      2. 不常用命令
      3. 内部编码
      4. 典型使用场景
  3. Hash 哈希
    1. 常用命令
    2. 内部编码
  • List 列表
    1. 常用命令
    2. 内部编码
    3. 典型使用场景
  • Set 集合
    1. 常用命令
    2. 内部编码
  • ZSet 有序集合
    1. 常用命令
    2. 内部编码
  • List、Set、ZSet 三者比较
  • 键管理
    1. 单个键管理
    2. 遍历键
    3. 数据库管理
  • Redis 基础

    简介

    全局命令

    • keys * 查看所有键
    • dbsize 查看键总数
    • exists 检查键是否存在
    • del 删除键
    • expire 键过期
    • type 键的数据类型

    数据结构和内部编码

    五种数据结构类型分别是:string(字符串-键值对)、hash(哈希-键值对集合)、list(列表-可重复有序值)、set(集合-不可重复无序值)、zset(有序列表-可重复有序值-关联分数)

    每种数据类型都有自己的内部编码实现,而且是多种实现。

    单线程架构

    Redis 使用了单线程架构和 I/O 多路复用模型来实现高性能的内存数据库服务。

    Redis 是面向快速执行场景的数据库。

    五种基本数据结构

    String 字符串

    字符串,最基础的数据结构

    单个的键值对

    常用命令

    • set 设置值
    • get 获取值
    • mset 批量设置值
    • mget 批量获取值
    • incr 自增 decr 自减 incrby 自增指定数字 decrby 自减指定数字 incrbyfloat 自增浮点数

    不常用命令

    • append 追加值,向字符串的末尾追加值
    • strlen 字符串长度
    • getset 设置并返回原值
    • setrange 设置指定位置的字符
    • getrange 获取部分字符串

    内部编码

    字符串类型的内部编码有 3 种,可以使用 object encoding 查看

    • int 8 个字节的长整型
    • embstr 小于等于 39 个字节的字符串
    • raw 大于 39 个字节的字符串

    注: 3.2 版本之前 39 个字节,3.2 之后的版本 44 个字节

    典型使用场景

    1. 缓存功能
    2. 计数
    3. 共享 Session
    4. 限速

    Hash 哈希

    哈希,也称散列、字典、关联数组

    存储多个键值对,无顺序,键不能重复,值可以重复

    常用命令

    • hset 设置值
    • hget 获取值
    • hdel 删除 field
    • hlen 计算 field 个数
    • hmset hmget 批量设置或获取 field - value
    • hexists 判断 field 是否存在
    • hkeys 获取所有 field
    • hvals 获取所有 value
    • hgetall 获取所有的 field - value
    • hincrby hincrbyfloat 类 incrby 和 incrbyfloat,作用域为 field
    • hstrlen 计算 value 的字符串长度

    内部编码

    哈希类型的内部编码有 2 种

    • ziplist 压缩列表
    • hashtable 哈希表

    List 列表

    列表,用来存储多个有序的字符串

    类似一个水平的管道,列表内的值有顺序,可以通过 Lpush、Rpush 向管道左右两端插值,读取值时从左往右,值可以重复

    -1 表示列表最后一位的索引

    常用命令

    • rpush 从右端插入元素
    • lpush 从左端插入元素
    • linsert 向某个元素前或者后插入元素
    • lrange 获取指定范围内的元素列表
    • lindex 获取指定索引下标的元素
    • llen 获取列表长度
    • lpop 从列表左侧弹出元素
    • rpop 从列表右侧弹出元素
    • lrem 删除指定元素
    • ltrim 按照索引范围修剪列表
    • lset 修改指定索引下标的元素

    内部编码

    列表类型的内部编码有 2 种

    • ziplist 压缩列表
    • linkedlist 链表

    典型使用场景

    1. 消息队列
    2. 文章列表

    Set 集合

    集合

    集合内值无顺序,不能索引下标获取元素,不能通过操作向集合的某一端插值,只能通过 Sadd、Srem 添加或移除元素,元素不可以重复

    常用命令

    • sadd 添加元素
    • srem 删除元素
    • scard 计算元素个数
    • sismember 判断元素是否在集合中
    • srandmember 随机从集合返回指定个数元素
    • spop 随机从集合弹出元素
    • smembers 获取所有元素
    • sinter 求多个集合的交集
    • sunion 求多个集合的并集
    • sdiff 求多个集合的差集
    • sinterstore | sunionstore | sdiffstore destination key 将交集、并集、差集的结果保存

    内部编码

    集合类型的内部编码有 2 种

    • intset 整数集合
    • hashtable 哈希表

    ZSet 有序集合

    有序集合

    ZSet 类似 Set ,但是添加元素之前,要赋一个分值,分值必须为浮点数,无索引顺序,有范围,元素不能重复,分值可以重复

    常用命令

    • zadd 添加元素
    • zcard 计算元素个数
    • zscore 查看某个元素分值
    • zrank zrevrank 计算元素排名,rank 低到高,revrank 高到低,从 0 开始
    • zrem 删除元素
    • zincrby 增加元素的分数
    • zrange zrevrange 返回指定排名范围的元素,默认低到高,rev 高到低
    • zrangebyscore zrevrangebyscore 返回指定分数范围的元素
    • zcount 返回指定分数范围成员个数
    • zremrangebyrank 删除指定排名内的升序元素
    • zremrangebyscore 删除指定分数范围的元素
    • zinterstore | zunionstore destination numskey weights aggregate 交集、并集,参数有权重、汇总

    内部编码

    有序集合类型的内部编码有 2 种

    • ziplist 压缩列表
    • skiplist 跳跃表

    List、Set、ZSet 三者比较

    数据结构 是否重复 有序 有序实现方式 应用场景
    List 列表 索引下标 时间轴、消息队列等
    Set 集合 标签、社交等
    ZSet 有序集合 分值 排行榜系统、社交等

    键管理

    单个键管理

    • rename 重命名键
    • randomkey 随机返回一个键
    • expire expireat 键在 x 秒后过期,键在秒级时间戳后过期
    • pexpire pexpireat 键在 x 毫秒后过期,键在毫秒级时间戳后过期
    • ttl pttl 查看键剩余过期时间
    • persist 清除键的过期时间

    遍历键

    • keys 全量遍历键
    • scan 渐进式遍历

    数据库管理

    • select 切换数据库,一般不用
    • flushdb flushall 清除数据库,清除当前、清除所有